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

仅当重复消息仍与ActiveMQ Artemis和JBoss EAP 7.1排队时,才丢弃重复消息

卫嘉谊
2023-03-14

我们在JBoss EAP7.1上使用ActiveMQ Artemis。

我们注意到,一旦具有特定_amq_duppl_id值的消息通过队列传递,如果消息生成器试图再次将具有相同_amq_duppl_id值的消息发送到同一队列,则代理将丢弃该消息。然而,我们的需要是仅当重复消息仍在队列中时才丢弃它们。

有没有办法达到这个目的?

public void sendMessage(final T msg, final String id) { 
   jmsTemplate.send(destination, new MessageCreator() { 
      @Override
      public Message createMessage(Session session) throws JMSException { 
         Message message = session.createObjectMessage(msg);
         message.setStringProperty("_AMQ_DUPL_ID", id);
         return message;
      }
   });
}

为了解决这个问题,我们认为像Artemis这样的重复消息检测会有所帮助。然而,当外部应用程序挂起我们的消费者时,我们需要定时器能够再次将消息放入队列。

共有1个答案

冯哲彦
2023-03-14

ActiveMQ Artemis上的重复消息检测按设计进行。它的目标是避免使用者收到重复消息的任何机会,这意味着即使消息可能不再在队列中(例如,因为它被使用了),该消息的任何重复仍然应该被拒绝。

这里的要求类似于询问如何将具有相同主键的多条记录插入到数据库表中。它根本不能,因为拥有主键的全部意义在于避免重复记录。

我建议您为websocket调用实现某种超时,否则您的应用程序将受到您无法控制的资源的负面影响。

 类似资料:
  • 本文向大家介绍Kafka中的消息是否会丢失和重复消费?相关面试题,主要包含被问及Kafka中的消息是否会丢失和重复消费?时的应答技巧和注意事项,需要的朋友参考一下 要确定Kafka的消息是否丢失或重复,从两个方面分析入手:消息发送和消息消费。 1、消息发送 0---表示不进行消息接收是否成功的确认; 1---表示当Leader接收成功时确认; -1---表示Leader和Follower都接收成功

  • 我通过命名的JMS队列将JMS请求发送到Weblogic 10.3服务器,并通过临时队列接收回复。 客户(裸体): 服务器MDB(消息驱动bean): 问题是第一个服务器回复经常丢失!也就是说,每4-5个回复都以超时结束。当消费者收到第一个答案时,它将继续收到所有剩余的答案,所以问题只出在临时队列创建后通过临时队列发送的第一条消息上。 我的问题是:我是否必须为临时队列设置一些特殊的设置,以便它在创

  • 解决方案#3:使用AWS SQS标准队列和AWS ElasticCache(Redis或Memcached)。对于每条消息,“messageID”字段将保存在缓存服务器中,并在以后检查是否重复。存在意味着此消息已被处理。(顺便说一下,“MessageID”在缓存服务器中应该存在多长时间。AWS SQS文档没有提到消息可以重复到多长时间。)

  • 我正在写一个应用程序,它使用log4j2.5,一切都很好。为了提高性能,我想使记录器异步,但不想添加中断器依赖项,所以我决定使用异步附加器。我找到了一些如何使用它们的示例,但我猜在使用过程中出现了一些问题:( 我没有使用xml配置文件,而是在代码中创建所有记录器。我要做的是首先创建我的appender,然后在引用它们名称的地方为它们中的每一个创建异步appender。 我得到重复的消息,因为对于每

  • 我有一个使用Spring和RabbitMQ的项目设置。目前,我的应用程序可能会收到一条amqp消息,在另一个异步进程完成之前无法处理该消息(遗留和完全分离,我无法控制)。因此,结果是我可能不得不等待处理消息一段时间。其结果是变压器出现异常。 当消息被NACK回rabbitMQ时,它会将其放回队列的头部,并立即重新拉入队列。如果我收到的无法处理的消息等于并发侦听器的数量,我的工作流就会被锁定。它转动

  • 我有下表(TBL_视频),在“TIMESTAMP”中有重复的列条目,我只想在“CAMERA”编号匹配时删除它们。 之前: 之后: 我已尝试此语句,但列不会相应删除。我非常感谢为生成正确的SQL语句所提供的所有帮助。提前谢谢!