【发布时间】:2019-09-09 05:58:26
【问题描述】:
背景
我正在使用带有 C# 的 RabbitMQ。我有一个包含一个发布者和一个消费者的远程队列。这就是我将消息排入队列(发布者)的方式:
model.BasicPublish(exchange, routingKey, basicProperties, body);
我刚刚发现这个调用总是成功的(成功 = 没有报告错误,异常)。例如,即使我没有连接到网络(队列无法访问) - 它仍然通过这条线并且我不知道它。
问题:
在复杂系统中,可靠性高于一切。那么如何确定消息是否已入队呢?
我认为这一定是一种机制:
- 重试时重试消息队列插入
- 报告系统会在生产者丢弃消息之前给出报告(不会再次尝试)。
可能的解决方案
我看到here 说我可以实现类似事务的东西,这使得调用原子化并且在出现错误时也会报告。对我来说,它看起来像“太大的锤子”。事务对性能有很大影响。
【问题讨论】: