RabbitMQ - 使用 AMQP 和 STOMP 连接到同一个交易所

Posted

技术标签:

【中文标题】RabbitMQ - 使用 AMQP 和 STOMP 连接到同一个交易所【英文标题】:RabbitMQ - connect using AMQP and STOMP to same exchange 【发布时间】:2018-03-09 03:48:33 【问题描述】:

我们使用 RabbitMQ 作为消息代理。 Producer1 使用 AMQP 连接,Producer2 使用 STOMP 协议连接,Consumer1 使用 AMQP 连接,Consumer2(使用 javascript)通过 websocket 使用 STOMP 连接。 (Producer1和consumer1使用spring cloud stream)

Test1:producer1使用AMQP发送消息时,在consumer1(AMQP)接收,在consumer2(STOMP)接收失败。当 producer1(AMQP) 发送消息并且队列被删除时,Consumer2 javascript 客户端立即断开连接。

Test2:当producer2使用STOMP发送消息时,consumer1(AMQP)和consumer 2(STOMP)接收,没有任何问题。

Test1 - 可能的情况吗?我们正在尝试由消费者使用 AMQP 和 STOMP 协议连接到 RabbitMQ 中的相同交换。当 AMQP 生产者发送消息时,STOMP 消费者正在断开连接。验证了 rabbitmq 和消费者日志。它没有在日志中提供太多信息。

【问题讨论】:

你发送什么样的数据; IIRC STOMP 仅支持文本。 消息是 UTF-8 类型。这应该是导致问题的原因。 (我正在使用 avro 与 spring 云流生产者(AMQP)进行序列化)。有什么方法可以使用 AMQP(spring 云流)和 STOMP(websocket 服务器)使用 rabbit MQ 作为消息代理进行通信? 【参考方案1】:

由于 STOMP 仅支持文本。更改消息内容类型有效。

【讨论】:

以上是关于RabbitMQ - 使用 AMQP 和 STOMP 连接到同一个交易所的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ - 使用 AMQP 和 STOMP 连接到同一个交易所

理解RabbitMQ中的AMQP-0-9-1模型

理解RabbitMQ中的AMQP-0-9-1模型

php amqp rabbitmq 介绍和使用

为啥使用 AMQP/ZeroMQ/RabbitMQ

杂项之rabbitmq