[英]Console.WriteLine is not working on consumer.received - RabbitMQ C#
我写了这些代码行,但我不知道如何在consumer.receive
的控制台上打印一些值。 此代码有效,因为我检查了 RabbitMQ CloudAMQP 上的一些值,但我在控制台上看不到任何更改。
问题在这里:
Console.WriteLine(Encoding.UTF8.GetString(e.Body.ToArray()) + " received");
完整代码:
// publisher
ConnectionFactory factory = new ConnectionFactory();
factory.Uri = new Uri("amqps://guest:guest@localhost");
using (IConnection connection = factory.CreateConnection())
using (IModel channel = connection.CreateModel())
{
channel.ExchangeDeclare("kuyruk", type: ExchangeType.Fanout);
for (int i = 1; i <= 100; i++)
{
byte [] bytemessage = Encoding.UTF8.GetBytes($"is - {i}");
IBasicProperties properties = channel.CreateBasicProperties();
properties.Persistent = true;
channel.BasicPublish(exchange: "kuyruk", routingKey: "", basicProperties: properties, body: bytemessage);
}
}
// Consumer
ConnectionFactory factory = new ConnectionFactory();
factory.Uri = new Uri("amqps://guest:guest@localhost");
using (IConnection connection = factory.CreateConnection())
using (IModel channel = connection.CreateModel())
{
channel.ExchangeDeclare("kuyruk", type: ExchangeType.Fanout);
// Here consumer İçin Oluşturulacak Kuyruklara Random İsim Oluşturma
string queueName = channel.QueueDeclare().QueueName;
channel.QueueBind(queue: queueName, exchange: "kuyruk", routingKey: "");
channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);
EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
channel.BasicConsume(queueName, false, consumer);
consumer.Received += (sender, e) =>
{
Thread.Sleep(500);
Console.WriteLine(Encoding.UTF8.GetString(e.Body.ToArray()) + " received");
channel.BasicAck(e.DeliveryTag, false);
};
Console.Read();
}
首先,您必须创建队列。 当您在此之后发布消息时,它将被排队。 如果先发布消息,消息就会消失,因为没有队列可以发送消息。
您代码中的另一个错误是:您正在创建消费者渠道。 您定义消息到达时要采取的操作。 然后,当您的代码遇到下面的发布过程时,您退出包装消费者渠道的 using 块。 为此,consumer 是关闭的,不能消费消息。
//consumer
using System.Text;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
var factory = new ConnectionFactory
{
Uri = new Uri("amqp://guest:guest@localhost")
};
using (IConnection connection = factory.CreateConnection())
using (IModel consumeChannel = connection.CreateModel())
{
consumeChannel.ExchangeDeclare("kuyruk", type: ExchangeType.Fanout);
//#region Her Consumer İçin Oluşturulacak Kuyruklara Random İsim Oluşturma
string queueName = consumeChannel.QueueDeclare().QueueName;
consumeChannel.QueueBind(queue: queueName, exchange: "kuyruk", routingKey: "");
//#endregion
consumeChannel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);
var consumer = new EventingBasicConsumer(consumeChannel);
consumeChannel.BasicConsume(queueName, false, consumer);
consumer.Received += (sender, e) =>
{
Thread.Sleep(500);
Console.WriteLine(Encoding.UTF8.GetString(e.Body.ToArray()) + " recieved");
consumeChannel.BasicAck(e.DeliveryTag, false);
};
//publisher
using (IModel publishChannel = connection.CreateModel())
{
publishChannel.ExchangeDeclare("kuyruk", type: ExchangeType.Fanout);
for (int i = 1; i <= 100; i++)
{
var str = $"is - {i}";
byte[] byteMessage = Encoding.UTF8.GetBytes(str);
IBasicProperties properties = publishChannel.CreateBasicProperties();
properties.Persistent = true;
publishChannel.BasicPublish(exchange: "kuyruk", routingKey: "", basicProperties: properties, body: byteMessage);
}
}
Console.Read();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.