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