2016-10-12 7 views
0

私は、rabbitmq/apiを使用してリモートホストからrabbitmqにメッセージを公開するケースがあり、私はMassTransitの消費者に公開されたメッセージの処理を渡したいと思います。MassTransitとmessageTypeのプロパティ

は、私が気づく可能性として、MassTransitの消費者との成功の「最小限必要なプロパティ」扱いのメッセージは次のようになります。

ペイロード

{ 
    'messageId':'86fd0000-17e1-ac9e-4bde-08d3f1e8553e', 
    'correlationId':'86fd0000-17e1-ac9e-4165-08d3f1e8553e', 
    'conversationId':'86fd0000-17e1-ac9e-4d99-08d3f1e8553e', 
    'messageType':[ 
     'urn:message:Tm.Core.Integration.RabbitMq.Bus.Extension:EndScenario', 
     'urn:message:Tm.Core.Integration.RabbitMq.Command:IEndScenario', 
     'urn:message:Tm.Core.Integration.RabbitMq.Command:ICommand' 
    ], 
    'message':{ 
     'correlationId':'86fd0000-17e1-ac9e-4165-08d3f1e8553e', 
     'scenarioId':'6c3fda36-8ded-41f0-9536-dd76cd146963' 
    } 
} 

あなたが見ることができるように、にmessageTypeプロパティは情報が含まれています、それはそれを責任ある消費者に渡すのに役立ちます(そうではありませんか?)。

MassTransitのコンシューマを使用してこのようなメッセージを受け取り、処理を続ける方法はありますか?遅かれ早かれリファクタリングのいくつかが私のコードを破ることに本当に恐れています(messageTypeはメッセージのランタイムタイプに依存しますね、それはどうですか?)、私はそれを防止したいと思います。

私はルーティングのいくつかのコードを書く必要があることを理解しています(mbはこのメッセージを受け取り、別の情報を公開しています)。

私の目標は、このようなメッセージを渡すことです:メッセージエンベロープの

{ 
    'messageId':'86fd0000-17e1-ac9e-4bde-08d3f1e8553e', 
    'correlationId':'86fd0000-17e1-ac9e-4165-08d3f1e8553e', 
    'conversationId':'86fd0000-17e1-ac9e-4d99-08d3f1e8553e', 
    'message':{ 
     'correlationId':'86fd0000-17e1-ac9e-4165-08d3f1e8553e', 
     'scenarioId':'6c3fda36-8ded-41f0-9536-dd76cd146963' 
    } 
} 

答えて

1

messageTypeセクションが必要です。存在しない場合は、メッセージをクラスに逆シリアル化することはできません。

あなたがいない種類のメッセージを購読することができます唯一の方法は、次のような、JToken自体を見て消費者を使用することです:

public JsonConsumer : 
    IConsumer<JToken> 
{} 
関連する問題