ActiveMQ 消息未在第二个消费者中接收
Posted
技术标签:
【中文标题】ActiveMQ 消息未在第二个消费者中接收【英文标题】:ActiveMQ messages not receive in second consumer 【发布时间】:2018-08-22 00:06:56 【问题描述】:我已经使用Java
和Stomp.js
实现了ActiveMQ-Pub/Sub
程序。只有一个生产者写在Java
,消费者写在js
。
这是问题场景,
生产者保持向主题发布消息。 消费者A
连接和订阅同一个主题。
消费者B
连接并订阅同一个主题。
现在A
和B
同时监听同一个topic,但是A
收到的数据和B
收到的数据不一样,B
会跳过一些数据。
当我断开A
时,B
工作正常。
当我断开B
时,A
工作正常。
这里是生产者代码
public static Session SESSION;
/**
*
* @return @throws JMSException
*/
public static Session getSessionInstance() throws JMSException, IOException
if (null == SESSION)
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(Context.getSystemProperties().getAmp().getUrl());
Connection connection = connectionFactory.createConnection();
connectionFactory.getPrefetchPolicy().setAll(1);
connection.start();
SESSION = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
return SESSION;
/**
*
* @param message
* @throws JMSException
*/
public static void sendMessage(String topic, String message) throws JMSException, IOException
Session session = getSessionInstance();
Destination destination = session.createQueue(topic);
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
TextMessage txtMessage = session.createTextMessage(message);
producer.send(txtMessage);
producer.close();
和消费者
var client = Stomp.client("ws://localhost:61614?consumer.prefetchSize=1", "v11.stomp");
client.debug = null;
var selectedVehicleImei = 741852963123456;
client.connect("", "", function (topic)
client.subscribe("COO." + selectedVehicleImei, function (message)
var infodata = JSON.parse(message.body);
console.log(infodata);
)
)
我尝试将 pre-fetch
值设置为,
在制片人中,
connectionFactory.getPrefetchPolicy().setAll(1);
在消费者中,
?consumer.prefetchSize=1
但仍然没有运气,这里有什么问题,谁能告诉我如何才能完成这项工作?
【问题讨论】:
【参考方案1】:我认为您需要使用 createTopic 而不是 CreateQueue。即使您调用了变量主题,它看起来也是一个队列。
队列用于只需要由一个消费者回答的任务(例如发送电子邮件)。
【讨论】:
有一个问题,消费者没有得到任何回应和ActiveMQ admin
显示,我认为两个主题,例如COO.355227044952539
和ActiveMQ.Advisory.Producer.Topic.COO.355227044952539
这可能吗?
是您之前创建的目的地之一吗? (队列)
另外,还有一个与主题同名的队列,COO.355227044952539
js
代码有些问题,当我尝试订阅另一个新主题时,它会创建一个显示在admin
控制台中的队列
我想知道像client.subscribe("/topic/COO." + selectedVehicleImei, function (message)
这样的东西是否可行。文档说要在开始时输入/queue/
或/topic/
,但如果你什么都不放,它可能会退回到/queue/
以上是关于ActiveMQ 消息未在第二个消费者中接收的主要内容,如果未能解决你的问题,请参考以下文章