rocketmq中可视化和池化

简介: rocketmq获取默认的MQAdminExt时候,需要进行对象的获取,主要在rocketmq可视化中,方便使用,池化作为一个循环利用的过程,其类似于我们常用的数据库连接池一样,节省启动的成本。同时MQAdminExt是作为二次开发的一个主要使用的类。

在rocketmq中rocketmqTool作为可视化和二次开发使用比较多的类org.apache.rocketmq.tools.admin.MQAdminExt,这个类在admin里面:


一、池化

在rocketmq中:

而我们知道创建rocketmq创建的过程中,会启动很多东西,这个连接的过程涉及到的内容比较多,可以看到rocketmq的rocketmq-dashboard和mqcloud里面都使用了池化技术-对象池。rocketmq-dashboard池化org.apache.rocketmq.dashboard.admin.MqAdminExtObjectPool:

@BeanpublicGenericObjectPool<MQAdminExt>mqAdminExtPool() {
GenericObjectPoolConfiggenericObjectPoolConfig=newGenericObjectPoolConfig();
genericObjectPoolConfig.setTestWhileIdle(true);
genericObjectPoolConfig.setMaxWaitMillis(10000);
genericObjectPoolConfig.setTimeBetweenEvictionRunsMillis(20000);
MQAdminPooledObjectFactorymqAdminPooledObjectFactory=newMQAdminPooledObjectFactory();
MQAdminFactorymqAdminFactory=newMQAdminFactory(rmqConfigure);
mqAdminPooledObjectFactory.setMqAdminFactory(mqAdminFactory);
GenericObjectPool<MQAdminExt>genericObjectPool=newGenericObjectPool<MQAdminExt>(
mqAdminPooledObjectFactory,
genericObjectPoolConfig);
returngenericObjectPool;
    }

同时进行借和还:

publicstaticvoidcreateMQAdmin(GenericObjectPool<MQAdminExt>mqAdminExtPool) {
try {
// Get the mqAdmin instance from the object poolMQAdminExtmqAdminExt=mqAdminExtPool.borrowObject();
MQ_ADMIN_EXT_THREAD_LOCAL.set(mqAdminExt);
        } catch (Exceptione) {
LOGGER.error("get mqAdmin from pool error", e);
        }
    }
publicstaticvoidreturnMQAdmin(GenericObjectPool<MQAdminExt>mqAdminExtPool) {
MQAdminExtmqAdminExt=MQ_ADMIN_EXT_THREAD_LOCAL.get();
if (mqAdminExt!=null) {
try {
// After execution, return the mqAdmin instance to the object poolmqAdminExtPool.returnObject(mqAdminExt);
            } catch (Exceptione) {
LOGGER.error("return mqAdmin to pool error", e);
            }
        }
MQ_ADMIN_EXT_THREAD_LOCAL.remove();
    }

同时mqcloud再次基础上做了自己的封装模板,方便每次调用的时候,进行回调:

@AutowiredprivateGenericKeyedObjectPool<Cluster, MQAdminExt>mqPool;
/*** 执行操作* @param callback* @return* @throws Exception*/public<T>Texecute(MQAdminCallback<T>callback) {
MQAdminExtmqAdmin=null;
try {
// 获取mqAdmin实例mqAdmin=mqPool.borrowObject(callback.mqCluster());
if(mqAdmin==null) {
logger.warn("cluster:{} cannot get mqadmin!", callback.mqCluster());
returnnull;
            }
// 触发回调Tt=callback.callback(mqAdmin);
returnt;
        } catch (Exceptione) {
try {
// 触发异常情况回调returncallback.exception(e);
            } catch (Exceptionex) {
logger.warn("cluster:{} exception err:{}", callback.mqCluster(), ex.getMessage());
returnnull;
            }
        } finally {
if(mqAdmin!=null) {
try {
mqPool.returnObject(callback.mqCluster(), mqAdmin);
                } catch (Exceptione) {
logger.warn("cluster:{} shutdown err:{}", callback.mqCluster(), e.getMessage());
                }
            }
        }
    }

解决了rocketmq实列对象的复用外,还需要知道rocketmq提供了哪些api可以进行扩展。


二、主要使用的api分类

