我有一个简单的单身豆,用于发送兔子消息。由于这些方法用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()方法,初始化通道
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)];
在销毁豆之前,关闭所有通道