SpringBoot+EventBus使用教程(二)
时间:2019-11-03
本文章向大家介绍SpringBoot+EventBus使用教程(二),主要包括SpringBoot+EventBus使用教程(二)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
简介
继续上篇,本篇文章介绍如何集成spring-boot-starter-guava-eventbus使用EventBus,最新的版本好像已经不叫spring-boot-starter-guava-eventbus,而是guava-eventbus-spring-boot-starter。
使用
1.引入pom
<dependency> <groupId>org.zalando.stups</groupId> <artifactId>spring-boot-starter-guava-eventbus</artifactId> <version>0.5.4</version> </dependency>
2.MessagePublisher
@Component @Slf4j public class MessagePublisher { private final EventBus eventBus; @Autowired public MessagePublisher(final EventBus eventBus){ this.eventBus = eventBus; } public void sendMessage(){ this.eventBus.post(MessageEvent.builder().id(1).name("test").build()); log.info("send message..."); } }
3.EventListener
import com.google.common.eventbus.Subscribe; import com.sww.eventbus.domain.MessageEvent; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @Component @Slf4j public class EventListener { @Subscribe public void onMessageEvent(MessageEvent event) { log.info("Subscribe message:{}", event); } }
这边和上篇不一样的是@Subscribe所在的包变了。
3.MessageEvent
和上篇一样。
4.测试类
import com.sww.eventbus.publish.MessagePublisher; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest public class EventbusApplicationTests { @Autowired private MessagePublisher messagePublisher; @Test public void contextLoads() { messagePublisher.sendMessage(); } }
5.运行结果
2019-11-03 20:32:25.052 INFO 16172 --- [ main] com.sww.eventbus.listener.EventListener : Subscribe message:MessageEvent(id=1, name=test)
2019-11-03 20:32:25.052 INFO 16172 --- [ main] c.sww.eventbus.publish.MessagePublisher : send message...
6.使用EventBusSupport
看到Support就应该知道是啥意思了,比方说JdbcDaoSupport是帮助我们快捷使用jdbc,EventBusSupport可以帮助我们快捷使用EventBus,看下它的源码,很明显还有一个异步的方法。
public interface EventBusSupport { void post(Object event); void postAsync(Object event); }
再看下它的实现类,可以看到是在配置类EventBusAutoConfiguration里的静态内部类EventBusSupportImpl,可以看到EventBusSupportImpl的内容其实就和我们一开使写的东西是一样的,也就是它帮我们封装好了,我们直接用它就可以了。
@Configuration public class EventBusAutoConfiguration { @Bean public EventBusSupport eventBusWrapper() { return new EventBusSupportImpl(eventBus(), asyncEventBus()); } @Bean public EventBus eventBus() { EventBus eventBus = new EventBus(); return eventBus; } @Bean public AsyncEventBus asyncEventBus() { AsyncEventBus asyncEventBus = new AsyncEventBus("asyncDefault", Executors.newFixedThreadPool(2)); return asyncEventBus; } @Bean public EventBusSubscriberBeanPostProcessor subscriberAnnotationProcessor() { return new EventBusSubscriberBeanPostProcessor(eventBus(), asyncEventBus()); } /** * Simple implementation of {@link EventBusSupport}. * * @author jbellmann */ static final class EventBusSupportImpl implements EventBusSupport { private EventBus eventBus; private AsyncEventBus asyncEventBus; EventBusSupportImpl(final EventBus eventBus, final AsyncEventBus asyncEventBus) { Assert.notNull(eventBus, "EventBus should not be null"); Assert.notNull(asyncEventBus, "AsyncEventBus should not be null"); this.eventBus = eventBus; this.asyncEventBus = asyncEventBus; } @Override public void post(final Object event) { this.eventBus.post(event); } @Override public void postAsync(final Object event) { this.asyncEventBus.post(event); } } }
7.EventBusHandler
@Component @Slf4j public class EventBusHandler { @Autowired private final EventBusSupport eventBusSupport; public EventBusHandler(final EventBusSupport eventBusSupport){ this.eventBusSupport = eventBusSupport; } public void eventPost(){ eventBusSupport.post(MessageEvent.builder().id(1).name("test").build()); log.info("post event"); eventBusSupport.postAsync(MessageEvent.builder().id(2).name("AsyncTest").build()); log.info("post async event"); } }
8.运行测试类
@RunWith(SpringRunner.class) @SpringBootTest public class EventbusApplicationTests { @Autowired private EventBusHandler eventBusHandler; @Test public void contextLoads() { eventBusHandler.eventPost(); } }
结果
2019-11-03 20:50:02.028 INFO 12292 --- [ main] com.sww.eventbus.listener.EventListener : Subscribe message:MessageEvent(id=1, name=test) 2019-11-03 20:50:02.028 INFO 12292 --- [ main] c.sww.eventbus.publish.EventBusHandler : post event 2019-11-03 20:50:02.044 INFO 12292 --- [ main] c.sww.eventbus.publish.EventBusHandler : post async event 2019-11-03 20:50:02.044 INFO 12292 --- [pool-1-thread-1] com.sww.eventbus.listener.EventListener : Subscribe message:MessageEvent(id=2, name=AsyncTest)
原文地址:https://www.cnblogs.com/shamo89/p/11789158.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 图解JavaScript——代码实现【2】(重点是Promise、Async、发布/订阅原理实现)
- 编译器 bug 系列(1)
- 面试高频:反转链表
- 存储过程
- 为什么别人不想回答你提的问题?
- python面试题搜集:史上最全python面试题详解(一)
- 一日一技:在 Golang 中如何快速判断字符串是否在一个数组中
- 面试问题之操作系统
- 软技能提升:转转中后台规范落地实践
- python面试题搜集(三)
- 什么是计算机网络?为什么需要网络通信?如何进行网络编程?
- Python中好用又高效的Collections 模块
- 正确创建Python二维数组
- 深入理解Python内存管理与垃圾回收,再也不怕问了(一)
- 走进面向“对象”编程的理想国(一)——深入理解Python中的一切皆对象