EasyDomain v1.2 发布,领域驱动开发实用库

栏目: 软件资讯 · 发布时间: 4年前

内容简介:EasyDomain v1.2 已经发布,这是一个领域驱动开发实用库。 此版本更新内容包括: 基于RocketMQ实现的领域事件发布订阅能力 功能介绍 基于RocketMQ的领域事件发布订阅组件,充分借助了RocketMQ可靠性能力、消息持久...

EasyDomain v1.2 已经发布,这是一个领域驱动开发实用库。

此版本更新内容包括:

基于RocketMQ实现的领域事件发布订阅能力

功能介绍

基于RocketMQ的领域事件发布订阅组件,充分借助了RocketMQ可靠性能力、消息持久化能力、消息回溯能力以及分布式处理能力。同时,便于问题的排查。该组件规避了使用线程池方式领域事件发布订阅能力缺陷。该组件实现了IDomainEventManager接口,可以无缝的在基于线程池发布订阅组件和基于RocketMQ发布订阅之间切换使用,并且发布和订阅的相关业务代码无需修改。

领域事件、以及发布订阅的能力,属于一个应用内部的运行逻辑,用于领域事件的topic,一般情况下不应该被外部系统消费。如果,外部应用需要接受一个消息来触发相关的操作,那么可以单独创建一个供外部系统使用的topic,系统内部相关的领域事件,可以增加一个领域事件订阅,用于发送供外部系统使用的消息。

EasyDomain v1.2 发布,领域驱动开发实用库

版本说明

  • 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>

使用方法

  1. 应用服务层服务类的父类构造函数接受一个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;
    }
    ....无关代码省略
}
  1.  

使用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");
        }
  1. 事件的订阅可以使用RocketmqSubscriberFactory类来创建,该类实现了ISubscriberFactory接口
        RocketmqSubscriberFactory factory=new RocketmqSubscriberFactory();
        this.registerSubscriber(factory.build(MyDomainEvent.class,s->{
        this.countDownLatch.countDown();
        System.out.println("执行相应的操作");
        }),"test1");

  1. 定义领域事件类

@EventName(value = "ShareDomainEvent", shareTopicName = "SharedTopic")
public class ShareDomainEvent extends BaseDomainEvent {
   ...省略无关代码
}
  • @EventName注解 是可选项,如果不设置,需要在RocketMQ中创建和类名一样的Topic,如:"ShareDomainEvent"
  • 指定@EventName注解,value值必须设置,设置value后,value的值是RocketMQ对应的Topic。
  • shareTopicName 是可选项,该值用于多个事件共用一个RocketMQ的Topic,可以在多个领域事件类中指定相同shareTopicName值。
  • 领域事件是一个业务上的概念,它是由领域实体状态变化产生的,对领域事件的命名上应更多的体现业务含义。领域事件和领域实体紧密相连,领域事件类应和领域实体类放在相同模块或包里。
这里输入代码

详情查看:https://gitee.com/lixiaojing/easy-domain/releases/v1.2


以上所述就是小编给大家介绍的《EasyDomain v1.2 发布,领域驱动开发实用库》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Bulletproof Web Design

Bulletproof Web Design

Dan Cederholm / New Riders Press / 28 July, 2005 / $39.99

No matter how visually appealing or packed with content a Web site is, it isn't succeeding if it's not reaching the widest possible audience. Designers who get this guide can be assured their Web site......一起来看看 《Bulletproof Web Design》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

在线进制转换器
在线进制转换器

各进制数互转换器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试