有意思,RabbitMQ默认情况下是不保证每次都把消息传递的,很多情况下我们都是这样发送数据的,
channel.BasicPublish(QUEUE_NAME, String.Empty, null, payload);
但这是不保证的。
必须要这样。
channel.BasicAcks += channel_BasicAcks;
channel.ConfirmSelect();
for (var i = 1; i <= numberOfMessages; i++)
{
var messageProperties = channel.CreateBasicProperties();
messageProperties.SetPersistent(true);
var message = String.Format("{0}\thello world", i);
var payload = Encoding.Unicode.GetBytes(message);
Console.WriteLine("Sending message: " + message);
channel.BasicPublish(QUEUE_NAME, QUEUE_NAME, messageProperties, payload);
channel.WaitForConfirmsOrDie();
}
原文在这里:
https://rianjs.net/2013/12/publisher-confirms-with-rabbitmq-and-c-sharp
这确实有点坑啊!