选哪种? 个人而言:业务系统复杂的优先选择第二种 ,简单业务的选择第一种(尽量采用封装,后续维护方便) 。对于一个复杂的系统,本身业务级的代码就已经很多了,结果还要每个人处理全部一样的东西,消费者越多代码冗余越多 。如果一个系统只是为了使用MQ来进行业务分离,消费者也不多,那么可以选择最快的方式,但是最终会选择第二种,如果业务随着时间增长越复杂,越晚改成第二种花费的代价越大! 第一种就好比此时我们要直接操作内存,原生操作就好比C++或C,可以直接操作内存,但是同时用完后还要自己写各种异常处理和释放内存;代码封装就好比JAVA,我们只需要告诉Java我们要使用内存,然后用完就不用管 企业中,业务功能产出是一级优先级,在此之上才能有更高级的东西 。技术服务于业务,而不是业务服务于技术!比如现在30个人的系统,我们要使用缓存加速访问,那么我们是选择 内部缓存(直接用集合或者map存起来)还是用redis? 内部缓存和Redis能不能达到目的?能 哪个更方便更快?内部缓存!内部对象就很快实现 如果业务发展迟早会转为Redis这种专业的缓存中间件,就好比业务发展前第一种,业务发展后选择第二种,但是对于大部分业务系统来说功能增加是很快的,特别是产品同事上一分钟提需求下一分钟就要上线这种(开个玩笑~),所以我们在引用一个技术需不需要进行二次封装时需要技术负责人对业务增长有一个预判 。建议是都进行封装一下1.2 封装的抽离点
- 对于二次封装,其中最主要的就是找出该框架在日常使用中所出现的大部分涉及到的操作,然后找出变化操作和不变化操作
- RocketMQ日常使用主要场景为例: 发送消息阶段:准备需要发送的消息、发送消息、记录原始消息日志、发送失败处理、可靠性处理 消费消息阶段:记录接收消息日志、业务处理、业务日志记录、异常处理、异常重试、异常通知、死信处理
- 提取变化点和不变化点(可以抽取为公共处理的场景) 发送消息阶段: 变化点:准备需要发送的消息 不变化点:发送消息、记录原始消息日志、发送失败处理、可靠性处理 消费消息阶段 变化点:业务处理、业务日志记录 不变化点:记录接收消息日志、异常处理、异常重试、异常通知、死信处理
- 从上可以看到,对于RocketMQ的使用,大部分场景都是可以抽离成一个公共的方法处理,只有业务级的需要自己处理,所以如果我们把不变化场景抽取后,每个同事只需要写自己业务相关部分即可
- 抽取后的复杂度:对于新加一个消费者,只需要处理业务相关三个场景(准备需要发送的消息、业务处理、业务日志记录),剩下的九个场景,只需要封装一次就可以 。需要现在就几十个消费者,可以想想一些减少了多少代码冗余
1.3 设计模式的应用
- 要封装出一个好的抽象层,【设计模式】建议好好体会和学习一下
- 设计模式对于用不到的人来说比较虚幻,对于用的到的人来说,这个真牛X
二、二次封装核心要点2.1 二次封装核心点2.1.1 封装主要讨论点
- 对于RocketMQ或者说对于整个MQ体系来说(不管是RabbitMQ、RocketMQ、Kafka)等封装的核心主要有两个:发送消息、消费消息者两个场景
- 对于RocketMQ我们主要讨论三个地方:RocketMQTemplate封装、RocketMQListener封装和广播消息的封装
- 广播消息是分布式系统中同时让所有节点都干一件事情的一个好的方式,如果用不到忽略广播消息即可
2.1.2 发送/消费的几种消息实体
- RocketMQ发送消息对于不同的使用来说,大部分选择下面的几种发送消息类型 A、发送Json对象,比如Fastjson的JSONObject B、直接发送转Json后的String对象 C、根据业务封装对应实体类 D、直接使用原生MessageExt接收
- 怎么选择?怎么选择才是最优? 上面哪一种都可以达到目的,如果要统一封装就必须要有一个标准 怎么选择只需要回答这个问题:在不看消息发送者的情况下,消费者怎么知道发送者发送的消息含义? 比如现在有一个订单消息,如果我们不看消息发送者,怎么知道发送者给消费者发送哪些字段 A、B、D可以吗?一定不可以!JSON对象和String对象,如果我们不看消息发送者不可能知道到底发送了啥,这点我相信没有可以讨论的地方,因为类型决定了这个操作不可能 C可以吗?可以!此时不需要看消息发送者,只需要看消费者的实体类点进去,有哪些业务字段一清二楚 可能有杠要抬了,有看实体类的功夫,我看消息发送者都看完了 灵魂拷问1:如果消息发送者和消费者不在一个系统怎么看?邪魅一笑,不同业务线可能没代码权限吧?分布式系统完全独立可能吧? 灵魂拷问2:如果现在需要一个功能,如果某些必须要的字段消息发送者如果没有给的话需要校验,普通String和JSONObject怎么实现?换成实体类呢?
推荐阅读
-
替李逵说句话:两天被出卖三次,鲁智深武松会不会变得冷血无情?
-
[人民的名义]终于等来《人民的名义》续集,男主虽换了人,但也让观众满意
-
独步四海| 尼泊尔男女多“开放”?大街上就敢做这事,游客:辣眼睛,
-
婚礼|原创热搜上的婚礼背后:“中国金王”陈景河发家史
-
-
iphone通讯录如何备份,很简单只需六个步骤就完成
-
起亚汽车|国产车迅猛崛起,韩系车首当其冲,起亚智跑几乎“半价销售”
-
「健康养身TB」枕头里放它,护脑血管一整晚,两病齐愈
-
宝莲灯|宝莲灯14年:沉香恋爱了,哮天犬成为影帝,而她自毁前程进了监狱
-
包装|嘉美包装:预计2020年前三季度净利润亏损800万元~1000万元,同比下降113%~116%
-
-
-
烹饪|秋天了,宁愿少吃猪肉也要多吃它,比肉便宜,还香,不懂吃可惜了
-
-
虎哥说衣不二|基础款也能低调有质感,短发妹子早秋怎么穿?韩国博主来教你
-
考研|同样是考研生,二本和一本的考研生有何不同?这5点不同很重要
-
IT之家|期待朋友们捧场,雷军:将办小米十周年主题演讲
-
机动车第三者责任险是什么意思包含医保外用药 机动车第三者责任险是什么意思
-
王谢|梦幻西游:14技能龙龟诞生,网传王谢在卖个性宠,这是要脱坑了?
-
潘玮柏|潘玮柏官宣结婚啦 女方是94年空姐 太突然了吧