Domain driven design DDD中本地消费的域事件

Domain driven design DDD中本地消费的域事件,domain-driven-design,reactive-programming,domain-events,Domain Driven Design,Reactive Programming,Domain Events,我最近正在熟悉DDD,并试图掌握关键概念,我有一个查询,如果为本地订阅者发布域事件,那么我可以假设事件发布者通过AQMP向远程订阅者发布,同时也利用observable向本地订阅者发布,这是一个可扩展的解决方案吗?或者有一个熟悉的模式来处理这个问题吗?(还建议是否有prblm的反应式解决方案,可能是RxJava或类似的解决方案)本地或远程订阅者的位置应该对引发发布事件的域实体完全透明 你的想法和我使用的设计非常相似。我使用本地事件发布服务器的一个非常原始的版本,它通过消息传递中间件(AMQP)进

我最近正在熟悉DDD,并试图掌握关键概念,我有一个查询,如果为本地订阅者发布域事件,那么我可以假设事件发布者通过AQMP向远程订阅者发布,同时也利用observable向本地订阅者发布,这是一个可扩展的解决方案吗?或者有一个熟悉的模式来处理这个问题吗?(还建议是否有prblm的反应式解决方案,可能是RxJava或类似的解决方案)

本地或远程订阅者的位置应该对引发发布事件的域实体完全透明

你的想法和我使用的设计非常相似。我使用本地事件发布服务器的一个非常原始的版本,它通过消息传递中间件(AMQP)进行通信,以将事件传播到所有其他本地发布服务器

我不是在Java中这样做的,但事实上,对于本地事件“总线”,我使用Rx.Net(反应式扩展在所有语言中都有几乎相同的API,所以RxJava可以工作)

删除事务支持的简化版本如下所示:

public class EventHub 
{
    private readonly ISubject<object, object> _messages;
    public EventHub()
    {
        var _subject = new Subject<object>();
        m_messages = Subject.Synchronize(_subject);
    }

    public void Publish<T>(T message)
    {
        m_messages.OnNext(message);
    }

    public IObservable<T> AsObservable<T>()
    {
        return m_messages
            .ObserveOn(ThreadPoolScheduler.Instance)
            .OfType<T>()
            .Synchronize()
            .AsObservable();
    }
}
公共类事件中心
{
私有只读ISubject消息;
公共事件中心()
{
var_subject=新的subject();
m_messages=Subject.Synchronize(_Subject);
}
公共无效发布(T消息)
{
m_messages.OnNext(message);
}
公共IObservable asobbservable()
{
返回m_消息
.ObserveOn(ThreadPoolScheduler.Instance)
第()类
.Synchronize()
.AsObservable();
}
}
添加远程功能意味着添加另一个订阅者,该订阅者将订阅所有事件并将它们路由到其他本地EventHub,还将侦听其他EventHub并在本地hub上发布它们的事件。它不会更改EventHub组件