Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RabbitMQ C#实例_C#_Rabbitmq_Visual Studio 2017 - Fatal编程技术网

RabbitMQ C#实例

RabbitMQ C#实例,c#,rabbitmq,visual-studio-2017,C#,Rabbitmq,Visual Studio 2017,我是RabbitMQ的新手,很难找到一个VS2017 C#示例,该示例可以打印到控制台上。我可以发送和接收消息没有问题,但我想获取消息的内容并实际使用它。以下是我的代码: using System.Text; using RabbitMQ.Client; using RabbitMQ.Client.Events; using System.IO; namespace MyCode { class Program { public static void Main() {

我是RabbitMQ的新手,很难找到一个VS2017 C#示例,该示例可以打印到控制台上。我可以发送和接收消息没有问题,但我想获取消息的内容并实际使用它。以下是我的代码:

using System.Text;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System.IO;

namespace MyCode
{
  class Program
  {
    public static void Main()
    {
      var factory = new ConnectionFactory() { HostName = "xxx.xx.x.x", UserName = "MyTest", Password = "MyTest", Port = 5672 };
      using (var connection = factory.CreateConnection())
      {
        using (var channel = connection.CreateModel())
        {

          channel.QueueDeclare(queue: "MyTest", durable: false, exclusive: false, autoDelete: false, arguments: null);

          var consumer = new EventingBasicConsumer(channel);
          consumer.Received += (model, ea) =>
          {
            var body = ea.Body;
            var message = Encoding.UTF8.GetString(body);
            DoSomething(message);
          };

          channel.BasicConsume(queue: "MyTest", autoAck: true, consumer: consumer);
        }
      }
    }
    static void DoSomething(string message)
    {
      File.AppendAllText(@"C:\RMQ.txt", message);
    }
  }
}
问题是,我似乎永远无法从消费者那里得到任何东西。任何帮助都将不胜感激

编辑::

我可以通过使用以下代码使其正常工作:

  var factory = new ConnectionFactory() { HostName = "xxx.xx.x.x", UserName = "MyTest", Password = "MyTest", Port = 5672 };
  using (IConnection connection = factory.CreateConnection())
  {
    using (IModel channel = connection.CreateModel())
    {

      channel.QueueDeclare(queue: "MyTest", durable: false, exclusive: false, autoDelete: false, arguments: null);

      BasicGetResult consumer = channel.BasicGet("MyTest", true);

      if (consumer != null)
      {
        string message = Encoding.UTF8.GetString(consumer.Body);
        DoSomething(message);
      }

    }
  }

有人看到这有什么问题吗?

第一段代码的问题是,程序在处理任何消息之前就完成了执行
EventingBasedConsumer
是异步的,实际上不会阻止程序退出。您需要实现某种类型的等待,以便能够实际处理消息。尝试添加
Thread.Sleep(10000)就在
频道之后。基本确认
并检查是否有任何正在处理的消息。

为什么DoSomething不能包含代码来完成您想做的事情?谁发送消息?另外,如果您试图将断点设置到分配给
consumer.Received
的lambda主体中,您的执行流是否会在其上中断?我想做一些事情来完成我想要的代码。问题是代码永远不会到达那里。代码将在lambda语句(整个过程)上中断,但随后将逐步结束使用,而不是进入DoSomething。如何继续侦听web应用程序中的事件?