Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
本指南介绍如何将消息从 RabbitMQ 发送到Service Bus。
下面是一些可以利用这些功能的方案:
- Edge Setups:我们有一个边缘设置,用于将消息发送到 RabbitMQ,但我们希望将这些消息转发到 Azure Service Bus 进行进一步处理,因此可以使用许多 Azure 大数据功能。
- 混合云:贵公司刚刚收购了一家使用 RabbitMQ 满足其消息传递需求的第三方。 它们在不同的云上。 虽然它们过渡到Azure但可以通过将 RabbitMQ 与 Azure Service Bus 桥接来开始共享数据。
- 第三方集成:第三方使用 RabbitMQ 作为代理,并希望将其数据发送给我们,但其不在我们的组织内。 我们可以向他们提供 SAS 密钥,使他们能够访问一组有限的Azure Service Bus队列,他们可以将消息转发到其中。
类似的例子还有很多,但我们可以通过将RabbitMQ连接到Azure来解决其中大多数用例。
首先,需要通过注册
登录到帐户后,转到 Azure 门户并创建新的 Azure Service Bus namespace。 命名空间是消息传递组件(例如队列和主题)所在的作用域容器。
添加新 Azure Service Bus 命名空间
在Azure门户中,单击“大加号”按钮添加新资源
然后选择“集成”并单击Azure Service Bus以创建消息命名空间:
系统会提示你输入命名空间信息。 选择要使用的Azure订阅。 如果没有资源组,可以新建一个。
对 rabbitmq 使用 Namespace name,但它可以是你想要的任何内容。 然后为位置设置 China East。 选择 Basic 作为价格段。
如果一切正常,你应该会看到以下确认屏幕:
然后返回到Azure门户,你将看到其中列出的新 rabbitmq 命名空间。 单击该资源以访问它,然后添加队列。
创建我们的Azure Service Bus队列
有了Azure Service Bus命名空间后,请单击左侧的 Queues 按钮,在 Entities 下,以便添加新队列:
队列的名称将是 from-rabbitmq,以提醒消息来自何处。 你可以将所有其他选项保留为默认值,但也可以更改它们来满足应用的需求。
启用 RabbitMQ Shovel 插件
若要将消息从 RabbitMQ 寄送到 Azure Service Bus,我们将使用与 RabbitMQ 一起打包的 Shovel 插件。 可以使用以下命令启用此插件及其可视化界面:
rabbitmq-plugins enable rabbitmq_shovel_management
你可能需要以 root 身份运行该命令。
现在是时候获取将 RabbitMQ 连接到 Azure所需的凭据了。
将 RabbitMQ 连接到 Azure Service Bus
需要为队列创建共享访问策略 (SAS),以便 RabbitMQ 可以向其发布消息。 使用 SAS 策略,你可以指定允许哪个外部方对你的资源执行操作。 这里的构思是允许 RabbitMQ 发送消息,但不侦听或管理队列。
勾选 Send 框,然后单击 Create 以实施我们的 SAS 策略。
创建策略后,单击它即可查看主连接字符串。 我们将使用它让 RabbitMQ 与Azure Service Bus交谈:
选中复选框“显示 AMQP connection string”,以获取 RabbitMQ Shovel 预期的 AMQP 格式的 connection string。 在下一阶段中你将使用它。
现在,在浏览器中打开 RabbitMQ 管理插件,http://localhost:15672/#/dynamic-shovels并转到 Admin -> Shovel Management,在那里您可以添加新的搬运工具,负责将消息从 RabbitMQ 队列发送到 Azure Service Bus 队列。
在此处调用你的 Shovel azure 并选择 AMQP 0.9.1 作为源协议。 在屏幕截图中,我们有 amqp://,这是将我们连接到本地 RabbitMQ 服务器的默认 URI。 请确保使它适应你的当前部署。
对于队列,可以使用 azure 作为队列的名称。 如果该队列不存在,RabbitMQ 会为你创建它。 你还可以选择已存在的队列的名称。 可以让其他选项保留默认值。
然后,对于 destination,选择 AMQP 1.0 作为协议。 在 URI 字段中,输入从上一步获取的连接字符串。 它应如下所示:
amqps://rabbitmq-shovel:StringOfRandomChars@rabbitmq.servicebus.chinacloudapi.cn:5671/?sasl=plain
在 Address 字段中,我们将输入Azure Service Bus队列的名称,在本例中,它称为 from-rabbitmq。 单击 Add Shovel 后,你的设置应该已准备好开始接收消息。
将消息从 RabbitMQ 发布到 Azure Service Bus
在 RabbitMQ 管理界面中,可以转到 Queues,选择 azure 队列,然后搜索 Publish message 面板。 其中会显示一个窗体,可让你直接将消息发布到队列。 对于我们的示例,只需将 first message 添加为 Payload 并点击 Publish Message:
返回Azure并检查队列。 在左侧面板中单击Service Bus Explorer,然后单击Peek按钮。 如果一切顺利,你会看到队列现在包含一条消息。 好极了,恭喜你!
但请确保消息是你从 RabbitMQ 发送的消息。 选择 Peek 选项卡,并单击 Peek 按钮以检索队列中最后的消息。 单击该消息以检查其内容。 你应该会看到类似下图的内容,其中列出了你的 first message。
让我们回顾一下
恭喜! 你已取得了很多成果! 你设法将消息从 RabbitMQ 获取到Azure Service Bus,让我们回顾一下这些步骤:
- 创建Azure Service Bus命名空间
- 向命名空间添加队列
- 向队列添加 SAS 策略
- 获取队列连接字符串
- 启用 RabbitMQ shovel 插件和管理界面
- 从门户获取已转换为RabbitMQ的AMQP格式的Azure服务总线连接字符串。
- 将新的 Shovel 添加到 RabbitMQ,并将其连接到 Azure Service Bus。
- 发布消息
通过遵循前面的步骤,你已将组织中不在 Azure 上的区域进行了集成。 Shovel 插件允许你将消息从 RabbitMQ 传送到 Azure Service Bus。 这具有巨大的优势,因为现在可以允许受信任的第三方将其应用与Azure部署连接。
归根到底,消息传递就是启用连接,而我们刚刚使用此技术打开了一个新连接。
高级场景
如果需要对 request-reply 等模式的支持,无论是 RabbitMQ 端发起的还是从Azure Service Bus端回复的,反之亦然,都需要更高级的工具。 NServiceBus Messaging Bridge 支持跨多个其他消息中转站技术的请求-回复和发布-订阅。
后续步骤
- 详细了解 Azure Service Bus
- 详细了解 Service Bus 中的 AMQP 1.0 支持