4

我想要实现的是内部网络中的 RabbitMQ 客户端与在 Azure 中运行的 Azure 服务总线消费者之间的互操作性。

RabbitMQ 客户端需要发布和订阅,Azure 服务总线消费者也是如此——所以我需要某种“双向代理”。我正在努力实现的图表:

                                      +
                    Internal network  |  Azure
                                      |
                                      |
+--------+                            |                               +----------+
| Client +---+                        |                           +---+ Consumer |
+--------+   |                        |                           |   +----------+
             |                        |                           |
             | +-----------------+    |    +-------------------+  |
             +-+ RabbitMQ Broker +---------+ Azure Service Bus +--+
             | +-----------------+    |    +-------------------+  |
             |                        |                           |
+--------+   |                        |                           |   +----------+
| Client +---+                        |                           +---+ Consumer |
+--------+                            |                               +----------+
                                      |
                                      |
                                      |
                                      +

AFAIK,RabbitMQ 代理和 Azure 服务总线都可以执行 AMQP 1.0。我看过rabbit shovel插件,但我认为这只会处理从内部客户端到Azure的消息发布,并且不允许客户端订阅Azure消费者发布的消息?还是我弄错了,铲子可以解决这个问题?

如果铲子不起作用,还有其他方法可以实现吗

4

1 回答 1

6

我收到了来自rabbitmq-users组的几个 Pivotal 工程师的回复。

我错了 - 铲子实际上是双向的,既充当发布者又充当消费者,因此您可以从远程代理发送接收消息。

然后我应该能够通过在内部 RabbitMQ 代理中安装和配置铲子插件来满足我的要求。

但是,连接到 Azure 服务总线代理时有一些问题:

  1. 如果您需要使用带有会话的队列,则应使用GroupId会话 ID ( amqpMessage.Properties.GroupId = mySessionId)的属性
  2. 如果您需要使用带有分区的队列,则应使用x-opt-partition-key分区 ID 的注释 ( amqpMessage.MessageAnnotations[new Symbol("x-opt-partition-key")] = myPartitionKey)
于 2018-02-13T10:31:48.343 回答