# EventBus
**Repository Path**: nepxion/EventBus
## Basic Information
- **Project Name**: EventBus
- **Description**: 💢 Nepxion EventBus is a generic event dispatching component based on Google Guava with Spring framework AOP, support synchronous and asynchronous mode 基于Google Guava通用事件派发机制的事件总线组件,注解式发布订阅
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: http://www.nepxion.com
- **GVP Project**: No
## Statistics
- **Stars**: 64
- **Forks**: 39
- **Created**: 2020-07-20
- **Last Updated**: 2025-06-03
## Categories & Tags
**Categories**: message-server
**Tags**: None
## README
# Nepxion EventBus
 [](https://github.com/Nepxion/EventBus/blob/master/LICENSE) [](https://search.maven.org/artifact/com.nepxion/eventbus) [](http://www.javadoc.io/doc/com.nepxion/eventbus-aop) [](https://github.com/Nepxion/EventBus/actions) [](https://www.codacy.com/gh/Nepxion/EventBus/dashboard?utm_source=github.com&utm_medium=referral&utm_content=Nepxion/EventBus&utm_campaign=Badge_Grade) [](https://github.com/Nepxion/EventBus/stargazers) [](https://gitee.com/Nepxion/EventBus/stargazers)
Nepxion EventBus是一款基于Google Guava通用事件派发机制的事件总线组件。它采用Spring Framework AOP机制,提供注解调用方式,支持异步和同步两种方式
## 简介
- 实现基于@EventBus注解开启EventBus机制
- 实现异步模式下(默认),子线程中收到派发的事件,基于@EventBus(async = false),来切换是同步还是异步
- 实现批量派发事件
- 实现同步模式下,主线程中收到派发的事件
- 实现线程隔离技术,并定制化配置线程池
- 实现事件对象的多元化,可以发布和订阅Java基本类型,也可以利用框架内置的Event类型,当然也可以使用任意自定义类型
## 兼容
最新版本兼容
- Spring 4.x.x和Spring Boot 1.x.x
- Spring 5.x.x和Spring Boot 2.x.x
## 依赖
```xml
Title: Nepxion EventBus
*Description: Nepxion EventBus AOP
*Copyright: Copyright (c) 2017-2050
*Company: Nepxion
* @author Haojun Ren * @version 1.0 */ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import com.google.common.eventbus.Subscribe; import com.nepxion.eventbus.annotation.EventBus; import com.nepxion.eventbus.core.Event; @EventBus @Service public class MySubscriber1 { private static final Logger LOG = LoggerFactory.getLogger(MySubscriber1.class); @Subscribe public void subscribe(String event) { LOG.info("子线程接收异步事件 - {},String类型", event); } @Subscribe public void subscribe(Long event) { LOG.info("子线程接收异步事件 - {},Long类型", event); } @Subscribe public void subscribe(Boolean event) { LOG.info("子线程接收异步事件 - {},Boolean类型", event); } @Subscribe public void subscribe(Event event) { LOG.info("子线程接收异步事件 - {},内置类型Event", event); } } ``` 调用入口2,同步模式下接收事件 ```java package com.nepxion.eventbus.example.service; /** *Title: Nepxion EventBus
*Description: Nepxion EventBus AOP
*Copyright: Copyright (c) 2017-2050
*Company: Nepxion
* @author Haojun Ren * @version 1.0 */ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import com.google.common.eventbus.Subscribe; import com.nepxion.eventbus.annotation.EventBus; import com.nepxion.eventbus.core.Event; @EventBus(async = false) @Service public class MySubscriber2 { private static final Logger LOG = LoggerFactory.getLogger(MySubscriber2.class); @Subscribe public void subscribe(String event) { LOG.info("主线程接收同步事件 - {},String类型", event); } @Subscribe public void subscribe(Long event) { LOG.info("主线程接收同步事件 - {},Long类型", event); } @Subscribe public void subscribe(Boolean event) { LOG.info("主线程接收同步事件 - {},Boolean类型", event); } @Subscribe public void subscribe(Event event) { LOG.info("主线程接收同步事件 - {},内置类型Event", event); } } ``` 调用入口3,派发事件 ```java package com.nepxion.eventbus.example.service; /** *Title: Nepxion EventBus
*Description: Nepxion EventBus AOP
*Copyright: Copyright (c) 2017-2050
*Company: Nepxion
* @author Haojun Ren * @version 1.0 */ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.nepxion.eventbus.core.Event; import com.nepxion.eventbus.core.EventControllerFactory; @Service public class MyPublisher { private static final Logger LOG = LoggerFactory.getLogger(MyPublisher.class); @Autowired private EventControllerFactory eventControllerFactory; public void publish() { LOG.info("发送事件..."); // 异步模式下(默认),子线程中收到派发的事件 eventControllerFactory.getAsyncController().post("Sync Event String Format"); // 同步模式下,主线程中收到派发的事件 // 事件派发接口中eventControllerFactory.getSyncController(identifier)必须和@EnableEventBus参数保持一致,否则会收不到事件 eventControllerFactory.getSyncController().post("Sync Event String Format"); // 异步模式下(默认),子线程中收到派发的事件 eventControllerFactory.getAsyncController().post(12345L); // 同步模式下,主线程中收到派发的事件 // 事件派发接口中eventControllerFactory.getSyncController(identifier)必须和@EnableEventBus参数保持一致,否则会收不到事件 eventControllerFactory.getSyncController().post(Boolean.TRUE); // 异步模式下(默认),子线程中收到派发的事件 eventControllerFactory.getAsyncController().postEvent(new Event("Async Event")); // 同步模式下,主线程中收到派发的事件 // 事件派发接口中eventControllerFactory.getSyncController(identifier)必须和@EnableEventBus参数保持一致,否则会收不到事件 eventControllerFactory.getSyncController().postEvent(new Event("Sync Event")); } } ``` 主入口 ```java package com.nepxion.eventbus.example; /** *Title: Nepxion EventBus
*Description: Nepxion EventBus AOP
*Copyright: Copyright (c) 2017-2050
*Company: Nepxion
* @author Haojun Ren * @version 1.0 */ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import com.nepxion.eventbus.annotation.EnableEventBus; import com.nepxion.eventbus.example.service.MyPublisher; @SpringBootApplication @EnableEventBus public class MyApplication { public static void main(String[] args) throws Exception { ConfigurableApplicationContext applicationContext = SpringApplication.run(MyApplication.class, args); MyPublisher myPublisher = applicationContext.getBean(MyPublisher.class); myPublisher.publish(); } } ``` 运行结果 ``` 2018-06-25 13:01:02.008 INFO [main][com.nepxion.eventbus.example.service.MyPublisher:28] - 发送事件... 2018-06-25 13:01:02.015 INFO [EventBus-192.168.0.107-thread-0][com.nepxion.eventbus.example.service.MySubscriber1:27] - 子线程接收异步事件 - Sync Event String Format,String类型 2018-06-25 13:01:02.016 INFO [main][com.nepxion.eventbus.example.service.MySubscriber2:27] - 主线程接收同步事件 - Sync Event String Format,String类型 2018-06-25 13:01:02.016 INFO [main][com.nepxion.eventbus.example.service.MySubscriber2:37] - 主线程接收同步事件 - true,Boolean类型 2018-06-25 13:01:02.016 INFO [EventBus-192.168.0.107-thread-1][com.nepxion.eventbus.example.service.MySubscriber1:32] - 子线程接收异步事件 - 12345,Long类型 2018-06-25 13:01:02.017 INFO [EventBus-192.168.0.107-thread-2][com.nepxion.eventbus.example.service.MySubscriber1:42] - 子线程接收异步事件 - com.nepxion.eventbus.core.Event@67ca8c1f[ source=Async Event ],内置类型Event 2018-06-25 13:01:02.017 INFO [main][com.nepxion.eventbus.example.service.MySubscriber2:42] - 主线程接收同步事件 - com.nepxion.eventbus.core.Event@1bcf67e8[ source=Sync Event ],内置类型Event ``` ## 请联系我 微信、钉钉、公众号和文档  ## Star走势图 [](https://starchart.cc/Nepxion/EventBus)