实现配置的可插拔

引言:
三天前我们小组内部发生了争吵,原因是设计MQ层时一方想用 Kafka 另一方想用 RocketMQ 。小组因为这事争论了一个多小时,甚至还列了一个表格来对比双方优劣。有人认为 Kafka 性能更加优异,更经得起考验;有人认为 RocketMQ 则经历了双11流量高峰,性能更值得信赖,而且还有更活跃的中文社群,没理由不选。当然我个人还是偏好 RocketMQ 的,但是也不能不尊重其他人的意见,于是最后的结果是想一个更灵活的办法,不管你是 Kafka 、RocketMQ 还是什么xxxxx,我就一句话:我全都要。

我们的目的是做到使用者可以通过修改配置来方便的切换不同的MQ,但是想了半天也没想出什么好方法,上网查阅资料、CSDN、掘金上也找不到满意的答案,于是我们又到 Spring 的官网去找文档。功夫不负有心人,在经过两天的寻找后,我们发现了一个注解:@ConditionAlOnProperties,这个注解可以使得满足一定条件时加载对应的配置,这不巧了吗,和我们需要的一拍即合,于是我们根据这个注解设计了对应的可插拔配置。(后来知道使用SPI会更加优雅,但是这是后来的事了,本文是基于注解的形式实现的,而且我认为使用注解会更加简单易懂,降低上手门槛)

实现:
在对应的MQ实现上加上注解,name属性读取配置文件中的信息,与后面的固定字段进行比对,当相同时才会加载次配置类,即使用对应的MQ服务

当我的配置oomun.mq.pipeline=rocketmq时,我就不去实例化Kafka相关的生产者和消费者,转而去初始化rocketmq的生产者和消费者,那自然接口下的实现类就是为rocketmq的
在这里插入图片描述
调用时会自动选择启用的配置MQ
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xmbcc777/article/details/130391691