首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rabbitmq Fanout交易所C#

Rabbitmq Fanout交易所C#
EN

Stack Overflow用户
提问于 2018-08-22 10:34:59
回答 1查看 1.6K关注 0票数 2

我有一个关于Rabitmq扇出交换的问题,我的问题是我想要一个发布订阅示例,使用rabbitmq和c#.So,我创建了两个项目,一个是Publisher,它是

代码语言:javascript
复制
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!");
}

我有个消费者

代码语言:javascript
复制
    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();
        }
    }

但我找不到messages.Why?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-23 09:53:32

所以我发现了你的问题。首先,您在消费者中的交换声明是错误的。

您在发布服务器中声明exchange为"example.exchange“:

代码语言:javascript
复制
channel.ExchangeDeclare("example.exchange", ExchangeType.Fanout, true, false, null);

但是你的消费者中的"foo.exchange“:

代码语言:javascript
复制
channel.QueueBind(queue: queueName, exchange: "foo.exchange", routingKey: "");

将"foo.exchange“改为"example.exchange”。

对于您的消费者,我可以使用以下行来使用消息:

代码语言:javascript
复制
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();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51964937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档