将内部流量代理到 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 服务总线代理时有一些陷阱:
- 如果您需要使用带有会话的队列,您应该使用
GroupId
属性 作为会话 ID (amqpMessage.Properties.GroupId = mySessionId
)
- 如果您需要使用带有分区的队列,您应该为分区 ID (
amqpMessage.MessageAnnotations[new Symbol("x-opt-partition-key")] = myPartitionKey
) 使用 x-opt-partition-key
注释
我想要实现的是内部网络中的 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 服务总线代理时有一些陷阱:
- 如果您需要使用带有会话的队列,您应该使用
GroupId
属性 作为会话 ID (amqpMessage.Properties.GroupId = mySessionId
) - 如果您需要使用带有分区的队列,您应该为分区 ID (
amqpMessage.MessageAnnotations[new Symbol("x-opt-partition-key")] = myPartitionKey
) 使用
x-opt-partition-key
注释