【问题标题】:MassTransit binary serialized messages are not handled correctlyMassTransit 二进制序列化消息未正确处理
【发布时间】:2012-04-08 00:36:24
【问题描述】:

我一直在使用 MassTransit 处理电子邮件。使用此代码:http://meandaspnet.blogspot.com/2009/10/how-to-binary-serialize-mailmessage-for.html 我能够对我的电子邮件进行二进制序列化并将它们发布到我的服务总线。他们也得到了正确的处理。

Bus.Initialize(
                sbc =>
                    {
                        sbc.EnableMessageTracing();
                        sbc.ReceiveFrom("msmq://localhost/MyQueue");
                        sbc.UseMsmq();                        
                        sbc.VerifyMsmqConfiguration();
                        sbc.UseMulticastSubscriptionClient();
                        sbc.UseBinarySerializer();
                        sbc.Subscribe(subs => subs.Instance(new MessageHandler()));
                    });

现在我添加了一个新的类型和处理程序:

       // Check out the sequence of the Consumes<> !
   public class MessageHandler :
               Consumes<SerializeableMailMessage>.All,
       Consumes<AangifteOmzetbelasting>.All
   {
       public void Consume(AangifteOmzetbelasting message)
       {
                       // Some code - method will NOT be called
       }

       public void Consume(SerializeableMailMessage mailMessage)
       {
                       // Some code - this method is called by Mass Transit
       }
   }

奇怪的是,如果我发布一个 SerializableMailMessage,这会起作用 - 但不适用于 AangifteOmzetbelasting。如果我更改接口顺序 - 它适用于 AangifteOmzetbelasting 而不是 SerializableMailMessage。像这样:

   // Check out the sequence of the Consumes<> !
       public class MessageHandler :
       Consumes<AangifteOmzetbelasting>.All,
       Consumes<SerializeableMailMessage>.All

在后一种情况下,SerializedMailMessges 也不会出现在服务总线上。两者均使用以下方式发布:

Bus.Instance.Publish(object)

我在这里做错了什么?

【问题讨论】:

    标签: c# msmq masstransit


    【解决方案1】:

    在没有类型信息的情况下发布消息是一场真正的斗争;类型信息对于路由非常重要。

    如果您必须以 object 发布,我会在这里做什么,我们是否有 FastActivator 助手,您可以看看(应该在引用的 Magnum 库中),就像 Bus.Instance.FastActivator("Publish", message, { message.GetType() })。我可能有参数的顺序错误,但你需要方法名、参数和泛型类型参数。

    此外,如果您需要,我建议加入 MT 邮件列表以进一步帮助解决此问题。 https://groups.google.com/forum/#!forum/masstransit-discuss

    【讨论】:

    • 感谢您的回复 - 我尝试使用 Publish 进行发布,但根据评论已过时。我不能更改发布方法以提供类型信息吗?
    • 我们使用两种总线解决了这个问题:一种用于序列化消息,另一种用于 XML 消息。
    猜你喜欢
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 2016-09-16
    • 1970-01-01
    相关资源
    最近更新 更多