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

ActiveMQ JMS API中的追溯消费者

吴嘉禧
2023-03-14

我正在研究ActiveMQ,看看它是否适用于一个项目。我需要展示的当前用例是,晚加入的订阅者将收到在创建订阅之前发布的主题。看起来ActiveMQ追溯消费者将满足这一需求,但我无法让代码工作。

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("[url]");
Connection connection = connectionFactory.createConnection();
connection.start();

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

Destination destination = session.createTopic("testAddress?consumer.retroactive=true");

MessageProducer producer = session.createProducer(destination);

TextMessage message = session.createTextMessage("Hello, World!");

producer.send(message);

Thread.sleep(5000);

session.createConsumer(destination).setMessageListener(message2 -> processMessage(message2));

session.close();
connection.close();
connectionFactory.close();

我在这里试图证明的是,一个主题可以被发布,然后在一段任意的时间后(例如。5秒),消费者可以订阅该主题并接收前一条消息。

据我所知,问题似乎是创建主题会创建一个地址,但不会创建任何关联的队列。如果我在队列形成之前将主题发送到该地址(无论是通过代码还是通过代理的网络接口手动发送),消息似乎会被忽略,“未路由消息计数”会立即增加。

ActiveMQ留档(https://activemq.apache.org/retroactive-consumer)在制作主题时没有提供比附加“?consumer.retroactive=true”更详细的关于如何设置追溯消费者的信息,所以我想知道我是否遗漏了其他一些配置方面。

共有2个答案

蔚丰
2023-03-14

为了在ActiveMQ Artemis中实现所需的行为(订阅者接收订阅之前发布的主题),我使用了一个具有非破坏性读取的最后值队列。这有一个限制,我只收到一个主题发布的最新副本,但这将适合我的情况。

翟光赫
2023-03-14

据我所知,ActiveMQ Artemis不支持5. x的追溯消费者功能。客户端选项只是告诉代理你想要它,但是由于Artemis不处理它,你看不出发送它有什么不同。5. x中的功能本身不应该作为持久消费者的100%替代品,例如代理重启会导致所有这些消息(其中存储的数量是有限的)丢失。

如果您想保证在主题消费者离线时收到发送的消息,那么持久消费者是安全的方法

 类似资料:
  • 问题内容: 在numpy中,我们可以获取对引发错误的警告的回溯。 是否有跟踪警告的一般方法? 发出警告时,我可以使python进行追溯吗? 问题答案: 通过分配给,您可以获得想要的东西。该警告模块文档本身建议您这样做,所以它不是你被诱惑的 源黑暗的一面 。:) 您可以通过分配给,将其替换为替代功能。 您可以定义一个新函数,该函数可以正常执行操作,并且还可以打印堆栈。然后,将其放置而不是原始放置:

  • 我正在尝试让 kafka 消费者获取在 Java 中生成并发布到主题的消息。我的消费者如下。 consumer.java 当我运行上面的代码时,我在控制台中什么也看不到,屏幕后面的java producer程序正在‘AATest’主题下不断地发布数据。另外,在动物园管理员控制台中,当我尝试运行上面的consumer.java时,我得到了以下行 此外,当我运行指向 AATest 主题的单独控制台使用

  • 我正在使用Brave库https://github.com/openzipkin/brave进行跟踪,现在我也想将其用于Kafka消费者。我想避免添加Spring Sleuth,并利用Brave Kafka仪器https://github.com/openzipkin/brave/tree/master/instrumentation/kafka-clients. 对于Kafka消费者,我使用@K

  • 是否有一种方法以编程方式访问和打印使用者滞后偏移,或者说使用者读取的最后一条记录的偏移与某个生产者写入该使用者分区的最后一条记录的偏移之间的位置差。 要知道我的最终目标是将这个值发送到prometheus进行监视,我应该在上面添加哪些语句来得到滞后偏移值?

  • 如果你想查看某个文件的某一行是谁修攺的,可以使用文件逐行追溯功能. 执行文件逐行追溯操作,会显示某个文件每一行的详细攺动信息,也可以说是每一行的注释, 注释包括修订版本号、提交者、提交日期以及提交次数. 如何进行文件逐行追溯? 其实就是执行git annotate命令,同git blame. 在Android Studio中执行annotate的操作路径有下面这几个: 方法一: 右击文件左边状态栏

  • 由于它是一个Spring Boot应用程序,默认偏移量设置为Latest。我在这里做错了什么,请帮我弄明白。