我有两个消费者以下列方式宣布:
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
有谁知道我做错了什么?
答案 0 :(得分:1)
我提供相同的主机名,用户名,密码,队列名称和 交换所有3个应用程序的名称。
现在你有一个队列,有两个绑定到交换。因此,INFO和ERROR会转到您的两个消费者正在使用的单个队列中。
每个消费者需要一个不同的队列。所以你需要一个交换和两个队列。每个消费者都有一个队列。