MQFaultStrategy主要是用来规划消息发送时的延迟策略

 这个类主要是用来规划消息发送时的延迟策略


package com.aliyun.openservices.shade.com.alibaba.rocketmq.client.latency;import com.aliyun.openservices.shade.com.alibaba.rocketmq.client.impl.producer.TopicPublishInfo;
import com.aliyun.openservices.shade.com.alibaba.rocketmq.client.log.ClientLogger;
import com.aliyun.openservices.shade.com.alibaba.rocketmq.common.message.MessageQueue;
import com.aliyun.openservices.shade.com.alibaba.rocketmq.logging.InternalLogger;public class MQFaultStrategy {private static final InternalLogger log = ClientLogger.getLog();private final LatencyFaultTolerance<String> latencyFaultTolerance = new LatencyFaultToleranceImpl();private boolean sendLatencyFaultEnable = false;private long[] latencyMax = new long[]{50L, 100L, 550L, 1000L, 2000L, 3000L, 15000L};private long[] notAvailableDuration = new long[]{0L, 0L, 30000L, 60000L, 120000L, 180000L, 600000L};public MQFaultStrategy() {}public long[] getNotAvailableDuration() {return this.notAvailableDuration;}public void setNotAvailableDuration(long[] notAvailableDuration) {this.notAvailableDuration = notAvailableDuration;}public long[] getLatencyMax() {return this.latencyMax;}public void setLatencyMax(long[] latencyMax) {this.latencyMax = latencyMax;}public boolean isSendLatencyFaultEnable() {return this.sendLatencyFaultEnable;}public void setSendLatencyFaultEnable(boolean sendLatencyFaultEnable) {this.sendLatencyFaultEnable = sendLatencyFaultEnable;}public MessageQueue selectOneMessageQueue(TopicPublishInfo tpInfo, String lastBrokerName) {if (this.sendLatencyFaultEnable) {try {int index = tpInfo.getSendWhichQueue().getAndIncrement();int i = 0;while(true) {int writeQueueNums;MessageQueue mq;if (i >= tpInfo.getMessageQueueList().size()) {String notBestBroker = (String)this.latencyFaultTolerance.pickOneAtLeast();writeQueueNums = tpInfo.getQueueIdByBroker(notBestBroker);if (writeQueueNums > 0) {mq = tpInfo.selectOneMessageQueue();if (notBestBroker != null) {mq.setBrokerName(notBestBroker);mq.setQueueId(tpInfo.getSendWhichQueue().getAndIncrement() % writeQueueNums);}return mq;}this.latencyFaultTolerance.remove(notBestBroker);break;}writeQueueNums = Math.abs(index++) % tpInfo.getMessageQueueList().size();if (writeQueueNums < 0) {writeQueueNums = 0;}mq = (MessageQueue)tpInfo.getMessageQueueList().get(writeQueueNums);if (this.latencyFaultTolerance.isAvailable(mq.getBrokerName()) && (null == lastBrokerName || mq.getBrokerName().equals(lastBrokerName))) {return mq;}++i;}} catch (Exception var7) {log.error("Error occurred when selecting message queue", var7);}return tpInfo.selectOneMessageQueue();} else {return tpInfo.selectOneMessageQueue(lastBrokerName);}}public void updateFaultItem(String brokerName, long currentLatency, boolean isolation) {if (this.sendLatencyFaultEnable) {long duration = this.computeNotAvailableDuration(isolation ? 30000L : currentLatency);this.latencyFaultTolerance.updateFaultItem(brokerName, currentLatency, duration);}}private long computeNotAvailableDuration(long currentLatency) {for(int i = this.latencyMax.length - 1; i >= 0; --i) {if (currentLatency >= this.latencyMax[i]) {return this.notAvailableDuration[i];}}return 0L;}
}

 


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[原创]Zenoss配置入门-邮件短信通知

前言&#xff1a;Zenoss提供了强大的事件告警通知功能&#xff0c;它提供两种方式&#xff0c;Email和pages(短信还是BB机&#xff1f;&#xff09;。Email实时性不强&#xff0c;Pages又不知道怎么去配置&#xff0c;可能需要短信网关之类的吧。如何让zenoss的事件能第一时间通…

img=img%3e128 matlab,Matlab中一般的数值计算和使用

前言Matlab中的计算可以分为符号计算和数值计算前面所讲的都是数值计算,今天我们来讲关于符号计算符号计算的第一步就是定义符号syms a,b,c %定义多个符号变量a,b,csym(a) %定义单个符号变量一些常用的函数limitlimit(f):x趋于0时,函数f(x)的极限limit(f,x,a)或limit(f,a) :x趋…

spring boot 读取 application.properties 初始化bean

application.properties bean1.hello 你好~bean2.name name bean2.title titlebean3.info[name] name bean3.info[title] title bean3.info[age] agebean4.info[0] name0 bean4.info[1] name1 bean4.info[2] name2 bean4.info[3] name3BeanController Rest…

