【发布时间】:2017-08-01 21:01:00
【问题描述】:
我是 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);
}
}
}
问题是,我似乎无法从 Consumer.Received 步骤中得到任何东西。任何帮助将不胜感激!
编辑::
我能够通过使用此代码使其工作:
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);
}
}
}
有人发现这有什么问题吗?
【问题讨论】:
-
为什么 DoSomething 不能包含代码来做你想做的事情?
-
谁发送消息?此外,如果您尝试将断点设置到分配给
consumer.Received的 lambda 主体中,您的执行流程会中断吗? -
我想让 DoSomething 做我想要的代码。问题是代码永远不会到达那里。代码将在 lambda 语句(整个事情)上中断,但随后会跳到 using 的末尾,而不是进入 DoSomething。
标签: c# rabbitmq visual-studio-2017