ActiveMQ,丢弃未使用的消息

时间:2018-04-10 11:49:15

标签: jms activemq spring-jms

如何配置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。

http://javasampleapproach.com/java-integration/activemq-work-spring-jms-activemq-topic-publisher-subcribers-pattern-using-springboot

1 个答案:

答案 0 :(得分:1)

使用主题(pub / sub)而不是队列。

默认情况下,主题订阅者只会获得订阅处于活动状态时发送的消息。