业务背景:数据库分库分表,涉及多个子系统以及分片区的数据更新,往往不能直接操作数据库,http请求也会造成单点故障,通过网关又会拉长整体业务链路。
技术背景:springboot体系
问题描述:各业务子系统可以通过微服务请求到pub子系统,但是由于内部系统架构,禁止pub依赖子系统,所以往往一些多子系统消息通讯采取的是主流的RabbitMq或者kafka等。由于公司的产品面对的是不同的银行,考虑到后续银行会存在使用不同的中间件的情况,这样系统兼容不同中间件成本会加大,所以本文章介绍此种情况如果替代RabbitMq。
方案:首先要打通pub广播到子系统的障碍,此时我们选型的是使用
spring-boot自带的RestTemplate进行调用。这样可以解决pub子系统和业务子系统的通讯。
org.springframework.boot
spring-boot-starter-web
其次数据库增加一个消息队列表,表字段包含子系统类型,片区类型,通知类型等字段记录。此时解决的只是同步调用的问题,异步调用也简单,业务子系统调用pub子系统提供的API操作数据库,然后在调用异步api发起即可。