【发布时间】:2019-09-10 08:03:14
【问题描述】:
我有一个用 Python (PIKA) 和 C#(官方 NuGet 包)编写的应用程序。这些应用程序正在将新消息发布到 RabbitMQ 队列中。
到目前为止,我使用这种语法将新消息发布到队列中:
model.BasicPublish(exchange, routingKey, basicProperties, body);
我发现BasicPublish 函数总是成功返回。我还在 RabbitMQ 文档中读到,如果代理被破坏,尚未发送的消息将被删除,而不会将其发送到 RabbitMQ。
我想避免消息丢失。因此,我找到了 3 个选项来提交这些消息以进行发布:
- 事务 - 非常慢。
- 确认 - 我发现在多线程环境中实现它很棘手。
- 使用 REST API - 您对此有何看法?
我认为使用 REST API 将消息插入队列对我来说是理想的选择。
问题:
我发现使用 API 发送消息的方式是将 POST 消息发送到此端点:
http://localhost:15672/api/exchanges/vhost/amq.default/publish
如您所见,这个端口(15672)属于RabbitMQ管理系统。
- 这是将 RabbitMQ 与 REST API 一起使用的正确方法吗?
- 我可以信任生产环境中的 RabbitMQ 管理系统吗?
- 您能否推荐一个 REST API 的替代方案,在插入(阻塞)后立即接受消息队列?
【问题讨论】:
-
您无法使用 REST API 实现高吞吐量,我强烈建议您使用 Publisher Confirm,这是您概述的第二个选项。实现不应该很复杂,试一试,如果有什么不工作,stackoverflow 在那里救援 :-)