我有一个可以理解的问题;我有一些客户端在同一个队列上侦听,该消息包含一个客户端目标标识符,所有客户端都收到了此消息,但是当特定的一个客户端识别了此标识符时,只有在这种情况下,才必须将其从队列中删除(ack),否则必须保留(noack)。我已经尝试在ICosumer上生成异常,但是它不起作用,我不知道如何工作。
client = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.AutoDelete = false;
cfg.Durable = true;
cfg.Exclusive = false;
var host = cfg.Host(new Uri($"rabbitmq://{hostname}:{port}"), h =>
{
h.Username(username);
h.Password(password);
});
cfg.Publish<MessageModel>(x => { x.ExchangeType = ExchangeType.Direct; });
cfg.ReceiveEndpoint(host, queueName, e =>
{
e.Consumer<MessageConsumer>();
});
});
client.Start();
消费者:
internal class MessageConsumer : IConsumer<MessageModel>
{
Task IConsumer<MessageModel>.Consume(ConsumeContext<MessageModel> context)
{
throw new MessageNotConfirmedException();
}
}
很抱歉,如果我写了一个可能的副本,但很多天都没有找到任何解决方案。