你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在本指南中,我们将学习如何将消息从 RabbitMQ 发送到服务总线。
以下是可以利用这些功能的几个应用场景:
- 边缘设置:我们有一个边缘设置,可在其中将消息发送到 RabbitMQ,但我们希望将这些消息转发到 Azure 服务总线进行进一步处理,这样就可以使用许多 Azure 大数据功能。
- 混合云:贵公司刚刚收购了一家使用 RabbitMQ 满足其消息传递需求的第三方。 它们位于不同的云上。 当它们过渡到 Azure 时,可以通过将 RabbitMQ 与 Azure 服务总线桥接来开始共享数据。
- 第三方集成:第三方使用 RabbitMQ 作为代理,并希望将其数据发送给我们,但其不在我们的组织内。 我们可以向其提供 SAS 密钥,使其能够访问可向其中转发消息的一组有限的 Azure 服务总线队列。
列表还在继续扩充,但是我们可以通过将 RabbitMQ 桥接到 Azure 来解决大多数此类用例的问题。
首先,你需要通过在此处注册来创建一个免费 Azure 帐户
登录到你的帐户后,请转到 Azure 门户并创建一个新的 Azure 服务总线命名空间。 命名空间是消息传递组件(如队列和主题)所在的范围容器。
添加新的 Azure 服务总线命名空间
在 Azure 门户中,单击大加号按钮添加新资源
然后选择“集成”并单击“Azure 服务总线”以创建消息传递命名空间:
系统将提示你输入命名空间信息。 选择要使用的 Azure 订阅。 如果没有资源组,可以新建一个。
对 rabbitmq 使用 Namespace name,但它可以是你想要的任何内容。 然后为位置设置 East US。 选择 Basic 作为价格段。
如果一切正常,应该会看到以下确认屏幕:
然后返回 Azure 门户,可在其中看到列出了新的 rabbitmq 命名空间。 单击该命名空间以访问资源,以便向其添加队列。
创建我们的 Azure 服务总线队列
现在你已经有了 Azure 服务总线命名空间,请单击左侧 Queues 下的 Entities 按钮,以便添加新队列:
队列的名称将是 from-rabbitmq,以提醒消息来自何处。 可以将所有其他选项保留为默认值,但也可以更改它们以满足应用的需求。
启用 RabbitMQ Shovel 插件
为了将消息从 RabbitMQ 发送到 Azure 服务总线,我们将使用 RabbitMQ 附带的 Shovel 插件。 可以使用以下命令启用插件及其可视化界面:
rabbitmq-plugins enable rabbitmq_shovel_management
可能需要以 root 身份运行该命令。
现在是时候获取将 RabbitMQ 连接到 Azure 所需的凭据了。
将 RabbitMQ 连接到 Azure 服务总线
需要为队列创建共享访问策略 (SAS),以便 RabbitMQ 可以向其发布消息。 使用 SAS 策略,可以指定允许哪个外部方对资源执行操作。 其思路是 RabbitMQ 能够发送消息,但不能监听或管理队列。
勾选 Send 框,然后单击 Create 以实施我们的 SAS 策略。
创建策略后,单击它即可查看主连接字符串。 我们将使用它让 RabbitMQ 与 Azure 服务总线对话:
选中复选框“显示 AMQP 连接字符串”,以获取 RabbitMQ Shovel 预期的 AMQP 格式的连接字符串。 在下一步骤中将使用它。
现在,在浏览器中打开 RabbitMQ 管理插件 http://localhost:15672/#/dynamic-shovels 并转到 Admin -> Shovel Management,可以在其中添加新的 shovel,以便将消息从 RabbitMQ 队列发送到 Azure 服务总线队列。
在此处调用你的 Shovel azure 并选择 AMQP 0.9.1 作为源协议。 在屏幕截图中,我们有 amqp://,这是将我们连接到本地 RabbitMQ 服务器的默认 URI。 确保其适合你当前的部署。
对于队列,可以使用 azure 作为队列的名称。 如果该队列不存在,RabbitMQ 将为你创建它。 还可以选择已经存在的队列的名称。 可以将其他选项保留为默认选项。
然后,对于 destination,选择 AMQP 1.0 作为协议。 在 URI 字段中,输入从上一步获取的连接字符串。 它看起来应该如下所示:
amqps://rabbitmq-shovel:StringOfRandomChars@rabbitmq.servicebus.windows.net:5671/?sasl=plain
在 Address 字段中,我们将输入你的 Azure 服务总线队列的名称,在本例中,它名为 from-rabbitmq。 单击 Add Shovel 后,你的设置应该已准备好开始接收消息。
将消息从 RabbitMQ 发布到 Azure 服务总线
在 RabbitMQ 管理界面中,可以转到 Queues,选择 azure 队列,然后搜索 Publish message 面板。 其中会显示一个窗体,可让你直接将消息发布到队列。 对于我们的示例,只需将 first message 添加为 Payload 并点击 Publish Message:
返回 Azure 并检查队列。 单击左侧面板中的 Service Bus Explorer,然后单击“速览”按钮。 如果一切顺利,你会看到队列现在有一条消息。 耶,恭喜!
但请确保消息是你从 RabbitMQ 发送的消息。 选择 Peek 选项卡,并单击 Peek 按钮以检索队列中最后的消息。 单击该消息即可检查其内容。 你应该会看到类似下图的内容,其中列出了你的 first message。
让我们回顾一下
恭喜! 你获得了很多成果! 你已成功将消息从 RabbitMQ 发送到 Azure 服务总线,让我们回顾一下这些步骤:
- 创建 Azure 服务总线命名空间
- 向命名空间添加队列
- 将 SAS 策略添加到队列
- 获取队列连接字符串
- 启用 RabbitMQ shovel 插件和管理界面
- 从门户获取 Azure 服务总线连接字符串,并将其转换为 RabbitMQ 的 AMQP 格式。
- 向 RabbitMQ 添加新的 Shovel 并将其连接到 Azure 服务总线
- 发布消息
通过执行前面的步骤,你集成了组织中位于 Azure 之外的区域。 Shovel 插件允许你将消息从 RabbitMQ 发送到 Azure 服务总线。 这具有巨大的优势,因为你现在可以允许受信任的第三方将其应用与你的 Azure 部署连接起来。
归根到底,消息传递就是为了启用连接,而我们刚刚使用此方法建立了一个新连接。
后续步骤
- 详细了解 Azure 服务总线
- 详细了解服务总线中的 AMQP 1.0 支持