如何将消息从 Activemq 推送到消费者

Posted

技术标签:

【中文标题】如何将消息从 Activemq 推送到消费者【英文标题】:How to push messages from Activemq to consumer 【发布时间】:2013-09-08 22:52:39 【问题描述】:

我是ActivemqJava的新手,看了教程,有点懂了。谁能帮我解决以下任务。

假设我们在 Activemq 的 Queue/Topic 中有 10 条消息。我们正在从数据库中获取消息,我们已经做到了。

我想编写 2 个 Java 应用程序(使用 JMS 接收来自 activemq 的消息),它们将充当 Activemq 中的消费者。我想要实现的是,每当Activemq 从数据库获取消息时,activemq 应该检查是否有任何消费者是免费的。如果任何消费者是免费的,activemq 应该将消息推送给消费者,一旦消费者收到它就会自己做处理。

那么我的 java 代码应该如何实现呢?

还有如何设置预取限制?

谁能帮帮我。

谢谢。

【问题讨论】:

Activemq 是如何从数据库中获取消息的? @anubhava 在 Database 和 Activemq 之间,我们编写了用于发送消息的 Java Application。 【参考方案1】:

很高兴知道在 AMQ 代理和数据库之间有一个生产者,它不断地将消息推送到 AMQ。

回答你的问题。可以有多个消费者在任何目的地(队列/主题)上监听。 ActiveMQ 代理将消息推送给任何消费者(可以自定义分发)。正如我在上一个问题中回答的那样,AMQ 将使用prefetch limit(假设是 N)在开始等待获取ack 之前发送这么多消息。如果一个消费者很忙,那么它的本地缓冲区中只能有 N 条消息在等待,AMQ 代理会自动选择另一个消费者来推送消息。

【讨论】:

你是说,Activemq 能够向任何消费者推送消息,为此我需要编写消费者代码。为此,我在 Google 中搜索,我发现 3 或 4 个示例都在解释消费者从 activemq 获取消息。但我想从 Activemq 向消费者推送消息。如果你知道你能帮我写消费者代码吗。 您不需要为消息分发编写特殊代码。只需将消费者代码编写为标准消费者。示例代码见:github.com/egalli64/bitingcode/blob/master/amq/Hello.java 好的@anubhava。假设在我的 Activemq 中我们有 2 个队列名称是 A,B。一个有 2 个消费者的名字是 1,2。同样B有2个消费者名字是3,4。知道我的疑问是,如果 activemq 从 DB 获取消息到 A.Activemq 如何知道 A 是否有 1,2。为此,我需要配置一些 Activemq 配置文件。 ActiveMQ 非常清楚 queueA 的消费者 1 和消费者 2 有 2 个在线消费者。当消费者应用程序启动时,它会与 AMQ 代理建立持久连接,并告诉 AMQ 它正在侦听哪个队列。这是 AMQ 代理可以将消息从该队列传递给所有活动消费者的唯一方式。 这里我的消费者将是一个 java 应用程序。在创建消费者函数时(在上面发布的 github 代码中)我将如何将我的 java 应用程序链接到消费者?会通过名称/路径/网址吗?

以上是关于如何将消息从 Activemq 推送到消费者的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的消息消费者没有收到所有其他消息?

如何使用 JMX 导出器将 JMX 指标从 Kafka 消费者推送到普罗米修斯

如何从 MQTT 生产并在 ActiveMQ 中作为 MQTT 和 JMS 消费

没有消费时如何丢弃队列消息?(ActiveMQ)

将结果从 RabbitMQ 队列推送到 CakePHP 前端

ActiveMQ 批量消费者