提交 95b45696 编写于 作者: wu-sheng's avatar wu-sheng

1.修改发送机制,防止在服务端较少时,造成过多的压力。

上级 10f6f5c3
......@@ -2,30 +2,37 @@ package com.ai.cloud.skywalking.sender;
import static com.ai.cloud.skywalking.conf.Config.Sender.MAX_COPY_NUM;
import java.util.ArrayList;
import java.util.List;
import java.util.HashSet;
import java.util.Set;
/**
* 带副本的数据发送器
*
* @author wusheng
*
*/
public class DataSenderWithCopies implements IDataSender{
public class DataSenderWithCopies implements IDataSender {
private int maxCopyNum;
private List<IDataSender> senders = new ArrayList<IDataSender>();
public DataSenderWithCopies(int maxKeepConnectingSenderSize){
//最大副本数量,不能大于可用最大连接数
maxCopyNum = maxKeepConnectingSenderSize > MAX_COPY_NUM ? MAX_COPY_NUM: maxKeepConnectingSenderSize;
private Set<IDataSender> senders = new HashSet<IDataSender>();
public DataSenderWithCopies(int maxKeepConnectingSenderSize) {
// 最大副本数量,不能大于可用最大连接数
maxCopyNum = maxKeepConnectingSenderSize > MAX_COPY_NUM ? MAX_COPY_NUM
: maxKeepConnectingSenderSize;
}
/**
* 尝试增加到最大可用副本数,极端情况可能不足
*
* @param dataSender
* @return
*/
public boolean append(IDataSender dataSender){
public boolean append(IDataSender dataSender) {
// 出现重复sender,副本到达最大限度
if (senders.contains(dataSender)) {
return false;
}
senders.add(dataSender);
return senders.size() < maxCopyNum;
}
......@@ -35,14 +42,16 @@ public class DataSenderWithCopies implements IDataSender{
*/
public boolean send(String data) {
int successNum = 0;
for(IDataSender sender : senders){
if(sender.send(data)){
for (IDataSender sender : senders) {
if (sender.send(data)) {
successNum++;
}
}
if(successNum >= 2 || successNum >= maxCopyNum){
if (senders.size() == 1 && successNum == 1) {
return true;
} else if (successNum >= 2) {
return true;
}else{
} else {
return false;
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册