我正在尝试建立一个通用的 rebus 发布服务,它允许我们的任何 Web 应用程序为订阅者推送事件消息。该服务的唯一工作是维护订阅并重新发布它收到的任何消息。我想避免在服务中创建特定的 IHandleMessage 实现,因为它不需要知道传入消息的类型以外的任何信息。
我尝试了多种方法(例如 IHandleMessages),并且当它尝试反序列化它没有程序集的消息时,rebus 崩溃。
我正在尝试建立一个通用的 rebus 发布服务,它允许我们的任何 Web 应用程序为订阅者推送事件消息。该服务的唯一工作是维护订阅并重新发布它收到的任何消息。我想避免在服务中创建特定的 IHandleMessage 实现,因为它不需要知道传入消息的类型以外的任何信息。
我尝试了多种方法(例如 IHandleMessages),并且当它尝试反序列化它没有程序集的消息时,rebus 崩溃。
哦,是的,你当然可以这样做——但只有在你完全避免反序列化消息的情况下才能实现真正的传递,你可以通过使用自己的序列化程序轻松地做到这一点。
如果您将ISerializeMessages实现为 ,PassThroughSerializer
则可以像这样配置发布者:
Configure.With(...)
.(...)
.Serializer(s => s.Use(new PassThroughSerializer())
.(...)
如您所见,您的序列化程序需要能够将传入的ReceivedTransportMessage
(基本上只是标题和 a 的字典byte[]
)转换为 a Message
,这是相同的标题和object[]
在您的情况下,您实际上不会进行任何反序列化,而只是将其传递byte[]
到.Message
TransportMessageToSend
我希望这是有道理的 :)