Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >聊聊cheddar的events

聊聊cheddar的events

原创
作者头像
code4it
修改于 2021-03-25 01:48:36
修改于 2021-03-25 01:48:36
43200
举报
文章被收录于专栏:码匠的流水账码匠的流水账
运行总次数:0

本文主要研究一下cheddar的events

Event

Cheddar/cheddar/cheddar-events/src/main/java/com/clicktravel/cheddar/event/Event.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface Event {

    String type();

    String serialize();

}

Event接口定义了type、serialize方法

AbstractEvent

Cheddar/cheddar/cheddar-events/src/main/java/com/clicktravel/cheddar/event/AbstractEvent.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public abstract class AbstractEvent implements Event {

    private static final ObjectMapper MAPPER = new ObjectMapper();

    static {
        MAPPER.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        MAPPER.registerModule(new JodaModule());
    }

    @Override
    public abstract String type();

    public static <T extends Event> T newEvent(final Class<T> eventClass, final String serializedEvent) {
        try {
            return MAPPER.readValue(serializedEvent, eventClass);
        } catch (final IOException e) {
            throw new IllegalStateException("Could not instantiate event " + eventClass.getName());
        }
    }

    @Override
    public final String serialize() {
        try {
            return MAPPER.writeValueAsString(this);
        } catch (final Exception e) {
            throw new IllegalStateException("Could not serialize event: [" + this + "]", e);
        }
    }

}

AbstractEvent声明实现Event接口,它实现了serialize方法,采用jackson序列化为json;然后声明type抽象方法供子类实现

EventHandler

Cheddar/cheddar/cheddar-events/src/main/java/com/clicktravel/cheddar/event/EventHandler.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface EventHandler<E extends Event> {

    void handle(final E event);

    Class<? extends E> getEventClass();

}

EventHandler接口定义了handle、getEventClass方法

EventPublisher

Cheddar/cheddar/cheddar-events/src/main/java/com/clicktravel/cheddar/event/EventPublisher.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public abstract class EventPublisher<E extends Event> {

    private final Logger logger = LoggerFactory.getLogger(getClass());
    private final MessagePublisher<TypedMessage> messagePublisher;

    protected EventPublisher(final MessagePublisher<TypedMessage> messagePublisher) {
        this.messagePublisher = messagePublisher;
    }

    public void publishEvent(final E event) {
        logger.debug("Publishing: " + event);
        final TypedMessage typedMessage = new SimpleMessage(event.type(), event.serialize());
        messagePublisher.publish(typedMessage);
    }

}

EventPublisher方法定义了publishEvent方法,它创建SimpleMessage,然后执行messagePublisher的publish来发布消息

小结

cheddar定义了Event接口及AbstractEvent抽象类,其子类需要实现type方法;EventHandler接口定义了handle、getEventClass方法;EventPublisher方法定义了publishEvent方法,它创建SimpleMessage,然后执行messagePublisher的publish来发布消息。

