【问题标题】:RabbitMQ Message Consumption ID based (c# API)基于 RabbitMQ 消息消费 ID (c# API)
【发布时间】:2011-03-28 18:11:38
【问题描述】:

我想发布/生成一条带有一些消息 ID 的消息,就像每条消息都有一个特定的 id..

在消费者端,我想通过提供 ID 来检索消息。 假设我们有多个消费者,而不是每个消费者都应该只获得他们通过消息 ID 请求的那些消息。 (我希望我足够清楚)。

【问题讨论】:

    标签: c# api message-queue rabbitmq


    【解决方案1】:

    为此使用数据库可能会更好。

    亚历克西斯 (rabbitmq)

    【讨论】:

    • 好的,我知道我将不得不涉及数据库。您能否详细说明我应该做什么,以便像我这样的初学者能够理解。感谢您的回复。
    【解决方案2】:

    虽然它不是设计使然,最好使用数据库,但有一种方法可以使用 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 被处理后,所有未确认的消息都将重新排队。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-15
      • 1970-01-01
      • 2020-04-20
      • 2017-11-13
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      相关资源
      最近更新 更多