有没有在不同消息类型之间共享一个队列的解决方案?
我知道主题交换,但是它使用不同的队列。
答案 0 :(得分:2)
RabbitMQ与消息的类型/内容无关,因此您可以轻松地将非常不同类型的数据发布到单个队列中。是您的应用程序必须处理解析。为此,我将提出两种解决方案:
邮件标题
您可以使用消息标题添加有关消息类型的其他信息。
Dictionary<string, object> headers = new Dictionary<string, object>();
headers("type", "type1");
IBasicProperties basicProperties = model.CreateBasicProperties();
basicProperties.Headers = headers;
byte[] messageBytes = Encoding.UTF8.GetBytes(message);
model.BasicPublish(_headersExchange, "", basicProperties, messageBytes);
由于它使用消息头,因此您以后可以始终使用头交换将它们路由到不同的队列,因此这是下一种方法的好处。
要在收到消息后使用标头,可以使用以下内容:
deliveryArguments.BasicProperties.Headers[headerKey]
在邮件正文中编码邮件类型
您还可以定义自己的消息格式,或添加描述数据类型的其他字段。但是此实现高度依赖于您当前的消息格式,因此我认为举个例子是没有道理的。