2017-01-24 131 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存儲庫並實施您自己的基礎庫,它只需要半天時間,並且您可以更好地理解工作方式。

您也可以查看AggregateSourceProjac以獲得一些靈感,甚至可以使用它們,這些都是很好的例子。

+0

謝謝Alexey! CQRSLite對於我來說不像在進程內使用。它具有相當不錯的抽象分離,所以在正確的實現中它應該工作正常。兩個接口當然是一個選項,但在這種情況下,我會將代碼耦合到MassTransit,而不是僅在總線實現中執行該連接。看起來我應該看看沒有MT的RabbitMQ的直接溝通。感謝您的共享鏈接,同樣也會關注它們:) –

+0

我們正在使用MassTransit作爲命令傳輸和跨BC域事件傳輸,在很多項目中取得了巨大成功。我不確定如何使用RabbitMQ客戶端可以幫助您在那裏誠實。命令處理程序恰好位於您的基礎結構和域模型之間,因此如果命令處理程序使用MT消息 - 這非常好。 –

+0

我對CQRSLite進行處理的假設來自於它在命令/事件處理方面與MediatR的相似性。 –