`

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,方便同一个消息总线对象被多处功能公用,同时也便于代码维护。

 

Java代码 
  1. public class TimeEventBus {  
  2.   
  3.       
  4.     private final static EventBus tiemEventBus = new EventBus();  
  5.   
  6.       
  7.     public static void post(Object event) {  
  8.         tiemEventBus.post(event);  
  9.     }  
  10.   
  11.       
  12.     public static void register(Object handler) {  
  13.         tiemEventBus.register(handler);  
  14.     }  
  15.   
  16.       
  17.     public static void unregister(Object handler) {  
  18.         tiemEventBus.unregister(handler);  
  19.     }  
  20. }  

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

 

2.2 定义消息体

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

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

Java代码 
  1. public class TimeExpiringEvent {  
  2.       
  3.     private TimeTask timeTask;  
  4.       
  5.     public TimeExpiringEvent(TimeTask lifeTimeTask){  
  6.         this.timeTask = lifeTimeTask;  
  7.     }  
  8.   
  9.     public TimeTask getLifeTimeTask() {  
  10.         return timeTask;  
  11.     }  
  12.   
  13.     public void setLifeTimeTask(TimeTask lifeTimeTask) {  
  14.         this.timeTask = lifeTimeTask;  
  15.     }  
  16. }  

 

2.3 定义消息监听器类

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

Java代码 
  1. public class TimeTaskEventListener {  
  2.   
  3.     @PostConstruct  
  4.     public void init() {  
  5.         TimeEventBus.register(this);  
  6.     }  
  7.   
  8.     @Subscribe  
  9.     public boolean processExpiringEvent(TimeExpiringEvent expiringEvent) {  
  10.           
  11.         //TODO process code  
  12.           
  13.         return true;  
  14.     }  
  15. }  

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

 

2.4 spring中配置消息监听器

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

Java代码 
  1. "timeTaskEventListener" class="com.cc.guava.event.listener.TimeTaskEventListener" />  

 

2.5 消息发送

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

Java代码 
  1. TimeEventBus.post(new TimeExpiringEvent(timeTask));  

  

3. 异步消息总线 AsyncEventBus 使用

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

Java代码 
  1. private final static AsyncEventBus timeAsyncEventBus = new AsyncEventBus(Executors.newCachedThreadPool());  

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

转自:http://blog.sina.com.cn/s/blog_5a15b7d10102vyp3.html

分享到:
评论

相关推荐

    SpringBoot+EventBus使用教程示例代码

    在本文中,我们将深入探讨如何在SpringBoot应用中使用EventBus,这是一个基于Guava库的事件总线系统。EventBus的引入使得松耦合的组件间通信变得更加简单和高效。让我们一起通过步骤来理解这个“SpringBoot+EventBus...

    EventBus与Spring Event区别详解(EventBus 事件机制,Spring Event事件机制)

    在本文中,我们将详细剖析EventBus和Spring Event的区别,帮助读者更好地理解和选择合适的事件机制。 EventBus事件机制 EventBus是Google Guava项目的一部分,提供了一个轻量级的事件机制实现。它基于观察者模式...

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

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

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

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

    fact-bus:基于guava整合spring实现EventBus;具体详情请访问:https

    SNAPSHOTMaven依赖<dependency><groupId>com.woter.fact</groupId><artifactId>fact-bus</artifactId><version>1.0.0-SNAPSHOT</version></dependency>功能描述fact-bus 是基于guava整合spring实现EventBus;...

    Spring+Android框架

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

    Spring ActionScript 开发教程

    #### 五、如何使用Spring ActionScript中的EventBus - **EventBus**:Spring ActionScript中的事件总线机制,用于处理应用程序中的事件分发和监听。 - **使用方法**:介绍如何利用EventBus发布事件、监听事件以及...

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

    5. **Android Context管理**:Spring for Android提供了一种优雅的方式来管理Android的`Context`,避免了因为不当使用`Context`导致的内存泄漏问题。 6. **线程管理**:Spring for Android提供了异步任务执行的支持...

    mektup:用于SpringBoot微服务应用程序的Eventbus框架

    该项目是Java Spring RESTFul服务的事件总线 入门 :smiling_face_with_sunglasses: 用法 :rocket: @SpringBootApplication @MektupScan ( " com.mektup.test " ) public class TesterApplication { public static...

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

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

    sse-eventbus-demo:sse-eventbus库的演示应用程序

    该应用程序使用库在浏览器中可视化数据。 启动应用程序 git clone https://github.com/ralscha/sse-eventbus-demo.git cd sse-eventbus-demo ./mvnw package (Windows: .\mvnw.cmd package) java -jar target/sse-...

    EventBus:分布式消息总线

    - **广泛适用**:EventBus 可用于Android、JavaFX、Spring框架等多种场景。 ### 4. EventBus 的注意事项 - **内存泄漏**:确保在适当的时候注销订阅者,否则可能导致内存泄漏。 - **事件类型匹配**:订阅方法的...

    SpringBoot无数据库模拟项目

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

    跟着 Guava、Spring 学习如何设计观察者模式.doc

    在Java中,Guava和Spring框架都提供了实现观察者模式的工具。 Guava的EventBus是观察者模式的一个实例,它简化了事件发布和订阅的过程。EventBus允许你定义事件的发布者(即被观察者)和事件的订阅者(即观察者)。...

    基于JavaSpring的MQ消息处理框架.zip

    1. 持久化事件框架基于Google的EventBus封装的同步事件框架,支持持久化事件,并通过任务调度系统定时重试执行持久化事件。 2. 消息中间件客户端API抽象出一套统一的消息发送、接收接口,简化使用。 3. 消息两阶段...

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

    注意:如果您已经在使用Spring Cloud Stream,则可能不需要此启动程序。 但是,如果由于其抽象级别而需要Spring Cloud无法提供的AMQP特定功能,那么您可能会对它感兴趣,因为它提供了Spring Cloud中可用的功能。 ...

    Java 技术框架(7.19).pdf

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

Global site tag (gtag.js) - Google Analytics