ActiveMQ:转换 OpenWire 和 STOMP 消息

标签 activemq stomp

EDIT2:我的问题是由于对传输连接器在 ActiveMQ 中的工作方式了解不够造成的。 TL;DR 是 ActiveMQ 将在 activemq.xml 中定义的传输连接器配置之间隐式“转换”或“中继”消息。

编辑:附加信息,Angular 应用程序收到的 STOMP 消息用于调试和演示目的。因此,只需将 OpenWire 消息转换为可读文本 block 就足够了。

我正在创建一个 Angular 应用程序(最好是网站,避免 native 应用程序),其目标是通过 ActiveMQ 服务器上的 Web 套接字“接入”并订阅 OpenWire 消息。如何让 ActiveMQ 将 OpenWire 消息转换为 STOMP 消息并将这些消息发送到连接到 ActiveMQ WebSocket 连接器的任何客户端(即我的 Angular 应用程序)? 另外,如果我也能将 STOMP 转换为 OpenWire,那就太好了。

  • 它必须是有角度的
  • 最好避免在客户端使用 native 应用程序,尽管这不会破坏交易。
  • 在 ActiveMQ 服务器上增加额外的处理压力必须谨慎。
  • 据我所知,如果我想避免使用 native 应用程序,则只能通过 Web 套接字发送的 STOMP 消息让 Angular 与 ActiveMQ 服务器“直接对话”。
  • 我已经有一个能够通过 Web 套接字进行 STOMP 通信的 Angular 应用程序(例如 https://github.com/stomp-js/ng2-stompjs-angular7 之类的东西)。
  • 我缺少有关如何配置 ActiveMQ 服务器以通过其传输连接器转换 OpenWire-->STOMP 的信息。

根据我的理解,我想做的事情应该是可能的。其他用户注意到了这一点,但没有说明如何注意到。例如。用户暗示我想要的在 ActiveMQ 中是可能的,但在 Apollo 中不行:ActiveMQ to Apollo transition, Openwire to Stomp protocol configuration .

我预计(最好)需要使用类似 ActiveMQ 变压器的东西(例如,将变压器添加到连接器配置中: AMQP & Openwire - Activemq broker and 2 different consumers )或者编写一个 ActiveMQ 插件( http://activemq.apache.org/developing-plugins.html )。在 ActiveMQ 的网站上,提到了一个现有的转换器(http://activemq.apache.org/stomp.html消息转换部分):

Currently, ActiveMQ comes with a transformer that can transform XML/JSON text to Java objects

...但没有提及如何使用它,我不确定我是否可以从中受益,以及这是否意味着 OpenWire-->STOMP 没有变压器,反之亦然。

我希望我可能误解了一些概念,并且“你走错了方向,改为这样做”对我来说可能是一个很好的答案。在撰写本文时,我希望我必须使用其消息转换器接口(interface)( http://activemq.apache.org/message-transformation.html )创建一个 ActiveMQ 插件,尽管它们的子链接是 404。我希望实现一个更简单的解决方案,例如现有的 OpenWire-->STOMP 变压器:

<transportConnector name="openwire" uri="{some-openwire-uri}?transport.transformer=stomp"/>

最佳答案

ActiveMQ 将根据客户端连接的需要将任何 Openwire 消息“转换”为 STOMP 消息,反之亦然。当基于 Openwire 的 JMS 客户端连接并将消息放入队列中时,基于 STOMP 的客户端出现并订阅该队列,该消息将被转换为 STOMP 消息以发送到该客户端。

如果不更多地了解您遇到的问题,就很难提供比这更多的见解。在某些情况下,从 Openwire 到 STOMP 的转换可能不会产生完全适合您的结果,例如 MapMessage 或 StreamMessage,而且绝对是 ObjectMessage,因此需要注意跨协议(protocol)消息传递。

您当然需要为您想要支持的每个协议(protocol)(Openwire、STOMP、AMQP 等)添加传输连接器。客户端需要连接到某些内容,然后一旦连接,代理就会管理订阅之间的消息转换关于主题和队列。

关于ActiveMQ:转换 OpenWire 和 STOMP 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55378007/

相关文章:

grails - 如何使用Grails和JMS/ActiveMQ配置专有使用者?

java - JMS 客户端只能基于 java 吗?

Python Proton 将二进制数据发送到 Active MQ

iphone - Cocoa、Stomp、ActiveMQ、iPhone、SSL 和 AsyncSocket 需要帮助

angular - 有没有办法在 websocket 连接中捕获关闭事件?

ios - 无法在服务器(SpringBoot)和 iOS 之间建立 WebSocket 连接

java - 使用 useExponentialBackOff 重新传递 HornetQ 消息

activemq - 最大 MQTT 连接数

message - 如何将对象消息从 perl 传递到 JMS

java - 通过 WebSocket 连接的 Spring SseEmitter