网站底部的备案号,铜仁北京网站建设,现在做网站用什么工具,wordpress幻灯片教程视频配置文件
spring:rabbitmq:publisher-confirm-type: correlated #开启确认回调publisher-returns: true #开启返回回调listener:simple:acknowledge-mode: manual #设置手动接受消息消息从生产者到交换机 无论消息是否到交换机ConfirmCallback都会触发。 Resourceprivate Rabb…配置文件
spring:rabbitmq:publisher-confirm-type: correlated #开启确认回调publisher-returns: true #开启返回回调listener:simple:acknowledge-mode: manual #设置手动接受消息消息从生产者到交换机 无论消息是否到交换机ConfirmCallback都会触发。 Resourceprivate RabbitTemplate rabbitTemplate;PostConstructpublic void init() {//构造方法执行之后执行,用于初始化一些信息rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {Overridepublic void confirm(CorrelationData correlationData, boolean ack, String cause) {if (ack) {log.info(消息成功到达交换机);return;}//未到达交换机可以采取一系列措施保证消息不会丢失log.error(消息未发送到交换机{}, cause);}});}消息从交换机到队列 只有消息没到达队列才会触发ReturnsCallback Resourceprivate RabbitTemplate rabbitTemplate;PostConstructpublic void init() {rabbitTemplate.setReturnsCallback(new RabbitTemplate.ReturnsCallback() {Overridepublic void returnedMessage(ReturnedMessage returned) {log.error(消息没有从交换机到达队列{}, returned.getReplyText());}});}消息从队列到消费者ACK 消息默认是自动确认的手动确认需配置文件开启无论消息是否被成功消费都会被确认确认后消息就会自动删除
Channel接口里有三个方法
// deliveryTag消息的唯一表示 multiple 为true可以批量处理这条消息之前的所有消息假设你的消费者从 RabbitMQ 中获取了一批消息然后在处理完这批消息后你可以一次性确认所有消息而不需要一个一个地确认。requeue 是否重新入队不重新入队就会变成死信如果配置了死信交换机和死信队列就会进入死信队列没有配置消息就直接删除
void basicAck(long deliveryTag, boolean multiple) //确认消息
void basicNack(long deliveryTag, boolean multiple, boolean requeue)//不确认消息
void basicReject(long deliveryTag, boolean requeue)// 拒绝消息示例代码 RabbitListener(queues {queue.direct.i})public void receiveMessage2(Message message, Channel channel) {MessageProperties messageProperties message.getMessageProperties();//消息的唯一标识发消息时自动添加消息的身份证long deliveryTag messageProperties.getDeliveryTag();try {byte[] body message.getBody();log.info(接收到的消息为{}, new String(body));//multiple false 表示只确认当前消息 true 确认所有消息channel.basicAck(deliveryTag, false);} catch (Exception e) {log.error(处理过程出错{}, e.getMessage());try {//requeue true 重新入队 false 进入死信队列如果没有死信队列则直接删除channel.basicNack(deliveryTag, false, false);} catch (IOException ex) {throw new RuntimeException(ex);}throw new RuntimeException(e);}}