rabbitmq:
host: 192.168.88.22
port: 5672
username: admin
password: admin
#开启 confirm 确认机制
publisher-confirms: true
#开启 return 确认机制
publisher-returns: true
#设置为 true 后 消费者在消息没有被路由到合适队列情况下会被return监听,而不会自动删除
template:
mandatory: true
#消费者消息签收模式为自动时,如果消费端处理出现异常并且被抛出了,该条消息就会一直被重新消费
listener:
direct:
acknowledge-mode: manual # 开启 ack 手动确认
simple:
#消费者最小数量
#concurrency: 1
#max-concurrency: 1
acknowledge-mode: auto
retry:
# 是否开启消费者重试(为false时关闭消费者重试)
enabled: true
#最大重试重新投递消息次数
max-attempts: 1
initial-interval: 1000ms
##重试次数超过上面的设置之后是否丢弃
default-requeue-rejected: true
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class ConfirmAndReturnCallback implements RabbitTemplate.ConfirmCallback, RabbitTemplate.ReturnCallback {
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
if (ack) {
log.info("发送确认,correlationData={} ,ack={}, cause={}", correlationData, ack, cause);
} else {
log.error("消息发送异常!");
}
}
@Override
public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
log.info("returnedMessage ===> replyCode={} ,replyText={} ,exchange={} ,routingKey={}", replyCode, replyText, exchange, routingKey);
}
@Autowired
public void setRabbitTemplate(RabbitTemplate rabbitTemplate){
rabbitTemplate.setConfirmCallback(this);
rabbitTemplate.setReturnCallback(this);
}
}
@Autowired
private RabbitTemplate rabbitTemplate;
/**
* 修改 消息通过rabbitmq同步ES
*
* @param gasOrder
*/
private void sendMessageToEs(GasOrder gasOrder) {
EsMsg msg = new EsMsg("demo", "test_order", "insert", testOrder, UUID.randomUUID().toString());
String sendOrder = JSON.toJSONString(msg);
rabbitTemplate.convertAndSend("sycToEsExchange", "sycToEs_routingkey", JSON.toJSONString(msg));
log.info("send message param : {}, rtn : {}", sendOrder, sendOrder);
}