【发布时间】:2016-10-02 06:06:01
【问题描述】:
如果我在我的 Producer 中设置 TimeToLive,我的 Subscriber 不会收到任何消息。我使用 activeMQ V. 5.13.3 作为消息代理。
我的制作人
javax.naming.Context ctx = new InitialContext();
// lookup the connection factory
factory = (javax.jms.TopicConnectionFactory)ctx.lookup("ConnectionFactory");
// create a new TopicConnection for pub/sub messaging
connection = factory.createConnection("user", "pwd");
// lookup an existing topic
destination = (javax.jms.Topic)ctx.lookup("MyTopic");
// create a new TopicSession for the client
session = connection.createSession(false, TopicSession.AUTO_ACKNOWLEDGE);
connection.start();
producer = session.createProducer(destination);
producer.setTimeToLive(10000);
TextMessage message = session.createTextMessage();
message.setText("The Message");
producer.send(message);
我的消费者
javax.naming.Context ctx = new InitialContext();
// lookup the connection factory
factory = (javax.jms.TopicConnectionFactory)ctx.lookup("ConnectionFactory");
// create a new TopicConnection for pub/sub messaging
connection = factory.createConnection("user", "pwd");
connection.setClientID("ClientID-"+id);
connection.start();
// lookup an existing topic
destination = (javax.jms.Topic)ctx.lookup("MyTopic");
// create a new TopicSession for the client
session = connection.createSession(false, TopicSession.AUTO_ACKNOWLEDGE);
consumer = session.createDurableSubscriber(destination, id);
consumer.setMessageListener(new MessageListenerConsumer("ClientID-"+id));
如果我不使用 setTimeToLive() 消费者会收到消息,但使用 setTTL() 没有消息到达消费者 - 不会少于或多于定义的 10 秒 TTL!为什么?哪里错了?
谢谢
【问题讨论】:
-
这是什么问题,问题是什么,TTL 正是这样做的
-
抱歉,首先我启动了我的 consumerListener,然后我启动了我的 producer。如果没有 TTL,我会在不到 1 秒的时间内收到消息。在我的生产者中,将 TTL 设置为 10 秒 - 所以我希望消费者收到带有和不带有 TTL 的消息。我预计,如果我在发送消息后超过 10 秒启动消费者,那么我不会收到消息
标签: java jms activemq producer-consumer jms-topic