简体   繁体   English

Rabbitmq Fanout Exchange C#

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM