ActiveMQ,丢弃未消费的消息
ActiveMQ, discard unconsumed messages
如何配置我的 BrokerService
以丢弃未使用的消息?
我不希望我的客户端在订阅服务器队列时收到服务器发送的所有旧消息。
这是我目前的经纪人:
BrokerService ret = new BrokerService();
ret.setPersistent(false);
ret.setUseJmx(false);
ret.addConnector("tcp://0.0.0.0:4444");
目前,我的服务器首先启动并发送大约 10 条消息。之后,我的客户端订阅了队列,它收到了在没有客户端订阅时发送的所有 10 条消息。我不想要这种行为。
已解决
@Bean
public JmsTemplate jsmTemplate(ConnectionFactory connectionFactory) {
JmsTemplate ret = new JmsTemplate();
ret.setConnectionFactory(connectionFactory);
ret.setMessageConverter(jacksonJmsMessageConverter());
// Enable the TimeToLive
ret.setExplicitQosEnabled(true);
// live time in millis of every sent message, unconsumed messages will be removed from the queue
ret.setTimeToLive(10000L);
return ret;
}
然后我发送这样的消息:
// after 10 seconds this message will be discarded from the queue
jmsTemplate.convertAndSend("messages", "hello from server");
解决方案#2
我创建了一个 TOPIC 而不是 QUEUE。
使用主题 (pub/sub) 而不是队列。
默认情况下,主题的订阅者只会收到订阅有效时发送的消息。
如何配置我的 BrokerService
以丢弃未使用的消息?
我不希望我的客户端在订阅服务器队列时收到服务器发送的所有旧消息。
这是我目前的经纪人:
BrokerService ret = new BrokerService();
ret.setPersistent(false);
ret.setUseJmx(false);
ret.addConnector("tcp://0.0.0.0:4444");
目前,我的服务器首先启动并发送大约 10 条消息。之后,我的客户端订阅了队列,它收到了在没有客户端订阅时发送的所有 10 条消息。我不想要这种行为。
已解决
@Bean
public JmsTemplate jsmTemplate(ConnectionFactory connectionFactory) {
JmsTemplate ret = new JmsTemplate();
ret.setConnectionFactory(connectionFactory);
ret.setMessageConverter(jacksonJmsMessageConverter());
// Enable the TimeToLive
ret.setExplicitQosEnabled(true);
// live time in millis of every sent message, unconsumed messages will be removed from the queue
ret.setTimeToLive(10000L);
return ret;
}
然后我发送这样的消息:
// after 10 seconds this message will be discarded from the queue
jmsTemplate.convertAndSend("messages", "hello from server");
解决方案#2
我创建了一个 TOPIC 而不是 QUEUE。
使用主题 (pub/sub) 而不是队列。
默认情况下,主题的订阅者只会收到订阅有效时发送的消息。