将内部流量代理到 Azure 服务总线

Proxying internal traffic to Azure Service Bus

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

RabbitMQ 客户端需要发布和订阅,Azure 服务总线消费者也是如此 - 所以我需要某种 'bi-directional proxy'。我要实现的目标的图表:

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

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

如果铲子不行,有没有其他方法可以做到这一点

我收到了 rabbitmq-users 组中几位 Pivotal 工程师的回复。

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

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

虽然连接到 Azure 服务总线代理时有一些陷阱:

  1. 如果您需要使用带有会话的队列,您应该使用 GroupId 属性 作为会话 ID (amqpMessage.Properties.GroupId = mySessionId)
  2. 如果您需要使用带有分区的队列,您应该为分区 ID (amqpMessage.MessageAnnotations[new Symbol("x-opt-partition-key")] = myPartitionKey)
  3. 使用 x-opt-partition-key 注释