rabbitmq java 多线程_RabbitMQ和通道Java线程安全

在本指南

https://www.rabbitmq.com/api-guide.html RabbitMQ家伙状态:

Channels and Concurrency Considerations (Thread Safety)

Channel instances must not be shared between threads. Applications should prefer using a Channel per thread instead of sharing the same Channel across multiple threads. While some operations on channels are safe to invoke concurrently, some are not and will result in incorrect frame interleaving on the wire. Sharing channels between threads will also interfere with * Publisher Confirms.

线程安全性非常重要,所以我尽可能的努力,但这里的问题是:

我有这个应用程序接收来自Rabbit的消息.收到消息时,它会处理它,然后在完成消息时进行确认.该应用程序可以在具有2个线程的固定线程池中同时处理两个项目. ROS的QOS预取设置为2,因为我不想在一个时间框架内处理更多的应用程序.

现在,我的消费者的handleDelivery执行以下操作:

Task run = new Task(JSON.parse(message));

service.execute(new TestWrapperThread(getChannel(),run,envelope.getDeliveryTag()));

在这一点上,你已经知道TestWrapperThread做了channel.basicAck(deliveryTag,false);称为最后一次操作.

通过我对文档的理解,这是不正确的,可能是有害的,因为通道不是线程安全的,这种行为可能会使事情发生.但是我应该怎么做呢?我的意思是,我有一些想法,但他们会使一切变得更加复杂,如果真的有必要,我想弄清楚.

提前致谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值