Я впервые играю с .NET API RabbitMQ и нашел вариант использования, который мне кажется правдоподобным: я хочу создать издателя, который публикует сообщения и что-то делает после того, как они были подтверждены , событие 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();
}
По какой-то причине мой обработчик событий не вызывается. "Привет, мир!" сообщение публикуется, читается, проверяется и выводится на консоль, но по какой-то причине обработчик событий никогда не вызывается.
Я что-то не так делаю? Подписка на IModel.ModelShutdown, похоже, работала нормально.