实用的消息事件机制你懂了吗?

2 篇文章 0 订阅
1 篇文章 0 订阅

Spring Boot自带了消息机制,可以让我们在一个地方发布消息,多个地方同时接收消息并处理消息,当然这是在同一个JVM内存下进行的,不同的进程还需要使用MQ来实现。我觉得该消息模式跟观察者模式有一定的区别,观察者模式一般观察的是一个对象内部属性发生变化的时候使用。而该消息机制可以在任意地方使用。

消息事件本身是一个对象,继承于ApplicationEvent
在这里插入图片描述
还需要有一个消息事件发布者,将这个消息事件给发布出去
在这里插入图片描述
然后就是我们的侦听者,侦听者可以有任意个根据业务不同做不同的处理,他的写法分两种,一个是实现了ApplicationListener接口,一个是在方法上打上@EventListener标签
在这里插入图片描述
在这里插入图片描述
但是我们需要知道的是,多个消息监听是同步执行的,他们会发生阻塞,所以我们需要进行异步监听,实现异步监听只需要在方法上打上@Async标签,同时在Springboot主程序中开启允许异步
在这里插入图片描述
最后写一个测试的Controller
在这里插入图片描述
执行后,日志如下

2019-07-21 10:42:39.686 INFO 1756 — [nio-8080-exec-1] c.g.lanmda.controller.TestController : 开始发布消息:10:42:39

2019-07-21 10:42:39.687 INFO 1756 — [nio-8080-exec-1] com.guanjian.lanmda.event.DemoListener1 : listener1通过注解接收到了publisher发送的消息,时间10:42:39

2019-07-21 10:42:41.690 INFO 1756 — [nio-8080-exec-1] com.guanjian.lanmda.event.DemoListener1 : listener1:类型测试消息,消息内容:[{1=2}, {3=4}, {5=6}]

2019-07-21 10:42:41.695 INFO 1756 — [nio-8080-exec-1] .s.a.AnnotationAsyncExecutionInterceptor : No task executor bean found for async processing: no bean of type TaskExecutor and no bean named ‘taskExecutor’ either

2019-07-21 10:42:41.697 INFO 1756 — [nio-8080-exec-1] c.g.lanmda.controller.TestController : 消息发布结束:10:42:41

2019-07-21 10:42:41.697 INFO 1756 — [cTaskExecutor-1] com.guanjian.lanmda.event.DemoListener : 接收到publisher发送到消息,时间10:42:41

2019-07-21 10:42:44.701 INFO 1756 — [cTaskExecutor-1] com.guanjian.lanmda.event.DemoListener : 类型测试消息,消息内容:[{1=2}, {3=4}, {5=6}]


    感谢观看!如果对你有所帮助,可以点个赞嘛!


顺便打个小广告,欢迎 Java 工程师朋友们+V:BGM7756 领取免费的JAVA技术干货!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值