言尽于此,完结
无论是一个初级的 coder,高级的程序员,还是顶级的系统架构师,应该都有深刻的领会到设计模式的重要性。
- 第一,设计模式能让专业人之间交流方便,如下:
程序员A:这里我用了XXX设计模式
程序员B:那我大致了解你程序的设计思路了
- 第二,易维护
项目经理:今天客户有这样一个需求…
程序员:明白了,这里我使用了XXX设计模式,所以改起来很快
- 第三,设计模式是编程经验的总结
程序员A:B,你怎么想到要这样去构建你的代码
程序员B:在我学习了XXX设计模式之后,好像自然而然就感觉这样写能避免一些问题
- 第四,学习设计模式并不是必须的
程序员A:B,你这段代码使用的是XXX设计模式对吗?
程序员B:不好意思,我没有学习过设计模式,但是我的经验告诉我是这样写的
从设计思想解读开源框架,一步一步到Spring、Spring5、SpringMVC、MyBatis等源码解读,我都已收集整理全套,篇幅有限,这块只是详细的解说了23种设计模式,整理的文件如下图一览无余!
搜集费时费力,能看到此处的都是真爱!
sh ./mqadmin // 该命令会罗列所支持的运维命令列表即概要说明,如下图所示:
看到曙光了,接下来先简单介绍一下官方提供的命令与使用详解。
1.1 producerConnection概述
其参数说明如下:
-
-n name server 服务器地址
-
-g
生产者组名称
- -t
topic名称,值得说明的是这个topic的作用并不是必须传入生产者组对应的消息发送topic,而是用于路由寻址,即该命令需要发送到哪些Broker上执行。
基本的使用示例如下:
输出列依次为序号、客户端ID(clientId)、客户端IP与端口号、客户端语言、客户端版本。
上述功能非常实用,但在实际的使用过程中,特别是开源版本的MQ,生产者组的概念比较弱化,在运维层面也不向消费者组这样可管控,故这个命令中的 -g 参数,其实在实际过程中要统一采集就变的非常困难,而且RocketMQ并没有提供一个获取所有生产者组的功能,从而无法通过脚本化语言迅速提取相关信息。
在介绍如何解决该问题后,我们继续看一下获取消费组相关的信息。
1.2 consumerConnection概述
通过consumerConnection可以获取消费组的相关信息,其使用示例如下:
由于消费组在实际生产中都会加以控制,并且是可运维的(可以关闭自动创建消费组,项目组只有申请后才可使用),并且尽管rocketmq同样没有提供获取消费组列表的命令,但提供了对应的API。
可以通过rocketmq-console中提供的命令,获取所有的消费组列表,然后遍历并依次通过命令提取消费组的详情,从而可以得知当前集群所有的客户端连接方式,对兼容性缩写测试范围打下坚实基础。
通过上面的介绍得知由于开源版本的RocketMQ弱化了生产者组(Producer Group)的概念,目前只有在事务消息时会被使用到,故在实际生产实践过程中发现无法实现对生产者组进行强管控,比较难获取集群中当前所有的生产者信息。
为了解决版本升级需要进行兼容性测试缩写测试范围的问题,我们希望能够有一个运维命令,能够获取当前集群中所有的客户端连接信息。
那我们能否定制化一个运维命令实现获取所有生产者的连接信息,既然官方提供了producerConnection命令获取单个生产者组信息,服务端应该是会存储所有生产者组的连接信息,只是官方没有提供相关的命令而已,为了验证,我们可以去看一下producerConnection命令在服务端的处理逻辑。
从服务端代码可知,在服务端会使用一个Map存储所有的生产者客户端连接,其键为生产者组名称,其值为Map键值对(通道对象(Channel),客户端信息(ClientChannelInfo)),其中客户端信息就包含了客户端ID,客户端使用的语言以及版本等信息。
经过上面分析,实现一个获取全部生产者连接信息将变得非常简单。
本文由于篇幅问题,不展示全部代码,主要总结一下开发一个RocketMQ的几个核心步骤,代码已提交到github仓库:
链接:https://github.com/apache/rocketmq/pull/2940
首先我们看一下该命令在IDEA中的测试效果,运行命令如下:
命令运行输出为:
打包部署后命令的使用说明如下:
其中-b broker地址与-c cluster集群名称两个参数二选一,主用用于路由。
最后
由于文案过于长,在此就不一一介绍了,这份Java后端架构进阶笔记内容包括:Java集合,JVM、Java并发、微服务、SpringNetty与 RPC 、网络、日志 、Zookeeper 、Kafka 、RabbitMQ 、Hbase 、MongoDB、Cassandra 、Java基础、负载均衡、数据库、一致性算法、Java算法、数据结构、分布式缓存等等知识详解。
本知识体系适合于所有Java程序员学习,关于以上目录中的知识点都有详细的讲解及介绍,掌握该知识点的所有内容对你会有一个质的提升,其中也总结了很多面试过程中遇到的题目以及有对应的视频解析总结。
)]