代码之家  ›  专栏  ›  技术社区  ›  Beto Neto

ActiveMQ,丢弃未使用的消息

  •  1
  • Beto Neto  · 技术社区  · 6 年前

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

    我创建了一个主题而不是队列。

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Gary Russell    6 年前

    使用主题(发布/订阅)而不是队列。

    默认情况下,主题的订阅服务器仅获取在订阅处于活动状态时发送的消息。