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

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

内容简介: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 发布,领域驱动开发实用库》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

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

Algorithms of the Intelligent Web

Algorithms of the Intelligent Web

Haralambos Marmanis、Dmitry Babenko / Manning Publications / 2009-7-8 / GBP 28.99

Web 2.0 applications provide a rich user experience, but the parts you can't see are just as important-and impressive. They use powerful techniques to process information intelligently and offer featu......一起来看看 《Algorithms of the Intelligent Web》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具