我想发布/生成带有一些消息ID的消息,就像每条消息都有一个特定的id ..
在消费者端,我想通过私有ID来检索消息。 假设我们有多个消费者,每个消费者只应获得他们通过消息ID请求的那些消息。 (我希望我很清楚)。
答案 0 :(得分:0)
为此可能最好使用数据库。
alexis(rabbitmq)
答案 1 :(得分:0)
尽管不是设计使然,并且最好使用数据库,但是有一种方法可以使用rabbitmq来实现:
发布ID为:
的邮件var message = "some message";
var messageId = Guid.NewGuid().ToString();
var factory = new ConnectionFactory { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
IBasicProperties props = channel.CreateBasicProperties();
props.MessageId = messageId;
byte[] messageBodyBytes = Encoding.UTF8.GetBytes(message);
channel.BasicPublish("", "queueName", true, props, messageBodyBytes);
}
通过ID获取消息:
var messageId = "id";
var factory = new ConnectionFactory { HostName = "localhost" };
using (var connection = _factory.CreateConnection())
using (var channel = connection.CreateModel())
{
var queueDeclareResponse = channel.QueueDeclare("queueName", true, true, false, null);
for (int i = 0; i < queueDeclareResponse.MessageCount; i++)
{
var result = channel.BasicGet("queueName", false);
var id = result.BasicProperties.MessageId;
if (id == messageId)
{
var body = result.Body;
var message = Encoding.UTF8.GetString(body);
//Do something with the message
channel.BasicAck(result.DeliveryTag, false);
break;
}
}
}
处置channel
后,所有未确认的邮件将重新排队。