[英]Rabbitmq Fanout Exchange C#
I have a problem about Rabitmq fanout exchange my problem is that I want to a publish subscribe example with rabbitmq and c#.So I created 2 project one them is Publisher and it is that 我有一个关于Rabitmq扇出交换的问题,我的问题是我想使用Rabbitmq和c#发布发布订阅示例,所以我创建了2个项目,其中一个是Publisher,这就是
static void Main(string[] args)
{
try
{
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.ExchangeDeclare("example.exchange", ExchangeType.Fanout, true, false, null);
var message = GetMessage(args);
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish(exchange: "example.exchange", routingKey: "", basicProperties: null, body: body);
Console.WriteLine(" [x] Sent {0}", message);
}
}
catch (Exception ex)
{
Console.Write($"bir hata oluştu{ex.Message}");
}
}
private static string GetMessage(string[] args)
{
return ((args.Length > 0)
? string.Join(" ", args)
: "info: Hello World!");
}
And i have a Consumer it is 我有一个消费者
static void Main(string[] args)
{
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.ExchangeDeclare(exchange: "example.exchange",
type:"fanout",durable:true);
var queueName = channel.QueueDeclare().QueueName;
channel.QueueBind(queue: queueName, exchange: "foo.exchange",
routingKey: "");
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] {0}", message);
};
channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer);
Console.ReadLine();
}
}
But i can't get messages.Why it could be? 但是我无法收到消息。为什么会这样?
So I find your issue. 所以我找到你的问题。 First of all your exchange declaration in your consumer is wrong. 首先,您在消费者中的兑换声明是错误的。
You declare exchange as "example.exchange" in your publisher : 您在发布者中声明交换为“ example.exchange”:
channel.ExchangeDeclare("example.exchange", ExchangeType.Fanout, true, false, null);
But "foo.exchange" in your consumer : 但是您的使用者中有“ foo.exchange”:
channel.QueueBind(queue: queueName, exchange: "foo.exchange", routingKey: "");
Change "foo.exchange" to "example.exchange". 将“ foo.exchange”更改为“ example.exchange”。
For your consumer, I'm able to consume messages with following lines: 对于您的消费者,我可以使用以下几行来使用消息:
public static void Main(string[] args)
{
ConnectionFactory factory = new ConnectionFactory();
factory.UserName = "guest";
factory.Password = "guest";
factory.HostName = "localhost";
factory.VirtualHost = "/";
var connection = factory.CreateConnection();
var channel = connection.CreateModel();
var queueName = "test-queue";
channel.QueueDeclare(queueName, false, false, false, null);
channel.QueueBind(queueName, "example.exchange", "", null);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var bodyy = ea.Body;
var messagee = Encoding.UTF8.GetString(bodyy);
Console.WriteLine("received [x] {0}", messagee);
};
channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer);
Console.ReadLine();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.