I'm trying to create a consumer on console application app according to this example:
https://rabbitmq-website.pages.dev/tutorials/tutorial-six-dotnet

我注意到,当我将Program.cs文件之外的代码移到不同的类中时,它不起作用,代码完全相同

我的Program.cs文件中的代码

var factory = new ConnectionFactory { HostName = "localhost" };
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();

channel.QueueDeclare(queue: "rpc_queue",
                     durable: false,
                     exclusive: false,
                     autoDelete: false,
                     arguments: null);
channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);
var consumer = new EventingBasicConsumer(channel);
channel.BasicConsume(queue: "rpc_queue",
                     autoAck: false,
                     consumer: consumer);

consumer.Received += (model, ea) =>
{
    string response = string.Empty;

    var body = ea.Body.ToArray();
    var props = ea.BasicProperties;
    var replyProps = channel.CreateBasicProperties();
    replyProps.CorrelationId = props.CorrelationId;

    try
    {
        var message = Encoding.UTF8.GetString(body);
        Console.WriteLine($"Consumer: message from clien => {message}");
        response = "This message is from Consumer";
    }
    catch (Exception ex)
    {
        response = string.Empty;
    }
    finally
    {
        var responseBytes = Encoding.UTF8.GetBytes(response);
        channel.BasicPublish(exchange: string.Empty,
                             routingKey: props.ReplyTo,
                             basicProperties: replyProps,
                             body: responseBytes);
        channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
    }
};
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();

其他类中的代码也是一样的

public class RcpServer
{
 public void Start()
 {
  [Same code as above without the 2 last lines (Console.read/Console.write)]
 }
}

然后,在Program.cs文件中,我有以下代码

RcpServer rcpServer = new RcpServer();
rcpServer.Start();
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();

但这个代码不起作用,

经过一番搜索,我找到了这篇帖子 RABBITMQ C# Works nice on console but not for a service个,但不幸的是没有解决:

What I need is to run the consumer as "background" service.
Please help,
Thanks in advance.

推荐答案

您可以使用.net worker服务来使用消息see

Csharp相关问答推荐

Monty Hall游戏节目模拟给我50/50的结果

如何在C#中将对象[*,*]直接转换为字符串[*,*]?

. net依赖注入如何避免服务类中的新

与C#中的Zip列表并行

如何在Windows 11任务调度程序中每1分钟重复一次任务?

为什么我的表单在绑定到对象时提交空值?

ASP.NET配置kestrel以使用Windows证书存储中的HTTPS

在EF Core中,有没有什么方法可以防止在查询中写入相同的条件,而代之以表达式?

net中从位图获取坐标和绘制折线

在try 使用访问服务器上的文件夹时,如何解决CORS错误.NET核心API

异步任务调用程序集

我可以查看我们向应用程序洞察发送了多少数据吗?

使用switch 类型模式时出现奇怪的编译器行为

MSI无法将快捷方式添加到启动文件夹

具有嵌套属性的IGGroup

如何在C#.NET桌面应用程序中动态更改焦点工具上的后退 colored颜色

在C#和HttpClient中使用REST API

Xamarin Forms应用程序中登录页面的用户名和密码编辑文本之间不需要的空格

使用免费的DotNet库从Azure函数向Azure文件共享上的现有Excel文件追加行

实体框架允许您具有筛选的属性吗?