精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

RocketMQ控制臺消費者堆棧信息展示優化分析

開發 前端
在同一個程序中創建兩個不同Group ID的消費端實例,在控制臺中查看一個Group ID下單個消費端堆棧信息,堆棧信息中包含了兩個Group ID消費端的堆棧信息,給排查問題造成了困擾。

背景介紹

專有云企業版v_3_12,消息隊列RocketMQ控制臺->Group管理,查看Group ID下單個消費端堆棧信息,期望只展示與該Group ID相關的堆棧信息,在以下場景與期望不符。

場景介紹

在同一個程序中創建兩個不同Group ID的消費端實例,在控制臺中查看一個Group ID下單個消費端堆棧信息,堆棧信息中包含了兩個Group ID消費端的堆棧信息,給排查問題造成了困擾。

示例代碼

pom

<dependency>
<groupId>com.aliyun.openservices</groupId>
<artifactId>ons-client</artifactId>
<version>1.8.8.3.Final</version>
</dependency>

code

import com.aliyun.openservices.ons.api.Action;
import com.aliyun.openservices.ons.api.PropertyKeyConst;
import com.aliyun.openservices.ons.api.batch.BatchMessageListener;
import com.aliyun.openservices.ons.api.bean.BatchConsumerBean;
import com.aliyun.openservices.ons.api.bean.Subscription;

import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

public class Main {
public static void main(String[] args){
String nameSrvAddr = "xxx";
String accessKey = "xxx";
String secretKey = "xxx";
String groupId1 = "Goup_ID_1";
String topic1 = "xxx_1";
String tag1 = "xxx_1";
BatchMessageListener batchMessageListener1 = (messages, context) -> Action.CommitMessage;
BatchConsumerBean batchConsumerBean1 = batchConsumerBean(nameSrvAddr,accessKey,secretKey,
groupId1,topic1,tag1,batchMessageListener1);
batchConsumerBean1.start();

String groupId2 = "Goup_ID_2";
String topic2 = "xxx_2";
String tag2 = "xxx_2";
BatchMessageListener batchMessageListener2 = (messages, context) -> Action.CommitMessage;
BatchConsumerBean batchConsumerBean2 = batchConsumerBean(nameSrvAddr,accessKey,secretKey,
groupId2,topic2,tag2,batchMessageListener2);
batchConsumerBean2.start();
}

private static BatchConsumerBean batchConsumerBean(String nameSrvAddr,String accessKey,String secretKey,String groupId,String topic,String tag,BatchMessageListener batchMessageListener){
BatchConsumerBean batchConsumerBean = new BatchConsumerBean();
Properties properties = new Properties();
properties.put(PropertyKeyConst.NAMESRV_ADDR,nameSrvAddr);
properties.put(PropertyKeyConst.AccessKey,accessKey);
properties.put(PropertyKeyConst.SecretKey,secretKey);
properties.put(PropertyKeyConst.GROUP_ID,groupId);
batchConsumerBean.setProperties(properties);

Subscription subscription = new Subscription();
subscription.setTopic(topic);
subscription.setExpression(tag);
Map<Subscription, BatchMessageListener> subscriptionTable = new HashMap<>();
subscriptionTable.put(subscription,batchMessageListener);

batchConsumerBean.setSubscriptionTable(subscriptionTable);
return batchConsumerBean;
}
}

分析過程

首先分析示例代碼中與BatchConsumerBean相關聯的對象,然后分析控制臺展示消費端堆棧信息的流程,最后分析下不同版本的RocketMQ Client SDK對消費端消費線程命名方式的變化。

BatchConsumerBean

示例代碼中創建了兩個BatchConsumerBean實例,與BatchConsumerBean實例相關聯的對象如下:

與BatchConsumerBean關聯的對象

從上圖看,BatchConsumerBean實例是比較重的,所以上面的示例代碼可以優化為只創建一個BatchConsumerBean實例,與該問題不太相關,暫時忽略;
上圖中與該問題直接相關的是ClientRemotingProcessor、MQClientInstance、DefaultMQPushConsumerImpl、ConsumerStatsManager,下面繼續分析。

堆棧信息展示流程

下面描述的是在瀏覽器請求一個Group ID單個消費端堆棧信息的流程。

堆棧信息展示流程

瀏覽器請求控制臺應用

當在控制臺單機某個消費端堆棧信息的時候,瀏覽器會向控制臺應用發起http請求,主要請求參數是:
GroupID,ClientId,其中每個MQClientInstance實例對應一個ClientId。

控制臺應用請求Broker

控制臺應用收到瀏覽器請求后,主要進行以下操作:

