2017-01-24 2 views
0

저는 현재 CQRSLite 프레임 워크와 함께 MassTransit을 버스 구현으로 사용하는 방법을 알고 있습니다.CQRSLite 및 MassTransit 통합

문제, 내가 현재 가지고있어 것을 어떻게 제대로처럼 핸들러에 메시지를 라우팅 (명령 및 이벤트)을 위해 MassTransit 측에서 소비자를 등록하려면이

public class InventoryCommandHandlers : ICommandHandler<CreateInventoryItem> 
{ 
    public void Handle(CreateInventoryItem message) 
    { 
     // do some job... 
    } 
} 

public class InventoryListView : IEventHandler<InventoryItemCreated> 
{ 
    public void Handle(InventoryItemCreated message) 
    { 
     // do some job... 
    } 
} 

답변

1
당신은 항상 두 개의 인터페이스를 구현할 수 있습니다

:

public class InventoryCommandHandlers : 
    ICommandHandler<CreateInventoryItem>, 
    IConsumer<CreateInventoryItem> 
{ 
    public void Handle(CreateInventoryItem message) 
    { 
     // do some job... 
    } 

    public Task Consume(CreateInventoryItem message) 
    { 
     Handle(message); 
     return Task.FromResult(true); 
    } 
} 

public class InventoryListView : 
    IEventHandler<InventoryItemCreated>, 
    IConsumer<InventoryItemCreated> 
{ 
    public void Handle(InventoryItemCreated message) 
    { 
     // do some job... 
    } 

    public Task Consume(InventoryItemCreated message) 
    { 
     Handle(message); 
     return Task.FromResult(true); 
    } 
} 

그러나 CQRSLite 정말 분산 환경에서 사용하기에 어떤 혜택을 볼 수 없습니다, 공정 중 사용하기 위해 설계 것으로 보인다.

원본 m-r 저장소를보고 자신의 기본 라이브러리를 구현하는 것이 좋습니다. 단 1/2 일만 걸리면 작업 방식을 더 잘 이해할 수 있습니다.

또한 AggregateSourceProjac을 보면 영감을 얻고 사용하게 될 수도 있습니다. 아주 좋은 예입니다.

+0

감사합니다. Alexey! CQRSLite는 프로세스 내 사용에 대해서만 나와 같은 것처럼 보이지 않습니다. 그것은 꽤 좋은 추상화 분리가 있으므로 적절한 구현에서 잘 작동합니다. 물론 두 개의 인터페이스 옵션이 있지만,이 경우에는 버스 만 구현할 때 연결을 수행하는 대신 코드를 MassTransit에 연결합니다. MT가없는 RabbitMQ와의 직접 통신에 대해 살펴보아야 할 것 같습니다. 공유 링크를 이용해 주셔서 감사합니다. –

+0

우리는 커다란 성공을 거둔 많은 프로젝트에서 명령 전송 및 교차 BC 도메인 이벤트 전송으로 MassTransit을 사용하고 있습니다. 나는 RabbitMQ 클라이언트를 사용하는 것이 당신을 정직하게 도울 수 있을지 확신하지 못합니다. 명령 처리기는 인프라와 도메인 모델 사이에 정확하게 있으므로 명령 처리기가 MT 메시지를 사용하면 완벽하게 정상적으로 작동합니다. –

+0

CQRSLite가 진행중인 것에 대한 내 가정은 명령/이벤트 처리면에서 MediatR과 유사하다는 점에서 비롯됩니다. –