From 95b45696c88e1bc327aef4a102513bdbfaa3df6a Mon Sep 17 00:00:00 2001 From: wusheng Date: Tue, 22 Dec 2015 12:46:25 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E5=8F=91=E9=80=81=E6=9C=BA?= =?UTF-8?q?=E5=88=B6=EF=BC=8C=E9=98=B2=E6=AD=A2=E5=9C=A8=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=AB=AF=E8=BE=83=E5=B0=91=E6=97=B6=EF=BC=8C=E9=80=A0=E6=88=90?= =?UTF-8?q?=E8=BF=87=E5=A4=9A=E7=9A=84=E5=8E=8B=E5=8A=9B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sender/DataSenderWithCopies.java | 39 ++++++++++++------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderWithCopies.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderWithCopies.java index 045c1c55d..44fea4a0c 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderWithCopies.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSenderWithCopies.java @@ -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 senders = new ArrayList(); - - public DataSenderWithCopies(int maxKeepConnectingSenderSize){ - //最大副本数量,不能大于可用最大连接数 - maxCopyNum = maxKeepConnectingSenderSize > MAX_COPY_NUM ? MAX_COPY_NUM: maxKeepConnectingSenderSize; + + private Set senders = new HashSet(); + + 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; } }