RabbitMQ常见题目办理方案

打印 上一主题 下一主题

主题 553|帖子 553|积分 1659

RabbitMQ常见题目办理方案

消息丢失题目

   
      
  • 生产者丢失消息  
  • RabbitMQ弄丢消息  
  • 消费者弄丢消息
  生产者丢失消息



  • 生产者消息没到交换机,相称于生产者弄丢消息
  • 交换机没有把消息路由到队列,相称于生产者弄丢消息
对于上面两种情况,我们可以使用异步的监听操作机制来防备
   ①乐成/未乐成发送到交换机可以触发一个confirm-type监听
  ②交换机发送到队列会有一个publisher-returns监听
  在pom文件中引入依赖项后进行设置文件的编写
  1. rabbitmq:
  2.     publisher-returns: true
  3.     publisher-confirm-type: correlated
  4. #新版本 publisher-confirms: true 已过时
复制代码
  编写设置类
  1. @Configuration
  2. @Slf4j
  3. public class RabbitMQConfig {
  4.    
  5.     @Autowired
  6.     private RabbitTemplate rabbitTemplate;
  7.     @PostConstruct
  8.     public void enableConfirmCallback() {
  9.    
  10.         //confirm 监听,当消息成功发到交换机 ack = true,没有发送到交换机 ack = false
  11.         //correlationData 可在发送时指定消息唯一 id
  12.         rabbitTemplate.setConfirmCallback(
  13.             (correlationData, ack, cause) -> {
  14.    
  15.             if(!ack){
  16.    
  17.                 //记录日志、发送邮件通知、落库定时任务扫描重发
  18.             }
  19.         });
  20.         
  21.         //当消息成功发送到交换机没有路由到队列触发此监听
  22.         rabbitTemplate.setReturnsCallback(returned -> {
  23.    
  24.             //记录日志、发送邮件通知、落库定时任务扫描重发
  25.         });
  26.     }
  27. }
复制代码
  tips:
  对于实际开发中,一般不这样使用,由于丢失的概率很低,成本又很高,一般都采用日志/邮件记载,手动维护
  真的极其罕见的是生产者弄丢消息,那么开发往数据库补数据就行了。
  RabbitMQ弄丢消息



  • RabbitMQ 宕机导致队列、队列中的消息丢失,相称于 RabbitMQ 弄丢消息
   办理方法就是设置长期化消息写出磁盘,这样子可以确保RabbitMQ宕机重启后队列和消息不会丢失
  长期化操作:


  • 交换机长期化
  • 队列长期化
  • 消息长期化
   交换机长期化
  1. @RabbitListener(
  2.         bindings = @QueueBinding(
  3.                 value = @Queue(
  4.                     value =
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莫张周刘王

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表