Spring-events是一个类似于消息中间件的用处,但是还是没有消息中间件好用,但是可以用作本地消息来使用
创建事件发布者
@Component
// 实现事件发布
public class BaseEvent implements ApplicationEventPublisherAware {
private ApplicationEventPublisher publisher;
public ApplicationEventPublisher getApplicationEventPublisher() {
return this.publisher;
}
@Override
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
this.publisher = applicationEventPublisher;
}
}
@Component
// 发布事件基础类
public abstract class SupportEvent<D extends ApplicationEvent> extends BaseEvent {
public abstract void sendEventMessage(D d);
}
@Component
// 登录事件发布者
public class LoginPublisher extends SupportEvent<LoginEvent> {
@Override
public void sendEventMessage(LoginEvent loginEvent) {
super.getApplicationEventPublisher().publishEvent(loginEvent);
}
}
创建事件监听者
@Component
public class LoginListener {
@EventListener
// 是否异步监听
@Async
public void handler(LoginEvent loginEvent) {
System.out.println("LoginEvent收到消息");
System.out.println(loginEvent.getContent());
}
}
测试
2020-06-08 11:28:27.661 INFO 21176 --- [nio-6379-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-06-08 11:28:27.661 INFO 21176 --- [nio-6379-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2020-06-08 11:28:27.667 INFO 21176 --- [nio-6379-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 6 ms
LoginEvent收到消息
我是登录事件
这只是一个基础的示例,可能有些时候用不上,但是你起码要知道有着一种方法实现本地消息通讯。