我有一个用Python(PIKA)和C#(官方NuGet包)编写的应用程序。这些应用程序正在将新消息发布到RabbitMQ队列中。
到目前为止,我使用以下语法将新消息发布到队列中:
model.BasicPublish(exchange, routingKey, basicProperties, body);
我发现BasicPublish
函数总是返回成功。我还在RabbitMQ文档中读到,如果代理被销毁,尚未发送的消息将被删除,而不会发送到RabbitMQ。
我想避免信息丢失。所以,我发现3个选项提交这些消息发布:
1.交易-非常慢。
1.确认-我发现在多线程环境中实现它很棘手。
1.使用REST API -您对此有何看法?
我认为使用REST API将消息插入队列对我来说是理想的。
问题:
我发现使用API发送消息的方法是将POST消息发送到此端点:
http://localhost:15672/api/exchanges/vhost/amq.default/publish
如您所见,此端口(15672)属于RabbitMQ管理系统。
1.这是将RabbitMQ与REST API一起使用的正确方法吗?
1.我可以在生产环境中信任RabbitMQ管理系统吗?
1.你能推荐一种替代REST API的方法,在插入(阻塞)后立即接受消息入队吗?
1条答案
按热度按时间7bsow1i61#
不,不要使用HTTP API。它不适用于发布或使用消息的生产用途。
您必须使用出版商确认。this tutorial中描述的技术也适用于.NET客户端库。
您还可以研究在官方.NET库之上编写的库,这些库可以正确地为您实现发布者确认。EasyNetQ就是这样一个库。
另一个值得阅读的100%可靠性资源是this blog post。