《微服务架构设计》——Eventuate Tram框架订阅/消费模式源码解析
2021-11-29 13:57
393 查看
Eventuate Tram框架官方文档: https://eventuate.io/docs/manual/eventuate-tram/latest/getting-started-eventuate-tram.html#getting-started
Eventuate Tram架构在DDD架构时使用了其消费/订阅模式,官网给的样例如下:
领域事件发布代码:
public abstract class AbstractTramEventTest { @Autowired private DomainEventPublisher domainEventPublisher; @Test public void shouldReceiveEvent() throws InterruptedException { long uniqueId = config.getUniqueId(); String accountId = ...; DomainEvent domainEvent = new AccountDebited(...); domainEventPublisher.publish("Account", accountId, Collections.singletonList(domainEvent));
消费领域事件代码:
首先,定义
DomainEventHandlers:
public class TramEventTestEventConsumer { public DomainEventHandlers domainEventHandlers() { return DomainEventHandlersBuilder .forAggregateType("Account") .onEvent(AccountDebited.class, this::handleAccountDebited) .build(); } public void handleAccountDebited(DomainEventEnvelope<AccountDebited> event) { ... } }
导入
TramEventSubscriberConfiguration并配置一个
DomainEventDispatcher:
@Configuration @Import(TramEventSubscriberConfiguration.class) public class AbstractTramEventTestConfiguration { @Bean public DomainEventDispatcher domainEventDispatcher(DomainEventDispatcherFactory domainEventDispatcherFactory, AbstractTramEventTestConfig config, TramEventTestEventConsumer target) { return domainEventDispatcherFactory.make("eventDispatcherId" + config.getUniqueId(),target.domainEventHandlers()); } @Bean public TramEventTestEventConsumer tramEventTestTarget(AbstractTramEventTestConfig config) { return new TramEventTestEventConsumer(); }
官方的案例让我没看明白他们到底通过什么进行订阅消费,于是扒了下源码:
可以下载保存后本地放大观看。
通过源码发现Eventuate Tram是通过领域事件类型和事件Class类来进行订阅消费,参数中的xxxxId只做到标记以保证出错时能打出日志,并不参与订阅消费的流程中,不要想当然的被误导了。
相关文章推荐
- Android面试题--设计模式之观察者模式的通俗易懂实现 与发布/订阅框架有区别解析
- Android之EventBus框架源码解析上(单例模式)
- Android源码中的代理模式解析
- Retrofit2 源码解析 理解原理能帮助我们更好的使用框架
- stm32中的CAN通讯列表模式配置解析与源码
- android中volley框架源码解析
- android源码设计模式解析与实战 笔记 6.6节
- Java中IO框架——OutputStream源码解析
- 第31课: Spark资源调度分配内幕天机彻底解密:Driver在Cluster模式下的启动、两种不同的资源调度方式源码彻底解析、资源调度内幕总结
- Android EventBus框架(二)之源码简单解析
- leakcanary内存优化框架源码解析
- muduo库源码解析:单例模式singleton
- 最新阿神Java并发编程高阶技术-高性能并发框架源码解析与实战
- Spring源码解析之:Spring Security启动细节和工作模式
- Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程
- Shiro登录认证框架源码解析
- iOS开发之Masonry框架源码深度解析
- <<Android源码设计模式解析与实战>>读书笔记----- Android NDK开发学习
- Mybaits 源码解析 (一)----- 搭建一个mybatis框架(MyBatis HelloWorld)
- butterknife注解框架源码解析