`
nuistcc
  • 浏览: 84174 次
社区版块
存档分类
最新评论

spring中配置EventBus

阅读更多

1. 概述

       guava中EventBus是一个消息处理总线,基于观察者模式设计和实现。网上有很多关于其原理介绍和用法的文字,但很多用法都是给了已经简单的示例或测试demo,并没有和工程框架相结合。

      本文主要介绍下在spring框架中如何使用和配置EventBus。

 

2. EventBus在spring中的使用

      EventBus主要分为两种,一种是同步消息总线(EventBus);另一种是异步消息总线(AsyncEventBus)。

     下面主要以同步消息总线为例来介绍下EventBus和Spring的结合使用。

 

2.1 定义EventBus工具类

      guava中的com.google.common.eventbus.EventBus提供了很多API,在spring中使用时最好能够定义了bean,方便同一个消息总线对象被多处功能公用,同时也便于代码维护。

 

public class TimeEventBus {

    /** 时间任务总线 */
    private final static EventBus tiemEventBus = new EventBus();

    /**
     * 触发同步事件
     * 
     * @param event
     */
    public static void post(Object event) {
        tiemEventBus.post(event);
    }

    /**
     * 注册事件处理器
     * 
     * @param handler
     */
    public static void register(Object handler) {
        tiemEventBus.register(handler);
    }

    /**
     * 注销事件处理器
     * 
     * @param handler
     */
    public static void unregister(Object handler) {
        tiemEventBus.unregister(handler);
    }
}

      TimeEventBus类封装了guava原始EventBus的api,并通过static方法对外提供常用的消费发送、消息订阅、取消订阅等方法。

 

2.2 定义消息体

        一个消息总线可以支持多种消息的订阅和发送,不同的消息通过类名来区分。

消息体使用一个简单的Java DO,本身不需要继承或实现EventBus的接口。例如定义一个时间过期的消息实例如下:

public class TimeExpiringEvent {
    
    private TimeTask timeTask;
    
    public TimeExpiringEvent(TimeTask lifeTimeTask){
        this.timeTask = lifeTimeTask;
    }

    public TimeTask getLifeTimeTask() {
        return timeTask;
    }

    public void setLifeTimeTask(TimeTask lifeTimeTask) {
        this.timeTask = lifeTimeTask;
    }
}

 

2.3 定义消息监听器类

    消息监听器用于注册、监听和处理从消息总线接收到订阅消息,代码如下:

public class TimeTaskEventListener {

    @PostConstruct
    public void init() {
        TimeEventBus.register(this);
    }

    @Subscribe
    public boolean processExpiringEvent(TimeExpiringEvent expiringEvent) {
        
        //TODO process code
        
        return true;
    }
}

    消息总线的注册在init()方法中实现,消息的订阅则通过@Subscribe注解方式实现。

 

2.4 spring中配置消息监听器

    为了在spring容器启动后完成监听器在EventBus中的注册,需要在spring中配置监听器的bean实体。

<bean id="timeTaskEventListener" class="com.cc.guava.event.listener.TimeTaskEventListener" />

 

2.5 消息发送

    最后就差一步消息发送方的代码实现了,消息发送通过post方法实现。

TimeEventBus.post(new TimeExpiringEvent(timeTask));

  

3. 异步消息总线 AsyncEventBus 使用

       AsyncEventBus的大部分使用方式和同步消息总线类型,唯一不同的是,需要对异步消息的线程池实现进行定义,下面给出了默认缓存池配置的代码。

private final static AsyncEventBus timeAsyncEventBus = new AsyncEventBus(Executors.newCachedThreadPool());

    在使用时需要根据自己的业务特点,选择相应的多线程缓存池配置。

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    SpringBoot+EventBus使用教程示例代码

    4. **配置EventBus**:在SpringBoot的配置类中初始化和注册EventBus: ```java @Configuration public class EventBusConfig { @Bean public EventBus eventBus() { return new EventBus(); } @...

    spring-integration-eventbus:基于 Spring Integration 框架的以解耦方式连接事件发布者和事件订阅者的事件总线

    Spring 集成事件总线 Java/Spring 项目的事件总线库,基于 Spring 集成框架。 事件驱动架构促进了事件发布者和事件订阅者之间松散耦合的交互。 事件本质上是具有附加...如果您的项目使用 Spring Boot 和自动配置,那么

    bcly:简单的 spring、Eventbus、REST 工作示例

    ####Simple application with Spring boot 使用可配置的嵌入式/外部 DB 数据源和 RESTful 调用,演示如何使用 Guava Eventbus 拦截调用。 这里 对 localhost:8080/customer/ 的 POST 调用 使用 json 数据,如 {"id...

    Spring ActionScript 开发教程

    - **EventBus**:Spring ActionScript中的事件总线机制,用于处理应用程序中的事件分发和监听。 - **使用方法**:介绍如何利用EventBus发布事件、监听事件以及取消监听等操作。 #### 六、编译所需类的六种方式 - **...

    Spring+Android框架

    这使得开发者可以在Android应用中使用@Autowired和其他Spring注解,减少手动配置,提高代码的可读性和可维护性。 3. **Android ContextWrapper**:Spring框架可以与Android的Context进行集成,使得开发者可以更容易...

    spring-android-core-1.0.0.RELEASE-sources.jar

    《Spring for Android Core 1.0.0.RELEASE 源码解析》 ...深入研究这个源码包,不仅可以提升开发者对Spring框架的理解,也能帮助他们在Android开发中充分利用Spring的优势,编写出更高质量、更易于维护的应用。

    Spring Cloud微服务安全实战 中小企业可落地的完整安全方案视频教程

    同时,通过Spring Cloud Bus和EventBus实现安全事件广播,确保服务间的协调不会引发安全问题。 针对微服务的监控和日志记录,课程会讲解如何整合Spring Boot Actuator和ELK Stack(Elasticsearch、Logstash、Kibana...

    SpringBoot无数据库模拟项目

    例如,我们可以创建一个EventBus,使用Spring的ApplicationEventPublisher来发布和监听事件。这种方式在处理异步任务、解耦组件或实现CQRS(命令查询责任分离)设计模式时非常有用。 在Spring Boot中,我们可以利用...

    rabbitmq-advanced-spring-boot-starter:一个通用库,用于通过spring boot amqp上的扩展名与rabbit mq进行消息传递

    Rabbitmq高级 用于通过RabbitMq(Spring Boot amqp的扩展)进行...您可以在“ spring.rabbitmq”部分的application.yml中配置Rabbit mq服务器配置。 您可以在“ rabbitmq.auto-config”下的application.yml中配置交换

    Java 技术框架(7.19).pdf

    1. Spring框架:Spring是Java技术框架中最核心的一个组件,其提供了全面的编程和配置模型。Spring框架快速入门包括IoC(控制反转)和AOP(面向切面编程)两大特性,这是理解和使用Spring框架的基础。IoC可以实现松...

    mqtt-spring-reactor-sample:集成了mqtt和Project Reactor的示例项目

    项目中,开发人员可能已经创建了一个配置类,使用Spring Boot的自动配置特性,引入了Paho MQTT Java客户端库,并结合Spring的EventBus或MessageBroker接口,实现了MQTT消息的发布和订阅。通过这样的方式,Reactor的...

    spring-jetm:将您的弹簧应用程序与 jetm 集成

    - 配置Spring的ApplicationContext,定义JetM的EventBus、Producer和Consumer bean。 - 使用Spring的AOP(面向切面编程)或者事件监听器来实现事件的发布和消费。 - 调整JetM的配置参数以适应应用需求,如网络...

    EventService-源码.rar

    9. **框架与库**:EventService可能使用了特定的框架(如Spring框架的EventBus)或库来简化事件处理。 10. **可扩展性**:一个良好的EventService设计应易于扩展,支持添加新的事件类型和处理器。 要深入了解Event...

    Milkomeda:Spring扩展了从商务经验中构建的组件,使开发人员能够尽快使用Spring Boot进行开发。(基于Spring生态打造的各种来自业务上的快速开发模块集合。)

    尽可能使用元配置。 尽可能使用注释。 尽可能使用声明式编程。 模组 脉冲星:用于长时间轮询,快速超时。 0.1.0+ 取决于:Spring MVC Comet:用于统一请求方面记录(包括控制器层和服务层( 1.12.0+ ))。 ...

    基于springboot的在线办公系统源码.zip

    在在线办公系统中,SpringBoot通过自动配置和起步依赖,使得系统能够轻松集成数据库访问、安全控制、Web服务等功能,极大地提高了开发效率。 接着,让我们关注在线办公系统的架构设计。通常,这类系统包含用户管理...

    axon-spring-boot

    Spring Boot Axon自动配置 此模块为Axon事件源框架启用自动配置。 它将自动添加事件总线,命令总线,命令网关和必要的基础结构,以启用Axon提供的基于注释的处理。 覆盖豆 如果您定义自己的Axon CommandBus或...

    基于B2B平台医疗病历交互系统Springboot+Vue源码案例设计.zip

    1. 自动配置:Springboot通过扫描类路径中的特定注解,自动配置相应的bean,减少了大量手动配置的工作。 2. 内嵌式Web服务器:内建Tomcat或Jetty等服务器,使得应用无需额外部署即可运行。 3. 弹性架构:支持微服务...

    events-service-rfidActif

    在Java编程语言中实现事件服务,通常会使用到一些框架或库,如Apache Kafka、ActiveMQ或是Spring Framework的EventBus。这些工具提供了构建发布/订阅系统的基础设施,能够高效地处理大量的实时事件数据。 RFID技术...

Global site tag (gtag.js) - Google Analytics