基于SOA的体系架构设计

当我在为全球酒店在线预订系统做架构设计时&#xff0c;我发现一个头疼的问题是如何保证系统与分布在全球各地的酒店之间完成消息的交互&#xff1f; 一个妥协的办法是&#xff0c;我们为酒店管理者提供管理功能入口&#xff0c;管理人员可以将酒店的客房及客房类型的数据输入到…

k8s pod MySQL环境变量,如何使用Kubernetes的configmap通过环境变量注入到pod里

在Kubernetes官网里&#xff0c;有这样一篇文章&#xff0c;提到了Kubernetes里的一个最佳实践就是把应用代码同配置信息分开&#xff0c;一种方式就是使用Kubernetes 1.2里引入的configmap概念。configmap实际上就是一系列键值对&#xff0c;存储于etcd里。etcd的官网有这样一…

将tomcat添加到服务中

转载自&#xff1a;http://blog.csdn.net/zjd934784273/article/details/47701011&#xff08;windows&#xff09; &#xff1a;http://www.cnblogs.com/ilahsa/p/linux.html(linux) (windows)一定要以管理员的身份启动cmd dos窗口进行操作如何将解压缩版的tomcat加入windows系…

软件开发者面试百问

想雇到搞软件开发的聪明人可不容易。万一一不小心&#xff0c;就会搞到一堆低能大狒狒。我去年就碰到这种事了。你肯定不想这样吧。听我的&#xff0c;没错。在树上开站立会议门都没有。问点有难度的问题能帮你把聪明人跟狒狒们分开。我决定把我自己整理出来的软件开发者面试百…

matlab模糊推理,模糊推理系统的matlab代码

【实例简介】该文件包中包含了6个文件&#xff0c;分别为不同的模糊推理系统&#xff0c;主要是用matlab编写的【实例截图】【核心代码】fuzzy└── fuzzy├── 158113737anfisExample_book-│ ├── anfisExample_book.m│ └── ANFIS.pdf├── 794830365fuzzpid│ …

编译原理 实例

http://www.cnblogs.com/nzhl/category/824732.html转载于:https://www.cnblogs.com/zengkefu/p/7337226.html

你不了解PHP的10件事情

你不了解PHP的10件事情,转自http://www.ccvita.com/302.html 看到有人翻译的《10 things you (probably) didn’t know about PHP》&#xff0c;发现在此次之前2、8两条并不知道&#xff0c;1、3虽然熟知但是去没有实际应用。由于阅读本blog的绝大多数朋友都是有PHP基础的&…

Node mysql

const mysql require("mysql");var conn mysql.createConnection({ host:"127.0.0.1", user:root, password:, database:jd, port:3306});//2:发送sql//conn.query("INSERT INTO jd_user VALUES(null,?,?)",[tom,123],(err,result)>{ //i…

matlab中提取裂缝图像,灰度图像中裂缝自动识别和检测方法与流程

本发明属于测绘科学与图像处理的交叉领域&#xff0c;特别是涉及一种灰度图像中裂缝自动识别和检测方法。主要应用于桥墩表面裂缝自动识别和检测&#xff0c;也可应用于隧道衬砌、大坝表面的裂缝检测和识别。背景技术&#xff1a;桥墩在使用过程中在载荷和自然环境的共同作用下…

出师表《80后传》

出师表《80后传》 夫80后者&#xff0c; 初从文&#xff0c; 未及义务教育之免费&#xff0c; 不见高等学校之分配&#xff0c; 适值扩招&#xff0c; 过五关&#xff0c; 斩六将&#xff0c; 硕博相继&#xff0c; 寒窗数载&#xff0c; 二十四乃成&#xff0c; 负债十万。 觅…

回顾模块3

1 回顾模块32 3 4 静态方法5 与类无关&#xff0c;不能访问类里的任何属性和方法6 类方法7 只能访问类变量8 属性property9 把一个方法变成一个静态属性&#xff0c;10 flight.status11 status.setter12 flight.status 313 status.delter14 反射1…

matlab信号频率分析实验报告,信号抽样实验报告

大连理工大学实验报告学院(系)&#xff1a; 专业&#xff1a; 班级&#xff1a;姓 名&#xff1a; 学号&#xff1a; 组&#xff1a; ___ 实验时间&#xff1a; 实验室&#xff1a; 实验台&#xff1a;指导教师签字&#xff1a; 成绩&#xff1a;实验三 信号抽样一、实验目的1 …

VMware演示手机虚拟化

在今天的戛纳VMworld Europe 2009大会上&#xff0c;VMware展示了其开发的手机虚拟化技术&#xff0c;首次在同一台手机上同时运行两种操作系统。VMware企业桌面平台及方案部门主管Jerry Chen在会上现场演示了公司的移动虚拟化平台&#xff08;MVP&#xff09;&#xff0c;在诺…