【问题标题】:How to push messages to AMQP consumer Artemis如何向 AMQP 消费者 Artemis 推送消息
【发布时间】:2020-12-23 21:45:04
【问题描述】:

Artemis 是否可以将消息推送到 REST API/消费者,而不是消费者从中拉出。我可以在消费者端实现一个监听器,但我想看看 Artemis 是否可以将消息推送给消费者。

非常感谢任何帮助。

【问题讨论】:

  • 您正在使用什么消息传递 API/协议?大多数客户端(例如 AMQP、JMS、STOMP、MQTT)都支持注册一个监听器,代理将向该监听器推送消息。
  • 我可以通过使用 JMS 注册一个监听器来实现我的消费者。正在寻找替代方案。
  • “我想看看 Artemis 是否可以向消费者推送消息”是什么意思?如果您向代理注册一个侦听器,那么它将向它推送消息。您是否希望避免注册听众?如果是这样,为什么?例如,您是否想在broker.xml 中静态配置消费者?
  • 是的。我想知道我是否可以在 broker.xml 中配置消费者。我从文档中看到,您可以在 broker.xml 中配置另一个代理,artemis 会将消息推送给它。我可以在 broker.xml 中类似地配置一个 REST 端点,然后 Artemis 将消息发布到该端点吗?
  • 不,您不能在broker.xml 中配置消费者。这并不是客户端/服务器架构的真正工作方式。存在用于在服务器之间发送消息的桥。如果客户端希望服务器向其推送消息,那么大多数协议都支持“侦听器”功能以启用此类行为。

标签: activemq activemq-artemis


【解决方案1】:

不要认为这是可能的,JMS 提供者是一个服务器,总是等待消费者连接。然后,一旦准备好并且有可用消息,它就会将消息推送到消费者的缓冲区。无论如何,根据您的应用程序的技术,您可能希望利用Artemis REST interface 来实现您的消费者。

【讨论】:

  • 感谢您的回复。是的,了解 REST 是一种方法,我试图查看 artemis 中是否有任何配置,它可以推送给消费者,它似乎能够将消息推送到另一个队列/主题。
  • 消息总是被推送给连接的消费者。您可以通过在连接的 URL 上设置 consumerWindowSize=0 来禁用消费者的缓冲区。在这种情况下,消息会一一发送。您可以使用网桥发送到另一个队列,但您需要在另一端有一个 JMS 代理。
  • FWIW,我会避免使用 Artemis REST 接口。在 REST 很有吸引力的情况下,STOMP 几乎总是更好的选择。任何使用 Artemis REST 接口的客户端都不可移植。
猜你喜欢
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
  • 2018-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多