技术标签: rocketmq
AdminBrokerProcessor#processRequest#this.cleanExpiredConsumeQueue(ctx, request)
public RemotingCommand cleanExpiredConsumeQueue() {
log.warn("invoke cleanExpiredConsumeQueue start.");
final RemotingCommand response = RemotingCommand.createResponseCommand(null);
brokerController.getMessageStore().cleanExpiredConsumerQueue();
log.warn("invoke cleanExpiredConsumeQueue end.");
response.setCode(ResponseCode.SUCCESS);
response.setRemark(null);
return response;
}
public void cleanExpiredConsumerQueue() {
/**commitLog中获取最小的offset*/
long minCommitLogOffset = this.commitLog.getMinOffset();
/**获取缓存的topic消息队列*/
Iterator<Entry<String, ConcurrentMap<Integer, ConsumeQueue>>> it = this.consumeQueueTable.entrySet().iterator();
while (it.hasNext()) {
Entry<String, ConcurrentMap<Integer, ConsumeQueue>> next = it.next();
String topic = next.getKey();
if (!topic.equals(ScheduleMessageService.SCHEDULE_TOPIC)) {
ConcurrentMap<Integer, ConsumeQueue> queueTable = next.getValue();
/**获取该topic具体的消息队列*/
Iterator<Entry<Integer, ConsumeQueue>> itQT = queueTable.entrySet().iterator();
while (itQT.hasNext()) {
Entry<Integer, ConsumeQueue> nextQT = itQT.next();
/**获取消息队列的lastOffset*/
long maxCLOffsetInConsumeQueue = nextQT.getValue().getLastOffset();
if (maxCLOffsetInConsumeQueue == -1) {
log.warn("maybe ConsumeQueue was created just now. topic={} queueId={} maxPhysicOffset={} minLogicOffset={}.",
nextQT.getValue().getTopic(),
nextQT.getValue().getQueueId(),
nextQT.getValue().getMaxPhysicOffset(),
nextQT.getValue().getMinLogicOffset());
/**消息队列的lastOffset 小于 最小的offset说明过期*/
} else if (maxCLOffsetInConsumeQueue < minCommitLogOffset) {
log.info(
"cleanExpiredConsumerQueue: {} {} consumer queue destroyed, minCommitLogOffset: {} maxCLOffsetInConsumeQueue: {}",
topic,
nextQT.getKey(),
minCommitLogOffset,
maxCLOffsetInConsumeQueue);
/**根据topic和queueId删除topic和queue的offset*/
DefaultMessageStore.this.commitLog.removeQueueFromTopicQueueTable(nextQT.getValue().getTopic(),
nextQT.getValue().getQueueId());
nextQT.getValue().destroy();
/**删除消息队列元素*/
itQT.remove();
}
}
if (queueTable.isEmpty()) {
log.info("cleanExpiredConsumerQueue: {},topic destroyed", topic);
/**消息队列为空,移除该topic的消息队列信息*/
it.remove();
}
}
}
}
public void removeQueueFromTopicQueueTable(final String topic, final int queueId) {
String key = topic + "-" + queueId;
synchronized (this) {
this.topicQueueTable.remove(key);
}
log.info("removeQueueFromTopicQueueTable OK Topic: {} QueueId: {}", topic, queueId);
}
文章浏览阅读1.3k次。项目目录如下启动类如下import org.eclipse.paho.client.mqttv3.MqttException;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.boot.autoconfigure.SpringBootApplicatio_springboot mtqq demo
文章浏览阅读3.3w次,点赞10次,收藏66次。Linux中的popen()函数可以在程序中执行一个shell命令,并返回命令执行的结果。有两种操作模式,分别为读和写。在读模式中,程序中可以读取到命令的输出,其中有一个应用就是获取网络接口的参数。在写模式中,最常用的是创建一个新的文件或开启其他服务等。头文件:#include 函数原型:FILE *popen(const char *command, const char *type_c popen函数 resource temporarily unavailable
文章浏览阅读323次。大周跟很多新手小伙伴一样,都是从一个什么都不懂的小白,一步一步走到今天的,也遇到过各种各样的问题,坚持下去你就能赢。前期做得比较多,现在每天不去操作,也能有100-200的稳定收益,所以说做短视频自媒体是越到后期越赚钱的,新手小伙伴们完全可以去尝试操作,不要害怕失败。我们前期的收益主要来源与播放量的收益,就是平台给的广告分成,粉丝用户看你的短视频作品时下方会有下拉广告,所以说你的收益是与播放量挂钩的。新手小白经常会出现作品被下架、扣分和重复度过高的问题,导致没有收益或被封号,今天大周分享几个我常用的小_每天200百条视频怎么做
文章浏览阅读4.9k次。逻辑:String url = "http://www.baidu.com";//将要访问的url字符串放入HttpPost中HttpPost httpPost = new HttpPost(url);//请求头 放置一些修改http请求头和cookiehttpPost.setHeader("Accept", "application/json");......//如果_httpput putrequest = new httpput
文章浏览阅读971次,点赞17次,收藏18次。设置步骤:点击需要报警的变量后面的【报警】→【新增】→填写报警信息与条件→【确定】。【寄存器类型】:在施耐德M340 PLC中,离散量的输入输出使用的是%M地址,模拟量使用的是%MW地址(Modbus寄存器对应关系可以参考下面案例的采集变量对照表)。步骤:点击【后台管理】(只有管理账号才有此权限)→【设备中心】→【EG设备管理】→【+新增】→填写设备信息→点击【保存】。Modbus参数设置完成后,把修改好的程序下载到PLC中,再打开【应用程序树】,点击【GVL】,将变量进行修改。
文章浏览阅读5.9k次,点赞2次,收藏7次。这个系列是关于天津大学宋凯教授的《合成生物学导论》的学习笔记,将对合成生物学的概念、合成生物系统的设计、数学模拟与性能分析以及合成生物学基础与应用研究进行一个概括性记述,目的主要是通过合成生物学这个前沿方向了解学科交叉融合现状与方法以及掌握一些工程性方法与思路。1. 合成生物学的诞生:1953年,克里克和沃森发现了DNA双螺旋结构、开始了解读生物遗传密码的第一步;2003年,人类基因组计划..._如何理解合成生物学的层级结构?
文章浏览阅读3.7w次,点赞4次,收藏17次。目前的 暂时解决办法是,1. 打开 Edge浏览器,--设置2. 点击左上角 设置--默认浏览器3. Internet Explorer模式页面--添加 ‘自己需要IE浏览器打开的网址’,然后 就会在 Edge中,再次打开网址尝试;(次模式 会保存30天,30天后需 再次操作)..._res://ieframe.dll
文章浏览阅读1.9w次。如果是非生产环境,容器数据库CDB 这功能还可以。但是,如果生产使用CDB,也可以,但是感觉很鸡肋,一般上生产的,最好为非CDB 数据库。1, CDB 容器数据2, PDB 可插拔式数据库3,根容器 CDB$ROOT4, 种子可插拔数据库 PDB$SEED5, 克隆,通过 种子库(pdb$seed 不能修改,只读),pdb库,非CDB库,创建可插拔数据库。6,非CDB,ORACLE12C 没有创建..._oracle fcpsb
文章浏览阅读347次。PHP版本5引入了SimpleXML,SimpleXML是一种用于读写XML的新应用程序编程接口(API)。 在SimpleXML中,表达式如下: $doc->rss->channel->item->title 从文档中选择元素。 只要您对文档的结构有所了解,这些表达式就很容易编写。 但是,如果您不确切知道感兴趣的元素出现在何处(例如Docbook,HTML和类似的叙..._php simplexml
文章浏览阅读594次。方法:1、在body中使用link、alink、vlink属性来设置其他颜色,例“”。2、先使用“:link”、“:visited”、“:active”选择器选中a元素;然后使用color属性设置其他颜色。本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。为了突出超链接,超链接文字通常采用与其他文字不同的颜色,超链接文字的下端还会加一条横线。网页的..._php的href颜色
文章浏览阅读1.8k次,点赞3次,收藏31次。Source Insight是一个面向项目开发的程序编辑器和代码浏览器,它拥有内置的对C/C++,C#和Java等程序的分析。能分析源代码并在工作的同时动态维护它自己的符号数据库,并自动显示有用的上下文信息。Options->Key Assignments 进入快捷键设置界面,找到自己想要设置的命令。如下图所示选择“Exit”命令,可以看到系统默认的快捷键是“Alt+F4”。_cppcheck在sourceinsight上使用
文章浏览阅读1.8k次。WebSocket是目前比较成熟的技术了,WebSocket协议为创建客户端和服务器端需要实时双向通讯的webapp提供了一个选择。其为HTML5的一部分,WebSocket相较于原来开发这类app的方法来说,其能使开发更加地简单。大部分现在的浏览器都支持WebSocket,比如Firefox,IE,Chrome,Safari,Opera,并且越来越多的服务器框架现在也同样支持WebSocket。在实际的生产环境中,要求多个WebSocket服务器必须具有高性能和高可用,那么WebSocket协议就需要_elang启用websocket