【问题标题】:Hosting RabbitMQ Consumers in .NET Enviornment在 .NET 环境中托管 RabbitMQ 消费者
【发布时间】:2015-08-17 18:32:50
【问题描述】:

我的问题是托管 RabbitMQ 消费者的最佳方式是什么?目标是让这些作为独立单元运行,可以根据它们的使用情况独立扩展。Windows 服务? (每个服务的消费者?),WCF 绑定(似乎已弃用)? ServiceStack 出价?

理想情况下,我想要的是对 RabbitMQ 本身的队列进行竞价,以便消息进入消费者线程后立即生成并使用该消息(类似于 WCF 中的 msq 竞价)以下是​​我知道的一些内容。请指教

-

【问题讨论】:

    标签: windows-services rabbitmq


    【解决方案1】:

    我不会谈论“最佳方式”,因为它是主观的,主要受经验和偏好的影响。通过直接使用 RabbitMQ.Client 而不是使用框架,您将获得最大的灵活性和对功能的访问权限,但如果您的要求符合其用例,框架可以提供生产力。

    ServiceStack.RabbitMQ

    使用ServiceStack's Rabbit MQ 支持的一个好处是,您可以重用现有的 ServiceStack 服务并通过 Rabbit MQ 使用它们,除了可重用性优势外,您还可以通过 HTTP 开发和测试您的服务它通过能够从 url 调用服务以及访问 Web Inspector 和 Fiddler 等工具来提供更好的内省。

    ServiceStack's Rabbit MQ 包括高级客户端和服务器库,它们抽象了低级细节以提供类型化 API,让您可以publish POCO messages

    using (var mqClient = new RabbitMqMessageFactory("localhost"))
    {
        mqClient.Publish(new Hello { Name = "World" });
    }
    

    以及Configure ServiceStack 的 Typed API 来处理 Hello 请求 DTO:

    public override void Configure(Container container)
    {
        container.Register<IMessageService>(c => new RabbitMqServer());
    
        var mqServer = container.Resolve<IMessageService>();
    
        mqServer.RegisterHandler<Hello>(ExecuteMessage);
        mqServer.Start();
    }
    

    ServiceStack high-level MQ Server API 也可以轻松配置为使用不同的 MQ 服务器,如果您将来希望切换到使用另一个 MQ 服务器而不是 RabbitMQ。目前它支持 Redis MQ 和内存提供程序,支持 SQS in development

    可扩展性

    MQ 服务器是“自然可扩展的”,因为您可以通过启动更多服务器(配置为查看相同的 MQ 代理)自然地负载平衡服务器,而无需更改现有客户端行为。

    Allocating multiple threads for specific operations

    默认情况下,ServiceStack 使用一个长时间运行的后台线程来处理每种不同消息类型的正常和优先级 MQ。您可以通过指定注册时使用的后台线程数来增加特定消息的吞吐量,例如:

    mqServer.RegisterHandler<Hello>(ExecuteMessage, noOfThreads:4);
    

    这将启动 4 个长时间运行的后台线程来处理 Hello 消息。

    限制

    ServiceStack 的高级ServiceStack.RabbitMq 包是opinionated in how it configures and handles 每个消息类型的In、Out、Response 和DLQ。 MQ 服务专注于提供另一个端点,用于通过 Rabbit MQ 代理使用您的 ServiceStack 服务,使用 Request/Reply messaging pattern。这意味着它不提供访问其他需要直接使用 Rabbit MQ 客户端库的 RabbitMQ 功能。除了请求/回复模式,我们目前也是evaluating how best to add support for broadcast messages

    【讨论】:

      猜你喜欢
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 2014-07-23
      • 2016-07-25
      • 2020-09-20
      • 1970-01-01
      相关资源
      最近更新 更多