RabbitMQ多消费者实例时,保证只有一个消费者进行消费(单活消费者模式)

有一种业务场景,当人员组织结构变更时,会有大量数据进行推送。这些数据类型有的是add,有的是update,并且必须先add,才能进行update。

这时,为了保证消费顺序,需要只有一个实例进行按顺序消费,其他实例仅提供日常对外服务,不进行消息消费。当唯一消费实例无法消费或掉线时,会自动开启下一个消费者进行消费,保证多个实例消费者中仅有一个正常消费,其他作为备选。

这时就会用到消费者单活模式,也就是如下图管理页面中所显示。
在这里插入图片描述
使用起来很简单,只是在声明队列的时候的参数(arguments参数),将x-single-active-consumer设置为True即可。

代码如下:

HashMap<String,Object> args = new HashMap<String,Object>();
args.put("x-single-active-consumer", true);	
......
//创建Queue
channel.queueDeclare(queueName, true, false, false, args);

将x-single-active-consumer设置为True,则这个队列只允许存在一个有效的消费者消费消息,其他消费者处于备选状态。

注意:如果一个队列已经创建为非x-single-active-consumer,而你想更改其为x-single-active-consumer,上面的代码是会报错的,错误信息是:声明的队列的和server上的队列不一致。把原来队列删除了即可。

完结撒花★,°:.☆( ̄▽ ̄)/$:.°★

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用和引用,消费方出现不能消费消息的情况可能是由于消费者没有正确应答导致的。在目前的exchange的路由策略中,消费者使用ACK自动应答模式处理队列消息。因此,如果消费者没有正确应答消息,即使消息被发送到队列中,消费者也无法接收和处理消息。 解决这个问题的方法是确保消费者正确应答消息。根据引用中的描述,如果需要新增一个队列服务,需要进行以下开发步骤: 1. 创建队列并发送消息。 2. 确保消费者在接收到消息后,正确应答消息。这可以通过在消费者逻辑中添加ACK应答的代码来实现。消费者在处理完消息后,调用ACK方法来告知RabbitMQ已经成功处理了消息。 通过正确的应答消息,消费者将能够从队列中接收和处理消息,解决消费者没有应答的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [解决一次rabbitmq消费者消费不了消息的情况](https://blog.csdn.net/m0_67401270/article/details/124129647)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Python队列RabbitMQ 使用方法实例记录](https://download.csdn.net/download/weixin_38612139/13988293)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值