【发布时间】:2017-12-18 03:20:42
【问题描述】:
我有一个场景,客户端通过 STOMP 将消息发布到 RabbitMQ /queue 或 /topic 目的地。
另一方面,我有一个通过 AMQP 连接到 RabbitMQ 的服务器进程。是否可以从 AMQP 访问“STOMP 通道”,或者它们是否被隔离到自己的名称空间中?
看起来 AMQP 通道可以通过 /amq/queue/ 从 STOMP 访问,但我没有找到其他方向的案例。
【问题讨论】:
我有一个场景,客户端通过 STOMP 将消息发布到 RabbitMQ /queue 或 /topic 目的地。
另一方面,我有一个通过 AMQP 连接到 RabbitMQ 的服务器进程。是否可以从 AMQP 访问“STOMP 通道”,或者它们是否被隔离到自己的名称空间中?
看起来 AMQP 通道可以通过 /amq/queue/ 从 STOMP 访问,但我没有找到其他方向的案例。
【问题讨论】:
我通过使用 Rabbit 网络管理员并仔细查看 Spring-Stomp over Websocket 实现在后台实际执行的操作找到了答案。
/topic 命名空间是通过为每个连接的 stomp 客户端注册一个自动删除队列来实现的,该队列使用 amq.topic 交换上的主题名称的路由键。因此,要收听来自非 Stomp 客户端的这些消息,您也必须这样做。
/queue 命名空间是通过创建一个(持久的)队列并注册一个从默认空“”交换到队列的绑定来实现的。要使用消息,您可以直接使用队列 - 要将消息发送到队列,您可以将消息发送到空交换器,并将路由键设置为队列名称。
【讨论】: