【发布时间】:2013-04-30 15:15:24
【问题描述】:
我已经配置了 jms 队列,其中多个侦听器正在侦听同一个队列,如果我将多个对象推送到我的队列中,哪个侦听器将获取消息?是否可以保证知道哪个听众听我的消息?
【问题讨论】:
-
你能贴一些代码吗?
我已经配置了 jms 队列,其中多个侦听器正在侦听同一个队列,如果我将多个对象推送到我的队列中,哪个侦听器将获取消息?是否可以保证知道哪个听众听我的消息?
【问题讨论】:
您是否对侦听器进行了自定义编码?如果是这样,只需添加一些代码为每个侦听器生成唯一的 id,将 id 保存在实例变量中。当侦听器收到消息时,将带有 id 的事件输出到标准日志文件。
public class MyListener extends MessageListener {
private static int listeners;
private int id;
public MyListener(){
this.id = generateUniqueId();
}
public void onMessage(Message m){
System.out.println("Listener " + id + " got message!");
//do stuff here
}
private synchronized static int generateUniqueId(){
return listeners += 1;
}
}
【讨论】:
您好 user2336442(顺便说一句好名字...), 如果两个接收者在同一个队列上侦听,则无法保证其中哪一个会先收到消息,因为它们遵循先到先得的原则。如果两个监听器在同一台机器上(相同的ip地址)就无法知道是哪一个收到了消息,否则可以通过控制台粗略查看消息发送到哪里...
【讨论】: