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

This commit is contained in:
wusheng 2015-12-22 12:46:25 +08:00
parent 10f6f5c3d3
commit 95b45696c8
1 changed files with 24 additions and 15 deletions

View File

@ -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{
} else if (successNum >= 2) {
return true;
} else {
return false;
}
}