mqClientInstance启动和关闭broker操作BrokerCluster操作PlainAccess操作GlobalWhiteAddr白名单topic主题操作SubscriptionGroup订阅组操作consume消费操作producer生产者操作Offset偏移量NameServer操作message操作subscription订阅task清理任务trace链路操作stat统计DefaultMQAdminExtImpl默认mqAdmin扩展实现

通过rocketmq-tool提供的api相关功能,我们可以进行rocketmq的mqAdmin扩展的启动、关闭,同时针对broker、producer、consume、offset、nameServer、message、trace相关操作和统计,同时触发task进行相关清理工作。


三、rocketmq-dashboard

在rocketmq-dashboard中,可以看到使用了它们的使用:

start启动getBrokerConfig获取broker配置examineBrokerClusterInfobrokerClusterInfo信息fetchBrokerRuntimeStats获取broker运行时统计信息viewMessage查看消息queryMessage查询消息messageTrackDetail链路详情consumeMessageDirectly直接消费消息examineConsumerConnectionInfo消费者连接信息examineProducerConnectionInfo生产者连接信息examineTopicStatsfetchAllTopicListfetchBrokerRuntimeStatsexamineConsumeStatsexamineTopicRouteInfogetNameServerAddressListwipeWritePermOfBroker.....

可以看到dashBoard基于rocketmq-tool模块,做了很多功能,而且这些功能都是可视化的。


相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
消息中间件 数据可视化 Java
Linxu下RocketMq及可视化界面的搭建
Linxu下RocketMq配置信息及可视化界面的搭建
707 0
|
7月前
|
消息中间件 数据可视化 RocketMQ
docker 安装 rocketmq可视化插件
docker 安装 rocketmq可视化插件
180 0
|
7月前
|
消息中间件 数据可视化 Shell
完美解决 RabbitMQ 可视化界面中 Overview 不显示图形的问题
完美解决 RabbitMQ 可视化界面中 Overview 不显示图形的问题
597 0
|
消息中间件 XML 存储
优秀的 RocketMQ 可视化管理工具 GUI 客户端
优秀的 RocketMQ 可视化管理工具 GUI 客户端
3220 1
|
消息中间件 存储 Prometheus
可视化界面工具可以用于管理和监控 Apache RocketMQ
可视化界面工具可以用于管理和监控 Apache RocketMQ
1989 3
|
消息中间件 存储 运维
消息队列 RabbitMQ 遇上可观测--业务链路可视化
本篇文章主要介绍阿里云消息队列 RabbitMQ 版的可观测功能。RabbitMQ 的可观测能力相对开源有了全面的加强,为业务链路保驾护航。
187 0
消息队列 RabbitMQ  遇上可观测--业务链路可视化
|
消息中间件 存储 Prometheus
消息队列 RocketMQ 遇上可观测:业务核心链路可视化
本篇文章主要介绍 RocketMQ 的可观测性工具在线上生产环境的最佳实践。RocketMQ的可观测性能力领先业界同类产品,RocketMQ 的 Dashboard 和消息轨迹等功能为业务核心链路保驾护航,有效应对线上大规模生产使用过程中遇到的容量规划、消息收发问题排查以及自定义监控等场景。
353 0
消息队列 RocketMQ  遇上可观测:业务核心链路可视化
|
消息中间件 数据可视化 Apache
docker 安装 rocketmq可视化插件
docker 安装 rocketmq可视化插件
586 0
docker 安装 rocketmq可视化插件
|
消息中间件 存储 Prometheus
消息队列 RocketMQ 遇上可观测:业务核心链路可视化
本篇文章主要介绍 RocketMQ 的可观测性工具在线上生产环境的最佳实践。RocketMQ的可观测性能力领先业界同类产品,RocketMQ 的 Dashboard 和消息轨迹等功能为业务核心链路保驾护航,有效应对线上大规模生产使用过程中遇到的容量规划、消息收发问题排查以及自定义监控等场景。
消息队列 RocketMQ 遇上可观测:业务核心链路可视化
|
消息中间件 数据可视化 Java
RocketMQ 可视化环境搭建和基础代码使用(下)
RocketMQ 可视化环境搭建和基础代码使用(下)
261 0
RocketMQ 可视化环境搭建和基础代码使用(下)