有没有办法在 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
时反过来再次传递它].
我希望这是有道理的:)
我正在尝试设置一个通用的 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
时反过来再次传递它].
我希望这是有道理的:)