String topic = MixAll.RETRY_GROUP_TOPIC_PREFIX + consumerGroup;
TopicRouteData topicRouteData = this.examineTopicRouteInfo(topic);
List<BrokerData> brokerDatas = topicRouteData.getBrokerDatas();
if (brokerDatas != null) {
for (BrokerData brokerData : brokerDatas) {
String addr = brokerData.selectBrokerAddr();
if (addr != null) {
return this.mqClientInstance.getMQClientAPIImpl().getConsumerRunningInfo(addr, consumerGroup, clientId, jstack,timeoutMillis * 3);
}
}
}
  1. 根據%RETRY% + GroupIID查找對應的TopicRouteData
  2. 從TopicRouteData中選擇一個Broker的地址發送getConsumerRunningInfo請求

Broker請求Consumer

Broker收到請求后,主要進行以下操作:

ClientChannelInfo clientChannelInfo = this.brokerController.getConsumerManager().findChannel(consumerGroup, clientId);
RemotingCommand newRequest = RemotingCommand.createRequestCommand(requestCode, null);
newRequest.setExtFields(request.getExtFields());
newRequest.setBody(request.getBody());
return this.brokerController.getBroker2Client().callClient(clientChannelInfo.getChannel(), newRequest);
  1. AdminBrokerProcessor響應查詢請求
  2. 根據GroupID和ClientId找到對應Consumer實例的channel socket
  3. 通過channel socket發送請求到Consumer實例

Consumer處理邏輯

Consumer收到請求后,主要進行以下操作:

ConsumerRunningInfo consumerRunningInfo = this.mqClientFactory.consumerRunningInfo(requestHeader.getConsumerGroup());
if (requestHeader.isJstackEnable()) {
Map<Thread, StackTraceElement[]> map = Thread.getAllStackTraces();
String jstack = UtilAll.jstack(map);
consumerRunningInfo.setJstack(jstack);
}
  1. 通過MQClientInstance實例請求Consumer實例的consumerRunningInfo方法獲取Consumer運行信息,如:pullRT、pullTPS、consumeRT、consumeOKTPS、consumeFailedTPS等信息
  2. 獲取JVM所有線程棧信息
  3. 將獲取到的ConsumerRunningInfo返回給Broker。

其中第2步【獲取JVM所有線程棧信息】就是我們需要查看的堆棧信息,目前控制臺主要展示了以ConsumeMessageThread__開頭的線程和RebalanceService線程,這塊期望只展示與該消費端相關的ConsumeMessageThread__線程和Rebalance線程,不期望將不相關的消費端線程也展示出來。

ConsumeMessageThread線程的命名

在當前版本中處理業務的消費者線程名的形式是:ConsumeMessageThread_數字,
ConsumeMessageConcurrentlyService類中相關代碼如下:

//該線程池用于處理業務邏輯
this.consumeExecutor = new ThreadPoolExecutor(
this.defaultMQPushConsumer.getConsumeThreadMin(),
this.defaultMQPushConsumer.getConsumeThreadMax(),
1000 * 60,
TimeUnit.MILLISECONDS,
this.consumeRequestQueue,
new ThreadFactoryImpl("ConsumeMessageThread_"));

新版本中線程的命名中增加了GroupId,相關代碼如下:

String consumeThreadPrefix = null;
if (consumerGroup.length() > 100) {
consumeThreadPrefix = new StringBuilder("ConsumeMessageThread_").append(consumerGroup, 0, 100).append("_").toString();
} else {
consumeThreadPrefix = new StringBuilder("ConsumeMessageThread_").append(consumerGroup).append("_").toString();
}
this.consumeExecutor = new ThreadPoolExecutor(
this.defaultMQPushConsumer.getConsumeThreadMin(),
this.defaultMQPushConsumer.getConsumeThreadMax(),
1000 * 60,
TimeUnit.MILLISECONDS,
this.consumeRequestQueue,
new ThreadFactoryImpl(consumeThreadPrefix));

線程名形式為:ConsumeMessageThread_GroupId__數字,從一定程度對以上問題進行了優化。

總結

  1. ONS SDK對RocketMQ Client進行了封裝,更加方便業務的使用,Consumer對象比較重,需要根據業務采用合理的初始化方式
  2. ConsumerStatsManager記錄了消費端的一些統計信息
  3. ConsumeMessageConcurrentlyService對消費端線程命名進行了優化?
責任編輯:武曉燕 來源: 今日頭條
相關推薦

2021-07-12 10:25:03

RocketMQ數據結構kafka

2022-07-07 09:00:49

RocketMQ消費者消息消費

