wdss的blog

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

在ddd设计中,聚合根之间的调用主要使用事件来实现。在单服务内部,可以使用Spring的事件来实现(很方便地支持事务或非事务异步)。而在微服务架构中,跨微服务的事件是常见的需求,而Spring的事件机制不支持跨微服务事件。

由于实际开发中,跨微服务事件执行过程中可能出现异常,需要对事件进行临时存储(或持久化),选择rabbitmq(标准amqp)作为中间件可以解决这些问题。

 

思路:

使用ChannelAwareMessageListener来适配ampq,创建自己的eventHandler。

使用后处理器创建eventHandler。

使用后处理器借用Spring的rabbitListenerContainerFactory实现自动rabbitmq接入

默认定义为DirectExchange,队列名为【全类名+方法名】

 

结构:
RemoteEventListener 注解,模拟Spring的EventListener,作为使用入口

RemoteEventHandler  定义EventHandler

RemoteEventHandlerFactory  为每一个RemoteEventListener生产EventHandler

RemoteEventListenerProcessor 后处理器,遍历bean,找到所有RemoteEventListener 注解的方法,注册成bean

RemoteMessageListenerProcessor 后处理器,借用Spring的rabbitListenerContainerFactory实现自动rabbitmq接入。

 

使用时,直接使用 RemoteEventListener 代替Spring的EventListener(指定目标exchange),即可实现跨微服务事件异步调用。

posted on 2020-06-14 15:43  wdss  阅读(535)  评论(0编辑  收藏  举报