我第一次玩RabbitMQ的.NET API,我想出了一個似乎對我來說似乎合理的用例:我想創建發佈者發佈消息並在他們完成Ack-ed後執行某些操作。在IModel.BasicAcks事件似乎是一個體面的方式來了解這一點,so--如何讓IModel.BasicAcks啓動?
我寫了一個出版商:
private static void Post(string message) {
model.ExchangeDeclare("MyExchange", ExchangeType.Fanout, true);
model.QueueDeclare("MyQueue", true, false, false, null);
model.QueueBind("MyQueue", "MyExchange", "", new Dictionary<string, object>());
byte[] messageBodyBytes = System.Text.UTF8Encoding.ASCII.GetBytes(message);
IBasicProperties props = model.CreateBasicProperties();
props.ContentType = "text/plain";
props.DeliveryMode = 2;
model.BasicPublish("MyExchange", "", props, messageBodyBytes);
}
和用戶:
private static void Receive() {
var gotten = model.BasicGet("MyQueue", false);
var text = System.Text.UTF8Encoding.ASCII.GetString(gotten.Body);
Console.WriteLine(text);
model.BasicAck(gotten.DeliveryTag, false);
}
這是控制檯應用程序的入口點:
static void Main(string[] args) {
connectionFactory = new ConnectionFactory();
connectionFactory.HostName = "localhost";
connection = connectionFactory.CreateConnection();
model = connection.CreateModel();
model.BasicAcks += new RabbitMQ.Client.Events.BasicAckEventHandler(model_BasicAcks);
Post("Hello, World!");
Receive();
Console.ReadKey();
connection.Dispose();
model.Dispose();
}
出於某種原因,我的事件處理程序未被調用。 「你好,世界!」消息被髮布,讀取,Ack和打印到控制檯,但由於某種原因,事件處理程序從不被調用。
我做錯了什麼?訂閱IModel.ModelShutdown似乎工作得很好。
這給了我錯誤: 無法找到類型或命名空間名稱'BasicAckEventHandler'(您是否缺少using指令或程序集引用?) – 2016-09-28 10:52:53
我正在使用rabbitmq-dotnet- client-3.6.5-dotnet-4.5 它可能是他們在最近的版本中把它關掉了嗎? 你能否提供你的版本號? 我需要這個爲我工作請。 – 2016-09-28 11:58:59
我已經提出了一個新的查詢,所以,你可以協助回答 http://stackoverflow.com/questions/39747226/the-type-or-namespace-name-basicackeventhandler-could-not-be-found-are - 你-MI – 2016-09-28 12:30:07