RabbitMQ C#实例
我是RabbitMQ的新手,很难找到一个VS2017 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() {
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应用程序中的事件?