RabbitMQ不尊重路由密钥

时间:2017-04-27 13:50:04

标签: c# rabbitmq

我有两个消费者以下列方式宣布:

IConnectionFactory connectionFactory = new ConnectionFactory()
{
    HostName = Hostname,
    UserName = Username,
    Password = Password
};

Connection = connectionFactory.CreateConnection();

Channel = Connection.CreateModel();

Channel.ExchangeDeclare(
     exchange: Exchange,
     type: ExchangeType.Direct,
     durable: true,
     autoDelete: false,
     arguments: null);

 Channel.QueueDeclare(
     queue: Queue,
     durable: true,
     exclusive: false,
     autoDelete: false,
     arguments: null);

  Channel.QueueBind(Queue, Exchange, RoutingKey);

  EventingBasicConsumer consumer = new EventingBasicConsumer(Channel);
  consumer.Received += (model, basicDeliverEventArgs) => RecievedMessageEvent(model, basicDeliverEventArgs);

  Channel.BasicConsume(
      queue: Queue,
      noAck: true,
      consumer: consumer);

一位客户声明:

IConnectionFactory connectionFactory = new ConnectionFactory()
{
    HostName = HostName,
    UserName = UserName,
    Password = Password
};

IConnection connection = connectionFactory.CreateConnection();

Channel = connection.CreateModel();

Channel.ExchangeDeclare(
     exchange: Exchange,
     type: ExchangeType.Direct,
     durable: true,
     autoDelete: false,
     arguments: null);

Channel.QueueDeclare(
     queue: Queue,
     durable: true,
     exclusive: false,
     autoDelete: false,
     arguments: null);

我为所有3个应用程序提供相同的主机名,用户名,密码,队列名称和交换名称。

我想让其中一个消费者使用特定的路由密钥处理消息,另一个消费者处理另一个路由密钥,为此,当我发送消息时,客户端处理消息:

 Channel.BasicPublish(
     exchange: Exchange, 
     routingKey: RoutingKey, 
     basicProperties: null, 
     body: executionByteArray);

路由键获取我想要的值,在我的情况下,我使用INFO和ERROR。

现在,我之前声明的每个消费者都使用特定的路由密钥进行声明,我在BasicPublish中指出,但是...当我检查我的消费者他们不尊重路由密钥时,他们仍然使用循环传送系统消耗所有消息...

我认为我可能会说错了...我试图从Rabbit MQ网站上学习本教程:https://www.rabbitmq.com/tutorials/tutorial-four-dotnet.html

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

  

我提供相同的主机名,用户名,密码,队列名称和   交换所有3个应用程序的名称。

现在你有一个队列,有两个绑定到交换。因此,INFO和ERROR会转到您的两个消费者正在使用的单个队列中。

每个消费者需要一个不同的队列。所以你需要一个交换和两个队列。每个消费者都有一个队列。