实现多种MQ相互切换--Producer

1 场景

最近在做中间件mq改造,目的是将apache Rocket MQ 改造成阿里云提供需要收费的RocketMQ,但由于阿里云RocketMQ需要收费,导致在团队内部做开发测试十分尴尬,因此决定线上使用阿里云Rocket,而平时开发与测试均切换回apache RocketMQ;下面本人对RocketMQ--producer做一个设计概要说明,对自己的工作进行总结也希望各位大佬能指点一二,指出还需要考虑与改进的点。

后续如果有必要且时间允许,本人会出consumer版说明

2 UML类图

UML类图

  • MQProducer接口来定义MQ在项目中公共的方法,start、sendMessage、shutdown

  • AbstractMQProducer 类实现MQProducer接口中,start、shutdown,主要做一些公共方法处理,如:日志打印等

  • ApacheRocketMQProducer、AliYunRocketMQProducer、ActiveMQProduer 继承AbstactMQProducer且实现sendMessage方法,对start与shutdown做代理(其实也叫重写只是super一下)

  • MQProducerFactory类build 利用java反射原理直接返回构造对象

  • EvenListenHelper 类起到执行MQ的作用,实现Spring中InitializingBean、DisposableBean,执行MQProducer 中start与shutdown方法,而sendMessage 通过项目的观察者模式来推送消息

3 关键配置项目说明

关键配置项,mqTypeName本人通过工厂模式build出需要的**MQProducer.class 

猜你喜欢

转载自blog.csdn.net/qq_24811119/article/details/80341078