EasyDomain v1.2 发布,领域驱动开发实用库
EasyDomain v1.2 已经发布,这是一个领域驱动开发实用库。
此版本更新内容包括:
基于RocketMQ实现的领域事件发布订阅能力
功能介绍
基于RocketMQ的领域事件发布订阅组件,充分借助了RocketMQ可靠性能力、消息持久化能力、消息回溯能力以及分布式处理能力。同时,便于问题的排查。该组件规避了使用线程池方式领域事件发布订阅能力缺陷。该组件实现了IDomainEventManager接口,可以无缝的在基于线程池发布订阅组件和基于RocketMQ发布订阅之间切换使用,并且发布和订阅的相关业务代码无需修改。
领域事件、以及发布订阅的能力,属于一个应用内部的运行逻辑,用于领域事件的topic,一般情况下不应该被外部系统消费。如果,外部应用需要接受一个消息来触发相关的操作,那么可以单独创建一个供外部系统使用的topic,系统内部相关的领域事件,可以增加一个领域事件订阅,用于发送供外部系统使用的消息。
版本说明
- RocketMQ版本:4.7.1
- JAVA:1.8
Maven
编辑您的pom.xml文件
<profiles> <profile> <id>coding</id> <repositories> <repository> <id>leebmw-easy-snapshoot</id> <name>snapshoot</name> <url>https://leebmw-maven.pkg.coding.net/repository/easy/snapshoot/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </profile> </profiles>
编辑您的 pom.xml 文件
<dependency> <groupId>easy-domain</groupId> <artifactId>easy-domainevent-rocketmq</artifactId> <version>1.0</version> </dependency>
使用方法
- 应用服务层服务类的父类构造函数接受一个IDomainEventManager接口实现,RocketMQ领域事件发布订阅组件实现了该接口。无参数的构造函数默认使用基于线程池的组件。以下代码 1 、2处
public abstract class BaseApplication implements IApplication { private final IDomainEventManager manager; /** * 1 * 使用默认 事件处理器的构造函数 */ protected BaseApplication() { this.manager = new ThreadPoolTaskDomainEventManager(); } /** * 2 * 带事件处理器的构造函数 * * @param manager 事件处理器 */ protected BaseApplication(IDomainEventManager manager) { this.manager = manager; } ....无关代码省略 }
使用RocketMQ领域事件发布订阅组件需要实例化RocketMqDomainEventManager类。该类接受三个参数分别是IProducerCreator、IConsumerCreator、environmentName。以下代码 1 处
public class RocketMqDomainEventManager implements IDomainEventManager, MessageListenerConcurrently { //1 public RocketMqDomainEventManager(IProducerCreator producerCreator, IConsumerCreator consumerCreator, String environmentName) { this.mqProducer = producerCreator.create(); this.consumer = consumerCreator.create(); this.environmentName = (environmentName == null || environmentName.equals("")) ? "prod" : environmentName; this.initConsumer(); } ....无关代码省略 }
- IProducerCreator接口用于创建RocketMQ的生产者实例,ProducerCreator类是默认的实现类。可以根据具体的情况重新实现IProducerCreator接口,以满足特定的环境。
- IConsumerCreator接口用于创建RocketMQ的消费者实例,ConsumerCreator类是默认的实现类。可以根据具体的情况重新实现IConsumerCreator接口,以满足特定的环境。
- environmentName参数,用于实现消息的环境隔离(如,生产环境和灰度环境的消息隔离),当使用该参数是,RocketMQ的topic名字由 environmentName_<事件名称> 组成。
3.事件的注册需要调用registerDomainEvent方法。见代码1处。
private void initSubscriber(){ // 1 this.registerDomainEvent(MyDomainEvent.class); this.registerSubscriber(factory.build(MyDomainEvent.class,s->{ this.countDownLatch.countDown(); System.out.println("执行相应的操作"); }),"test1"); }
- 事件的订阅可以使用RocketmqSubscriberFactory类来创建,该类实现了ISubscriberFactory接口
RocketmqSubscriberFactory factory=new RocketmqSubscriberFactory(); this.registerSubscriber(factory.build(MyDomainEvent.class,s->{ this.countDownLatch.countDown(); System.out.println("执行相应的操作"); }),"test1");
- 定义领域事件类
@EventName(value = "ShareDomainEvent", shareTopicName = "SharedTopic") public class ShareDomainEvent extends BaseDomainEvent { ...省略无关代码 }
- @EventName注解 是可选项,如果不设置,需要在RocketMQ中创建和类名一样的Topic,如:"ShareDomainEvent"
- 指定@EventName注解,value值必须设置,设置value后,value的值是RocketMQ对应的Topic。
- shareTopicName 是可选项,该值用于多个事件共用一个RocketMQ的Topic,可以在多个领域事件类中指定相同shareTopicName值。
- 领域事件是一个业务上的概念,它是由领域实体状态变化产生的,对领域事件的命名上应更多的体现业务含义。领域事件和领域实体紧密相连,领域事件类应和领域实体类放在相同模块或包里。
这里输入代码

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
avue v2.8.5 已经发布,基于 Element 的前端框架
avue v2.8.5 已经发布,这是一个基于 Element 的前端框架。 此版本更新内容包括: v2.8.5 2021-04-02 电脑端 修复 修复Crud组件各种报空问题gitee_I3EATN ,gitee_I3DJNM 优化 修复Tree组件的高度滑动问题gitee_I3CPJS,在线例子 新增 新增Tree组件filter-node-method自定义筛选方法gitee_I3E9UB,在线例子 新增Option配置中post动态传参方法gitee_I3E5UY,在线例子 详情查看:https://gitee.com/smallweigit/avue/releases/v2.8.5
- 下一篇
openGauss 首个城市用户组正式成立
26/03/2021 国际开源谷 | 深圳 3月26日,由openGauss社区和海量数据共同举办的openGauss Meetup在深圳国际开源谷顺利举行,同时openGauss首个城市用户组也正式成立。 深圳城市用户组人员名单: 角色 姓名 公司 职位 Organizer 李景娥 海量数据 大湾区企业客户部总经理 Ambassador 林根 海量数据 大湾区技术总监 田文罡 华为 openGauss架构师 李思昊 华为 CCF委员 熊小军 华为 openGauss布道师 周俊 视源股份 数据运维部门经理 Member 朱彬 华为 深圳产品经理 王铭玥 海量数据 产品发展部 *此表名单于2021年3月26日更新 openGauss城市用户组,英文名称:openGauss User Group,简称oGUG. 是openGauss用户发起的以城市为组织单位的社群组织,聚集对开源关系型数据库管理系统openGauss认同或使用的企事业单位、社会组织、个人开发者。 oGUG致力于构建一个开放、多元、包容的openGauss城市用书交流社区,鼓励当地任何企事业单位、社会组织、个人开发者在该社...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合Redis,开启缓存,提高访问速度