【问题标题】:CQRSLite and MassTransit integrationCQRSLite 和 MassTransit 集成
【发布时间】:2017-01-24 16:54:38
【问题描述】:

我目前正在使用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...
    }
}

【问题讨论】:

    标签: message-queue cqrs masstransit event-sourcing


    【解决方案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 天,您就会更好地了解它的工作原理。

    您还可以查看AggregateSource 和Projac 以获得一些灵感,甚至可以使用它们,这些都是很好的例子。

    【讨论】:

    • 谢谢,阿列克谢!在我看来,CQRSLite 仅用于进程内使用。它有很好的抽象分离,所以在适当的实现中它应该可以正常工作。两个接口当然是一个选项,但在这种情况下,我会将代码耦合到 MassTransit,而不是仅在 Bus only 实现中进行连接。看起来我应该看看在没有 MT 的情况下与 RabbitMQ 的直接通信。也感谢您的共享链接,也会看看它们:)
    • 我们在许多项目中使用 MassTransit 作为命令传输和跨 BC 域事件传输,并取得了巨大成功。老实说,我不确定使用 RabbitMQ 客户端将如何帮助您。命令处理程序恰好位于您的基础架构和域模型之间,因此如果命令处理程序使用 MT 消息 - 它非常好。
    • 我对 CQRSLite 处于进程中的假设来自它在命令/事件处理方面与 MediatR 的相似性。
    • 请记住,MT 不仅可以抽象传输,还可以让您更好地进行测试,使用重试策略、sagas、路由单、投票率等高级模式,并且轻而易举地进行发布/订阅。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多