Бинарные сериализованные сообщения MassTransit не обрабатываются правильно - PullRequest
1 голос
/ 23 марта 2012

Я использую 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)

Что я здесь не так делаю?

1 Ответ

2 голосов
/ 24 марта 2012

Публикация сообщений без информации о типах - это настоящая борьба; информация о типе очень важна для маршрутизации.

То, что я хотел бы сделать здесь, если вы должны опубликовать как object, это то, что у нас есть помощники FastActivator, на которые вы можете взглянуть (они должны быть в указанной библиотеке Magnum), что будет похоже на Bus.Instance.FastActivator("Publish", message, { message.GetType() }). Возможно, у меня неправильный порядок параметров, но вам нужно имя метода, параметры и параметры универсального типа.

Кроме того, я бы предложил присоединиться к списку рассылки MT, чтобы помочь с этой проблемой, если она вам понадобится. https://groups.google.com/forum/#!forum/masstransit-discuss

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...