【发布时间】: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
但仍然没有运气,这里有什么问题,谁能告诉我如何才能完成这项工作?
【问题讨论】:
标签: javascript java websocket activemq