有没有办法在Rebus中实现passthrough Publisher?

时间:2015-03-11 19:50:17

标签: rebus

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

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

1 个答案:

答案 0 :(得分:1)

哦,是的,确定你可以这样做 - 但只有当你完全避免反序列化消息时才能进行真正的传递,你可以使用自己的序列化器轻松完成。

如果您将ISerializeMessages实施为PassThroughSerializer,则可以像这样配置发布商:

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

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

在您的情况下,您实际上不会执行任何反序列化,只需将byte[]传递到Message,然后在创建TransportMessageToSend时再次将其传递出去。

我希望这是有道理的:)