请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

对于使用ChannelAwareMessageListener的疑问

        messageListenerContainer.setMessageListener(new ChannelAwareMessageListener() {
            @Override
            public void onMessage(Message message, Channel channel) throws Exception {
                orderMessageService.handleMessage(message.getBody());
                channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
            }
        });

在这节最后提出了假如用以上方法监听队列时,有5个方法5个队列的情况,要去判断队列名是什么,再去调用对应的方法。
我的疑问是怎么知道队列名呢?
另外,如果用作者您的建议,使用MessageListenerAdapter虽然达到监听不同的队列消息使用不同的方法去处理,但是 是不是就不能实现手动ACK了?

正在回答 回答被采纳积分+3

1回答

Moody 2021-03-15 10:11:51

1 message里面有属性可以拿到队列名称。

message.getMessageProperties().getConsumerQueue()

2 应该可以的,能拿到channel就能手动ACK的。

channel.basicAck();
0 回复 有任何疑惑可以回复我~
  • 请问:使用MessageListenerAdapter的方式,需要开启手动ACK,该如何拿到channel?
    回复 有任何疑惑可以回复我~ 2021-03-21 19:10:30
  • Moody 回复 慕瓜212817 #2
    从源码上看,直接在handleMesasage上加一个Channel参数就可以了,因为反射调用的时候,Channel也作为参数传过来了。(原理是这样,你可以试下)
    回复 有任何疑惑可以回复我~ 2021-03-22 10:51:36
  • 我试过了,不可以的,在底层调用的时候,参数只有一个byte[]类型的参数,message和channel是传递不过来的,如果我方法有多个参数,是会报错的
    回复 有任何疑惑可以回复我~ 2021-08-17 17:16:15
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信