【问题标题】:How to receive single message from the queue in RabbitMQ using C#如何使用 C# 从 RabbitMQ 中的队列接收单个消息
【发布时间】:2014-11-20 12:14:42
【问题描述】:

我想知道如何一次只能收到一条消息 这是基本代码

var factory = new ConnectionFactory() { HostName = "localhost" };
var connection = factory.CreateConnection()
var channel = connection.CreateModel()
channel.QueueDeclare("hello", false, false, false, null);
var consumer = new QueueingBasicConsumer(channel);
channel.BasicConsume("hello", true, consumer);

BasicDeliverEventArgs ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Response.Write(message + " Received.");

【问题讨论】:

    标签: c# rabbitmq


    【解决方案1】:

    如果您想等待 1 条消息,则继续使用 channel.BasicConsume,但在收到一条消息后留下消费者方法。

    如果您只收到 1 条消息(如果队列中至少存在 1 条消息),那么 channel.BasicGet

    var data = channel.BasicGet(queueName, true);
    

    附:

    CloudAMQP with .NET: Getting started 页面上有很好的例子。

    【讨论】:

      【解决方案2】:

      如果您需要需要转换的消息中的文本,请补充最后一条消息:

      var data = channel.BasicGet(QueueName, true);
      var message = System.Text.Encoding.UTF8.GetString(data.Body);
      

      【讨论】:

        【解决方案3】:

        对于其他语言,如果使用 channel.BasicGet 方法出现错误,您可以使用库的 channel.get 方法 当我尝试使用 Node.Js 实现这一目标时,我就是这种情况

        我的 Node.Js 代码:

        const open = require('amqplib').connect('amqp://admin:password@172.17.0.1:5672?heartbeat:30')
        open
          .then(conn => conn.createChannel())
          .then(async channel => {
            console.log('channel created')
            const msg = await channel.get('myQueue')
            if (msg) {
              console.log(msg.content.toString())
              channel.ack(msg)
            }
          })
          .catch(console.warn)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多