【问题标题】:Configure Rebus so that if the message contains an worker id, only that worker will handle that message配置 Rebus,以便如果消息包含工作人员 ID,则只有该工作人员将处理该消息
【发布时间】:2014-11-30 15:14:04
【问题描述】:

我们正在运行 Rebus 作为我们批处理系统的主干。我们有几个队列(即消息类型)可以由多个工作人员处理。每个工作人员只能处理一种消息类型。因此,例如对于 message_1,我们有 2 个工人(工人 1 和工人 2)可以处理此消息。目前第一 空闲句柄的工人将处理消息。这是默认行为并且工作良好。

我的问题是我是否可以以任何方式设置 Rebus,以便如果消息包含工作人员 ID(例如工作人员 2),则只有该工作人员应该能够处理该消息。如果消息中没有工作人员 ID,则应采用默认行为(见上文)。

【问题讨论】:

    标签: c# bus rebus


    【解决方案1】:

    没有办法(至少目前没有)实现您在此处描述的内容。

    如果您对某些消息类型(或某些消息实例)有特殊要求,我建议您将这些消息转发到一个或多个可以处理这些类型消息的特殊端点。

    转发可以基于标头完成,因此可以设置为以通用方式工作,而不必反序列化消息内容。

    如果你告诉我更多关于你要解决什么问题,也许我们可以找到一个更优雅的解决方案(或者至少可以用 Rebus 更优雅地解决)。

    【讨论】:

    • 您的意思是带有自定义标头的 bus.Advanced.Routing.ForwardCurrentMessage 方法(未在 Rebus.Shared.Headers 中指定)?
    • 是的,这绝对是一个选项,尽管这确实会导致消息反序列化 - 如果您有兴趣在不反序列化的情况下进行路由,我建议您直接使用 MsmqMessageQueue 看看
    • 但我越来越有兴趣了解您正在尝试解决什么样的问题:)
    • 我不是原始 OP,但我想知道直接使用 MsmqMessageQueue 是什么意思 - 你的意思是根本不创建总线实例并像 HTTP 网关那样独立使用 MsmqMessageQueue 吗? :)
    • 这正是我的意思,是的 - 如果你让它单独在 IDuplexTransport 上工作,你甚至可以让你的路由器与传输无关
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2016-05-29
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2014-06-05
    相关资源
    最近更新 更多