2022-11-08 07:36:17

RocketMQ消費者消息堆積

2024-01-24 09:00:31

SSD訂閱關系內存

2024-04-22 00:00:00

RocketMQ優化位點

2022-03-30 08:40:00

JavaScript控制臺

2022-05-09 11:15:05

RocketMQPULL 模式PUSH 模式

2011-07-22 17:05:56

IOS 控制臺 GDB

2011-07-06 15:25:33

Windows控制臺

2023-06-01 08:08:38

kafka消費者分區策略

2015-08-26 09:39:30

java消費者

2010-12-21 14:32:43

操作控制臺

2022-03-14 11:05:01

RocketMQRedis緩存

2011-08-05 16:21:24

2011-07-22 16:25:38

CA TechnoloIT消費化

2009-08-13 13:14:31

C#生產者和消費者

2011-08-08 10:55:14

IOS 控制臺 Consol

2009-06-15 09:50:34

JBoss控制臺

2017-10-15 10:24:27

開發

2015-06-15 11:29:34

數據中心綠色數據中心
點贊
收藏

51CTO技術棧公眾號

婷婷综合另类小说色区| 蜜臀精品久久久久久蜜臀| 精品国产一区二区三区久久久蜜月| 99久久久精品视频| 婷婷在线免费视频| 日日夜夜免费精品视频| 超薄丝袜一区二区| 538国产视频| 亚洲青青久久| 欧美日韩免费在线观看| 一区二区三区视频在线播放| 国产 日韩 欧美 综合| 日本欧美一区二区三区乱码| 欧美高清视频在线| 成人性视频免费看| 欧美影院天天5g天天爽| 欧美一区二区三区视频免费播放| 国模无码视频一区二区三区| 黄网页免费在线观看| 91色综合久久久久婷婷| 91网站免费看| 在线视频精品免费| 99riav1国产精品视频| 日韩一区二区av| 成年人网站免费在线观看| 国产欧美视频在线| 在线视频欧美区| 国产青青在线视频| 伊人在我在线看导航| 久久精品人人做人人爽97| 国产精品久久久久久久久久直播| 中文字幕激情视频| 另类图片国产| 91国内在线视频| 国产一级在线播放| 欧美 亚欧 日韩视频在线 | 99在线观看免费| 首页综合国产亚洲丝袜| 国自在线精品视频| 欧美成欧美va| 你懂的视频一区二区| 日韩在线精品视频| 日韩福利在线视频| 亚洲伊人春色| 亚洲美女动态图120秒| 永久免费未满蜜桃| 国产精品18hdxxxⅹ在线| 91精品麻豆日日躁夜夜躁| 深夜黄色小视频| 成人a在线观看高清电影| 欧美日韩一区二区三区| 国产午夜福利100集发布| 成人高潮aa毛片免费| 亚洲精品免费看| 国产一级大片免费看| 在线三级电影| 亚洲一级二级在线| 成人免费在线网| 丰满大乳少妇在线观看网站| 一区二区高清视频在线观看| www.日本在线视频| 97天天综合网| 同产精品九九九| 精品国产乱码久久久久夜深人妻| 欧美magnet| 色婷婷久久综合| 无码内射中文字幕岛国片| 免费福利视频一区二区三区| 日本久久精品电影| 午夜视频你懂的| 男人天堂久久| 欧美一区二区三区性视频| 日本成人在线免费观看| 成人另类视频| 精品香蕉一区二区三区| 蜜臀久久99精品久久久久久| 久久精品国产68国产精品亚洲| 久久精品美女视频网站 | 樱花草国产18久久久久| 日韩亚洲欧美一区二区| aa级大片免费在线观看| 黑人巨大精品欧美一区二区三区 | 可以直接看的黄色网址| 欧美精品一卡| 啪一啪鲁一鲁2019在线视频| 中文字幕自拍偷拍| 国产成人免费av在线| 久久大片网站| 欧美激情午夜| 性做久久久久久久免费看| 国产极品美女高潮无套久久久| 成人一区视频| 欧美成人乱码一区二区三区| 极品粉嫩小仙女高潮喷水久久| 久久不卡国产精品一区二区| 久久天天躁狠狠躁夜夜躁2014| 国产成人精品亚洲男人的天堂| 久久久青草婷婷精品综合日韩| 国产一区深夜福利| 无码精品在线观看| 中文字幕日韩av资源站| www.玖玖玖| 91精品亚洲一区在线观看| 精品国产a毛片| 人妻互换一区二区激情偷拍| 狠狠干综合网| 国产日韩欧美在线看| 日韩一级片免费在线观看| 中文字幕av不卡| 亚洲精品蜜桃久久久久久| 狂野欧美性猛交xxxx| 亚洲精品国产精品国产自| 日本二区三区视频| 销魂美女一区二区三区视频在线| 亚洲一区二区三区在线视频| 麻豆导航在线观看| 亚洲国产wwwccc36天堂| 久久久久xxxx| 成人羞羞网站| 奇米4444一区二区三区| 亚洲欧美高清视频| 亚洲欧洲99久久| 一区二区在线播放视频| 麻豆一区二区麻豆免费观看| 久久国产视频网站| 91好色先生tv| 亚洲国产精品精华液ab| 久久久久久久久久久福利| 国产在线播放精品| 欧美大成色www永久网站婷| 中文字幕一区二区三区波野结| 2017欧美狠狠色| 久久久亚洲精品无码| 欧美欧美在线| 欧美老妇交乱视频| 一级做a爱片久久毛片| 欧美国产在线观看| 免费黄色一级网站| 国产亚洲电影| 国产成人精品免高潮费视频| 日本啊v在线| 欧美日韩在线视频首页| 日韩精品一区二区三区高清免费| 欧美午夜一区二区福利视频| 国产欧美日韩专区发布| 成人免费高清在线播放| 欧美制服丝袜第一页| 99精品欧美一区二区| 日韩精品国产欧美| 亚洲成人av动漫| 国产精品黄色片| www.欧美三级电影.com| 91精品国产乱码久久久| 国产精品卡一卡二卡三| 日韩在线不卡一区| 国产精品久久久久久麻豆一区软件| 国产自摸综合网| 中文字幕在线三区| 精品国内二区三区| 久久久久久91亚洲精品中文字幕| 久久综合九色欧美综合狠狠| 国产视频一区二区视频| 欧美在线色图| 成人黄色av播放免费| а天堂中文在线官网| 精品国产一区二区三区av性色| 国产一级中文字幕| 久久这里都是精品| 一本岛在线视频| 中文字幕午夜精品一区二区三区| av噜噜色噜噜久久| www.超碰在线| 中文字幕在线精品| 精品久久在线观看| 欧美性生交xxxxxdddd| 成人无码av片在线观看| 国内精品伊人久久久久av一坑| 四虎4hu永久免费入口| a级日韩大片| 国产精品扒开腿爽爽爽视频| 免费在线毛片网站| 亚洲精品99999| 亚洲视频中文字幕在线观看| 亚洲精品欧美二区三区中文字幕| 风韵丰满熟妇啪啪区老熟熟女| 亚洲综合不卡| 国产成人精品免费看在线播放| 97视频一区| 国产精品欧美日韩| 污污视频在线看| 国产一区二区三区欧美| 国产女同91疯狂高潮互磨| 韩曰欧美视频免费观看| 疯狂撞击丝袜人妻| 91亚洲精华国产精华精华液| 色乱码一区二区三区在线| 精品99视频| 一区二区三区四区视频在线| 欧美大片网址| 亚洲综合成人婷婷小说| 欧美大片免费| 久久人人爽人人爽人人片av高请 | 亚洲视频中文字幕| 91av在线免费| 国产成人综合视频| 在线观看av日韩| 亚洲福利一区| 宅男一区二区三区| 曰本一区二区三区视频| 国产91社区| 日韩毛片免费视频一级特黄| 欧美亚州一区二区三区| 综合久久2o19| 久久精品久久精品亚洲人| 欧美精品少妇| 亚洲精品电影网| www.久久成人| 欧美久久婷婷综合色| 怡红院av久久久久久久| 亚洲va欧美va天堂v国产综合| 欧美激情精品久久久久久免费| 久久精品夜色噜噜亚洲a∨| 老司机免费视频| 国产精品77777| 91小视频在线播放| 日韩精品欧美成人高清一区二区| 国产成人精品视频免费看| 国产在线日韩| 超碰97在线看| 91精品国产乱码久久久久久 | 免费网站免费进入在线| 亚洲少妇激情视频| 男生女生差差差的视频在线观看| 亚洲韩国青草视频| 人妻中文字幕一区| 日韩精品一区二| 性欧美8khd高清极品| 日韩一区二区免费在线电影| 一区二区www| 欧美日韩一区二区三区不卡| 中文字幕+乱码+中文| 91官网在线观看| 中文在线最新版天堂| 欧美性大战久久久久久久| 日韩精选在线观看| 欧美日韩一区二区三区在线 | 亚洲成人在线视频网站| 欧美色婷婷久久99精品红桃| 日韩欧美精品久久| 成人三级视频| 这里只有精品66| 亚洲电影影音先锋| 国产911在线观看| 欧美精品麻豆| 国产美女网站在线观看| 国产欧美一区二区色老头| 国产乱子伦农村叉叉叉| 一区二区三区国产盗摄| 北条麻妃69av| 免费欧美在线视频| 一级黄色片在线免费观看| 国产一区视频导航| 绯色av蜜臀vs少妇| 91小视频在线| 国产精品麻豆免费版现看视频| 一区在线观看视频| 麻豆changesxxx国产| 精品日本美女福利在线观看| 五月婷婷激情五月| 欧美丰满嫩嫩电影| 国产91久久久| 影音先锋欧美精品| 尤物在线网址| 91国内在线视频| 麻豆久久久久| 国产精品有限公司| 欧美色女视频| 日韩 欧美 视频| 日韩精品五月天| 制服.丝袜.亚洲.中文.综合懂| 99在线精品免费| 亚洲高潮女人毛茸茸| 亚洲综合一二三区| 久久久精品免费看| 欧美揉bbbbb揉bbbbb| 午夜精品一区二区三| 亚洲天堂网站在线观看视频| 国产一二区在线观看| 91精品国产色综合久久不卡98口| 69堂免费精品视频在线播放| 99久久无色码| 成人网18免费网站| 成人免费观看cn| 麻豆一区二区三| 亚洲av网址在线| 国产精品激情偷乱一区二区∴| 国产一级做a爰片在线看免费| 欧美视频精品在线观看| 亚洲伦理在线观看| 在线观看欧美成人| 九色91在线| 国产日韩欧美视频| 久久av影视| 国产成人艳妇aa视频在线 | 中文字幕人妻一区| 中文字幕巨乱亚洲| 国偷自拍第113页| 91精选在线观看| 国产中文字幕在线| 色综合天天综合网国产成人网| 国产经典一区| 精品免费一区二区三区蜜桃| 久久久久久美女精品| 日本成人在线免费视频| 国产91丝袜在线观看| 亚洲色图日韩精品| 日韩欧美在线观看| 日韩一级片免费在线观看| 久久久av网站| 久久国产三级| 午夜免费电影一区在线观看| 91久久夜色精品国产九色| 日本中文字幕在线不卡| 中文字幕在线不卡一区二区三区| 亚洲天堂av片| 亚洲精品动漫100p| 欧美激情网站| 精品久久久久久综合日本| 欧美精品国产一区| 一级黄色大片免费看| 日韩久久一区二区| 怡红院成永久免费人全部视频| 亚洲色图欧美制服丝袜另类第一页| 亚洲爱情岛论坛永久| 亚洲天堂福利av| 中文字幕免费高清网站| 日韩精品丝袜在线| 黑人精品视频| 97视频热人人精品| 精品一区二区三区的国产在线观看| www.99riav| 国产综合色视频| 精品国产大片大片大片| 色综合久久久久久久久久久| 无码国产伦一区二区三区视频 | 亚洲综合中文字幕在线| av一区二区在线观看| 国产精品天天av精麻传媒| 久久久夜色精品亚洲| 5858s免费视频成人| 中文字幕在线播放| 国产精品久久久久9999| 精品视频久久| 一本色道久久亚洲综合精品蜜桃 | 黄色片在线观看网站| 欧美一区二区三级| 欧美videos中文字幕| 日韩黄色一级视频| 亚洲三级av在线| free欧美| 永久免费精品视频网站| 精品一二三四区| av在线播放中文字幕| 91成人网在线| 97电影在线| 国产精品日韩在线观看| 91免费精品| 在线播放国产视频| 精品福利樱桃av导航| 黄色小视频在线免费观看| 国产精品久久91| 99精品网站| 一级少妇精品久久久久久久| 日本久久精品| 三级a在线观看| √…a在线天堂一区| 精品人妻一区二区三区麻豆91| 欧美极品xxxx| 欧美日韩国产传媒| 樱花草www在线| 亚洲高清免费视频| 国产精品一区在线看| 成人深夜直播免费观看| 在线欧美福利| 成人精品一二三区| 欧美成人猛片aaaaaaa| 成人免费网站视频| 日韩精品福利片午夜免费观看| 91丨九色丨蝌蚪富婆spa| 一级黄在线观看| 97精品欧美一区二区三区| 日本激情一区| 成人免费无码大片a毛片| 欧美日韩国产欧美日美国产精品| 日韩成人伦理| 亚洲日本精品| 91蝌蚪porny九色| aaa一区二区三区| 国产97在线|亚洲| 亚洲无线视频|