如果您的客户端安全,则每个线程打开新频道仍然是最好的练习?

问题描述 投票:0回答:1

我有一个简单的单身豆,用于发送兔子消息。由于这些方法用locktype.write进行注释,因此确保只能通过一个线程访问该方法,我想知道是否需要遵守为每个线程打开通道的最佳练习。

@Singleton public class RMQMessageBean extends AmqpService { private Connection con; private Channel channel; @PostConstruct public void init(){ //init con and channel } @Lock(LockType.WRITE)) public void sendMessage(String msg){ channel.basicPublish(.....); } }
有一种更好的方法来实现这一目标吗?在忙碌的一天,我最多收到每秒15个请求,每个请求都会发送一条小消息(最大50比较)。

列出该频道已经工作了一段时间,但我注意到BasicPublish的默认锁定时间比5秒的默认锁定时间更长。 我正在尝试遵守兔子最佳实践。 我试图写一个负责发送消息的简单bean。

INSTEAD拥有所有消息发送的单个通道,您可以使用多个线程并行使用的通道池。 如下:

private Connection con; private Channel[] channels; private AtomicInteger channelIndex;

inindideInit()方法,初始化通道
java rabbitmq
1个回答
0
投票
channels = new Channel[10]; // Example size for (int i = 0; i < channels.length; i++) { channels[i] = con.createChannel(); } channelIndex = new AtomicInteger(0);


在发布消息之前,

Channel channel = channels[channelIndex.getAndUpdate(i -> (i + 1) % channels.length)];

在销毁豆之前,关闭所有通道

	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.