doc

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
聊聊cheddar的events
Cheddar/cheddar/cheddar-events/src/main/java/com/clicktravel/cheddar/event/Event.java
code4it
2021/03/27
4420
聊聊cheddar的DomainEvent
Cheddar/cheddar/cheddar-domain/src/main/java/com/clicktravel/cheddar/domain/event/DomainEvent.java
code4it
2021/03/25
3520
聊聊cheddar的DomainEvent
聊聊cheddar的MessageHandlerExecutor
Cheddar/cheddar/cheddar-messaging/src/main/java/com/clicktravel/cheddar/infrastructure/messaging/pooled/listener/MessageHandlerExecutor.java
code4it
2021/03/29
3600
聊聊cheddar的MessageHandlerExecutor
seata报错json encode exception解决
版本 io.seata:seata-spring-boot-starter:1.3.0 现象 数据实体对象字段类型为LocalDateTime时启用全局事务报错 json encode exception, Type id handling not implemented for type java.lang.Object (by serializer of type com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer) 解决
路过君
2021/12/07
1.1K0
聊聊cheddar的tx
Cheddar/cheddar/cheddar-tx/src/main/java/com/clicktravel/cheddar/infrastructure/messaging/tx/MessageAction.java
code4it
2021/04/16
6580
聊聊JESA的EventRecorder
JESA/src/main/java/Jesa/EventRecorder.java
code4it
2021/03/30
3100
聊聊JESA的EventRecorder
聊聊LoggingEventAsyncDisruptorAppender
本文主要研究一下LoggingEventAsyncDisruptorAppender
code4it
2023/12/19
3240
聊聊jetcache的BroadcastManager
jetcache-core/src/main/java/com/alicp/jetcache/support/BroadcastManager.java
code4it
2024/06/21
1940
聊聊jetcache的BroadcastManager
聊聊resilience4j的CircuitBreakerStateMachine
本文主要研究一下resilience4j的CircuitBreakerStateMachine
code4it
2018/09/17
7040
聊聊jetcache的CacheMonitor
jetcache-core/src/main/java/com/alicp/jetcache/CacheMonitor.java
code4it
2024/06/21
2400
聊聊jetcache的CacheMonitor
聊聊puma的Parser
puma/puma/src/main/java/com/dianping/puma/parser/Parser.java
code4it
2020/06/02
6110
聊聊puma的Parser
分析Spring是如何做事务事件监控的
无论是事务开始,提交或者回滚,都会触发相应的事务事件。本文首先会使用实例进行讲解Spring事务事件是如何使用的,然后会讲解这种使用方式的实现原理。
田维常
2019/07/16
8680
05期:面向业务的消息服务落地实践
这里记录的是学习分享内容,文章维护在 Github:studeyang/leanrning-share。
杨同学technotes
2023/03/28
2940
05期:面向业务的消息服务落地实践
一文读懂内部组件解耦神器 Spring Event(Spring 事件)
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
Lorin 洛林
2023/11/03
3.9K0
一文读懂内部组件解耦神器 Spring Event(Spring 事件)
05篇 Nacos Client服务订阅之事件机制剖析
上篇文章,我们分析了Nacos客户端订阅的核心流程:Nacos客户端通过一个定时任务,每6秒从注册中心获取实例列表,当发现实例发生变化时,发布变更事件,订阅者进行业务处理,然后更新内存中和本地的缓存中的实例。
程序新视界
2021/12/07
1.4K0
05篇 Nacos Client服务订阅之事件机制剖析
聊聊cheddar的tx
Cheddar/cheddar/cheddar-tx/src/main/java/com/clicktravel/cheddar/infrastructure/messaging/tx/MessageAction.java
code4it
2021/03/26
6260
聊聊cheddar的tx
聊聊cheddar的MessageSender
Cheddar/cheddar/cheddar-messaging/src/main/java/com/clicktravel/cheddar/infrastructure/messaging/MessageSender.java
code4it
2021/03/27
4150
聊聊cheddar的MessageSender
聊聊puma的Parser
puma/puma/src/main/java/com/dianping/puma/parser/Parser.java
code4it
2020/06/04
3900
如何做到业务优雅解耦?
在现代应用程序中,各个组件之间的通信是至关重要的。想象一下,你的应用程序中的各个模块像是一个巨大的交响乐团,每个模块都是一位音乐家,而Spring事件机制就像是指挥家,将所有音乐家协调得天衣无缝。
架构狂人
2024/03/06
2990
如何做到业务优雅解耦?
Spring源码浅析——事件和异步事件
观察者模式(Observer Pattern)是一种设计模式,用于在对象之间定义一种一对多的依赖关系,以便当一个对象的状态发生变化时,所有依赖于它的其他对象都能够自动接收通知并做出相应的处理。
用户1413827
2023/11/28
6280
相关推荐
聊聊cheddar的events
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档