首页 > 解决方案 > RabbitMQ C# 基于消息的监听器

问题描述

我想要 web 应用程序,并在后端打开一个新线程并启动一个侦听器。我想要的是,打开一次连接,rabbitmq 侦听器启动,当新消息到来时,它在后台处理。最好的方法是什么?

标签: rabbitmq

解决方案


为什么需要在 Web 应用程序中监听事件?

代替它,使用 topshelf 和 masstransit 作为 rabbitmq 客户端编写一个 Windows 服务。

您可以连接到 rabbitmq 并在 Program.cs 中注册侦听器消费者,如下所示:

IBusControl busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
        {
            IRabbitMqHost host = cfg.Host(new Uri(RabbitMQConstants.RabbitMQUri),
                hst =>
                {
                    hst.Username(RabbitMQConstants.RabbitMQUserName);
                    hst.Password(RabbitMQConstants.RabbitMQPassword);
                });

            cfg.ReceiveEndpoint(host,
                RabbitMQConstants.YourQueueName,
                endPointConfigurator => { endPointConfigurator.Consumer<SomeConsumer>(); });
        });

并启动总线配置器:

        busControl.Start();

示例消费者:

public class SomeConsumer :
    IConsumer<YourMessageClass>
{
    public async Task Consume(ConsumeContext<YourMessageClass> context)
    {
        await Console.Out.WriteLineAsync($"Message consumed: {context.Message.YourValue}");

    }
}

有关更多信息和示例,请查看官方公共交通文档:http ://masstransit-project.com/MassTransit/usage/message-consumers.html


推荐阅读