有没有办法在 Rebus 中实现直通 Publisher?

Is there a way to implement a passthrough Publisher in Rebus?

我正在尝试设置一个通用的 rebus 发布服务,允许我们的任何 Web 应用程序为订阅者推送事件消息。该服务的唯一工作是维护订阅并重新发布它收到的任何消息。我想避免必须在服务中创建特定的 IHandleMessage 实现,因为除了其类型外,它不需要知道有关传入消息的任何信息。

我尝试了多种方法(例如 IHandleMessages),当它试图反序列化一条它没有程序集的消息时,rebus 崩溃了。

哦,是的,你当然可以做到这一点 - 但只有当你完全避免反序列化消息时才能实现真正的 pass-through,这可以通过使用你自己的序列化程序轻松实现。

如果您将 ISerializeMessages 实现为 PassThroughSerializer,您可以像这样配置发布者:

Configure.With(...) .(...) .Serializer(s => s.Use(new PassThroughSerializer()) .(...)

如您所见,您的序列化程序需要能够将传入的 ReceivedTransportMessage(基本上只是 headers 和 byte[] 的字典)转换为 Message,这是相同的 headers 和一个 object[]

在你的情况下,你实际上不会进行任何反序列化,只是将 byte[] 传递给 Message,然后在需要创建 TransportMessageToSend 时反过来再次传递它].

我希望这是有道理的:)