RabbitMQ消息确认机制-可靠性抵达

  • 时间:
  • 来源:互联网
  • 文章标签:

一、RabbitMQ的使用

 1.发送消息 

      ①.发送消息需要交换机,路由,msg

      ②.发送对象需要实现序列化

       ③.添加消息转换器

 @Bean
    public MessageConverter messageConverter() {
        return new Jackson2JsonMessageConverter();
    }

   2.接受消息

  RabbitListener

监听队列
@RabbitListener(queues=):标记在类和方法上面
public void recieveMessage(Message message, NewObject newObject, Channel channel){
}

RabbitHandler

@RabbitHandler:标记在方法上面:对于不同的消息有不用的队列进行监听(重载的方法)
public void recieveMessage1(Message message, NewObject1 newObject1, Channel channel){
}

@RabbitHandler:标记在方法上面:对于不同的消息有不用的队列进行监听(重载的方法)
public void recieveMessage2( NewObject2 newObject2, Channel channel){
}


 

一、方案

 生产端,投递端,消费端配置

#只要抵达队列,以异步发送优先回到# 开启发送端消息抵达Broker确认
#spring.rabbitmq.publisher-confirms=true
## 开启发送端消息抵达队列确认
#spring.rabbitmq.publisher-returns=true
spring.rabbitmq.template.mandatory=true

 1.confirmCallback(生产端)

  配置MyRabbitMQ:初始化操作

2.returnCallback (投递确认)

3. Ack(消费端消息确认机制:手动确认)

#手动ack消息,非批量模式
spring.rabbitmq.listener.simple.acknowledge-mode=manual
监听队列
@RabbitListener(queues=):标记在类和方法上面
public void recieveMessage(Message message, NewObject newObject, Channel channel){
long deliverTag = messge.getMessageProperties().getDeliveryTag();

//签收消息:false:只手动签收当前消息
 channel.basicAck(deliverTag,false)
 //拒绝签收,不会进入队列,丢弃消息
 channel.basicAck(deliverTag,false,false:消息丢失/ture:消息不会丢失)
}

 

本文链接http://www.taodudu.cc/news/show-1782144.html