2016-10-12 4 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 섹션이 필요합니다. 존재하지 않으면 메시지를 클래스로 직렬화 할 수 없습니다.

public JsonConsumer : 
    IConsumer<JToken> 
{} 
: 당신은 어떤 유형의 메시지를 구독 할 수 있습니다

유일한 방법은 같이 JToken 자체에 보이는 소비자를 사용하는 것입니다