【问题标题】:RabbitMQ publish a message with REST APIRabbitMQ 使用 REST API 发布消息
【发布时间】:2019-09-10 08:03:14
【问题描述】:

我有一个用 Python (PIKA) 和 C#(官方 NuGet 包)编写的应用程序。这些应用程序正在将新消息发布到 RabbitMQ 队列中。

到目前为止,我使用这种语法将新消息发布到队列中:

model.BasicPublish(exchange, routingKey, basicProperties, body);

我发现BasicPublish 函数总是成功返回。我还在 RabbitMQ 文档中读到,如果代理被破坏,尚未发送的消息将被删除,而不会将其发送到 RabbitMQ。

我想避免消息丢失。因此,我找到了 3 个选项来提交这些消息以进行发布:

  1. 事务 - 非常慢。
  2. 确认 - 我发现在多线程环境中实现它很棘手。
  3. 使用 REST API - 您对此有何看法?

我认为使用 REST API 将消息插入队列对我来说是理想的选择。

问题:

我发现使用 API 发送消息的方式是将 POST 消息发送到此端点:

http://localhost:15672/api/exchanges/vhost/amq.default/publish

如您所见,这个端口(15672)属于RabbitMQ管理系统。

  1. 这是将 RabbitMQ 与 REST API 一起使用的正确方法吗?
  2. 我可以信任生产环境中的 RabbitMQ 管理系统吗?
  3. 您能否推荐一个 REST API 的替代方案,在插入(阻塞)后立即接受消息队列?

【问题讨论】:

  • 您无法使用 REST API 实现高吞吐量,我强烈建议您使用 Publisher Confirm,这是您概述的第二个选项。实现不应该很复杂,试一试,如果有什么不工作,stackoverflow 在那里救援 :-)

标签: c# python rabbitmq


【解决方案1】:

不,不要使用 HTTP API。它不适用于发布或消费消息的生产用途。

必须使用发布商确认。 this tutorial 中描述的技术也适用于 .NET 客户端库。

您还可以调查在官方 .NET 库之上编写的库,这些库可能会为您正确实现发布者确认。 EasyNetQ 就是这样一个库。

另一个考虑到 100% 可靠性的好资源是this blog post


注意:RabbitMQ 团队会监控 rabbitmq-users mailing list,并且仅有时会在 StackOverflow 上回答问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多