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的事件能第一时间通…

基于SOA的体系架构设计

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

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

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

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

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

回顾模块3

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

mysql decode encode 乱码问题

mysql decode encode 乱码问题 帮网友解决了一个问题&#xff0c;感觉还是挺好的。 问题是这样的&#xff1a; 问个问题&#xff1a;为什么我mysql中加密和解密出来的字段值不一样&#xff1f;AES_ENCRYPT和 AES_DECRYPT 但是解密出来就不对了 有时候加密变成空值 我试过&am…

matlab读取正则找科学,MATLAB常用正则表达式记录

MATLAB正则表达式一、正则表达式正则表达式是一串用于定义某种模式的字符。在有些情况下(例如&#xff0c;在解析程序输入或处理文本块时)&#xff0c;您通常会使用正则表达式在文本中搜索与该模式匹配的一组单词。数据处理是matlab的长项&#xff0c;但是正则表达式在做一些不…

通过JDBC进行简单的增删改查(以MySQL为例)

目录 前言&#xff1a;什么是JDBC 一、准备工作&#xff08;一&#xff09;&#xff1a;MySQL安装配置和基础学习 二、准备工作&#xff08;二&#xff09;&#xff1a;下载数据库对应的jar包并导入 三、JDBC基本操作 (1)定义记录的类&#xff08;可选&#xff09; (2)连接的获…

Windows Mobile 6.0下实现自绘多种状态按钮(Win32) 续

这篇文章是以前的补充&#xff1a; http://www.cnblogs.com/wangkewei/archive/2009/02/24/1397490.html 放在首页是想借助各位从事Windows Mobile本地代码开发的前辈们力量&#xff0c;把这方面的资料完善一下&#xff0c;我会总结更多有关这方面的文章。 1.原理介绍DRAWITE…

新书品读《三级网络技术预测试卷与考点解析》,欢迎拍砖、跟砖提建议。

新书品读&#xff1a;《三级网络技术预测试卷与考点解析》已正式出版上市&#xff0c;欢迎拍砖、跟砖提建议。第1章 考前预测试卷11.1 上午试题&#xff08;考试时间120分钟&#xff0c;满分100分&#xff09;1.1.1 笔试试卷一、选择题&#xff08;每小题1分&#xff0c;共60…

PHP外部引用样式,PHP引用外部css有什么好处

PHP引用外部css的好处有&#xff1a;1、网页处理速度会更快一些&#xff1b;2、可以防止一些电脑程度较低的使用者直接看到CSS语法&#xff1b;3、维护方便。PHP引用外部css有什么好处&#xff1f;php页面外部调用css样式表时有三处优点&#xff1a;第一个好处&#xff1a;网页…