当前位置: 首页 > 知识库问答 >
问题:

活动 MQ,丢弃未使用的消息

翟新
2023-03-14

如何配置我的代理服务以丢弃未使用的消息?

我不希望我的客户端在订阅服务器队列时收到服务器发送的所有旧消息。

这是我目前的经纪人:

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://Java sample approach . com/Java-integration/ActiveMQ-work-spring-JMS-ActiveMQ-topic-publisher-subscribers-pattern-using-spring boot

共有1个答案

邵羽
2023-03-14

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

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

 类似资料:
  • 要求:一个activemq队列应该在一台机器(比如machine1)中运行。该队列应该从machine1和另一台机器(比如machine2)中访问。监听器将只在machine1中运行。因此,我发送到machine1和machine2的所有消息都应该进入machine1中可用的队列,并且应该被同一台机器(machine1)中可用的监听器接收。 问题:我发送到machine1和machine2的所有消

  • 我正在尝试建立一个简单的 ActiveMQ 代理网络。我有2台机器,比如A和B。 在A的< code>activemq.xml文件中,我放置了networkConnector,它具有指向机器b的URI。在A的日志中,显示它连接到了b 我有一个向A发送消息的应用程序。在ActiveMQ的网络控制台的网络选项卡中,我可以看到我的消息正在排队和出队(我认为这意味着消息被转发到机器B)。 我的问题是消息在

  • 是否有一种方法可以丢弃使用Spring Integration DSL方法定义的Spring Integration Service Activator中的消息? 更具体地说,假设下面的IntegrationFlow定义... 我发现,从返回似乎可以有效地结束流,但我不确定这是否是最优雅/正确的解决方案。如果这是推荐的解决方案,那很好。

  • 我想通过ActiveMQ传递一条大消息。还有两个消费者/生产者。第一个是基于Spring MVC构建的,第二个使用Apache camel从队列中获取消息。问题是,我试图推送一条包含大约10 mb数据的短信,但ActiveMQ代理拒绝了它,并显示错误消息。 org.springframework.web.util.NestedServletException: 请求处理失败;嵌套异常是Java .

  • 在 http://activemq.apache.org/message-groups.html 中,据说消息组提供了跨多个使用者的消息处理的负载平衡。 虽然我读了整篇文章,但我不明白消息组和负载平衡之间的关系。毕竟,在消息组之前就已经有了负载平衡:消息代理根据消费者的确认速度来分发消息。因此,如果消息组涉及负载平衡,就粒度而言,它是一个更大的负载平衡。 正确吗? 如有任何意见或见解,我们将不胜感

  • 我正在尝试在Azure中构建一个简单的WebAPI REST服务,后端有一个服务总线队列工作器。我可以从Web API向工作人员发送一条消息。然而,我试图发送更多的信息,只是为了看看一切是如何运作的。因此,我创建了一个简单的控制器,如下所示: 当我呼叫控制器时,我只收到工作人员接收到的大约1/2的消息。其余的似乎都被放弃了。