guava中eventbus用法
google的event 事件机制可以用于解耦,类似于spring的事件机制,可以同步也可以异步。
- 定时事件(类型随意,guava 调度的时候会根据对应的类型调对应的handler)
package google.event;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class Event1 {
private String name;
private String tag;
}
----
package google.event;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class Event2 {
private String name;
private String tag;
}
- 定义事件处理器
处理器1:
package google.event;
import com.google.common.eventbus.Subscribe;
import org.example.PrintUtils;
public class Event1Handler {
@Subscribe
public void handleEvent(Event1 event) {
PrintUtils.printWithTime("Event1Handler ~~~~");
PrintUtils.printWithTime(event.toString());
}
}
处理器2:
package google.event;
import com.google.common.eventbus.Subscribe;
import org.example.PrintUtils;
public class Event2Handler {
@Subscribe
public void handleEvent(Event2 event) {
PrintUtils.printWithTime("Event2Handler ~~~~");
PrintUtils.printWithTime(event.toString());
}
}
- 测试类:
异步测试,同步消息总线发消息和接收消息都是main 线程
package google.event;
import com.google.common.eventbus.AsyncEventBus;
import com.google.common.eventbus.EventBus;
import java.util.concurrent.Executors;
public class Client {
public static void main(String[] args) {
// 同步
// EventBus eventBus = new EventBus();
// 异步,需要传入自己的线程池
EventBus eventBus = new AsyncEventBus(Executors.newFixedThreadPool(1));
Event1Handler event1Handler = new Event1Handler();
Event2Handler event2Handler = new Event2Handler();
eventBus.register(event1Handler);
eventBus.register(event2Handler);
eventBus.post(new Event1("Event1", "Event1"));
eventBus.post(new Event2("Event2", "Event2"));
}
}
结果:
pool-1-thread-1 16:30:01 Event1Handler ~~~~
pool-1-thread-1 16:30:02 Event1(name=Event1, tag=Event1)
pool-1-thread-1 16:30:02 Event2Handler ~~~~
pool-1-thread-1 16:30:02 Event2(name=Event2, tag=Event2)
【当你用心写完每一篇博客之后,你会发现它比你用代码实现功能更有成就感!】
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2021-02-21 BIO基本介绍以及使用
2019-02-21 Springboot的日志管理&Springboot整合Junit测试&Springboot中AOP的使用
2019-02-21 Springboot实体类转JSON报错Could not find acceptable representation & 设置访问项目根路径的默认欢迎页面