1.简述
后端项目中,有同事使用到eventbus,学习并且记录一下。
eventbus原理图
2.demo
引入依赖
<dependency>
<groupId>org.greenrobot</groupId>
<artifactId>eventbus</artifactId>
<version>3.2.0</version>
</dependency>
配置文件
@Configuration
public class EventBusConf {
@Bean
public EventBus eventBus(){
return new EventBus();
}
}
订阅者
@Service
@Slf4j
public class EventBusSubscribe {
@Autowired
private EventBus eventBus;
@Subscribe
public void getEventBusMessage(EventMessage eventMessage){
log.info(eventMessage.getMessage());
log.info(eventMessage.getType() + " ");
}
@PostConstruct
public void init(){
eventBus.register(this);//注册到该eventBus上
}
}
在controller中post 一个消息
@RestController
public class EventBusController {
@Autowired
private EventBus eventBus;
@GetMapping("/postMessage")
public void postMessage(){
EventMessage eventMessage = new EventMessage(1000,"+8615434789009");
eventBus.post(eventMessage);
}
}
结果
3.具体使用场景
项目中短信,邮件服务在一个服务中,如果别的服务调用该服务就需要引入该服务的FeignClient项目,然后再进行调用FeignClient的接口,如果直接调用的话就比较麻烦,所以在调用的时候可以将消息发送到EventBus中,然后订阅者完成相应的操作。这样做的缺点是代码可读性降低,不能通过代码知道具体的订阅者做了什么,我们在项目中使用该其只调用发送短信的接口。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。