Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
javalover123888
SkyWalking
提交
f9bee8c4
S
SkyWalking
项目概览
javalover123888
/
SkyWalking
与 Fork 源项目一致
Fork自
山不在高_有仙则灵 / SkyWalking
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
SkyWalking
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f9bee8c4
编写于
2月 25, 2017
作者:
wu-sheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Refactor codes to a new style. All the refactors are based on the new WorkerSelector.
上级
aca66aec
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
102 addition
and
49 deletion
+102
-49
skywalking-collector/skywalking-collector-actor/src/main/java/com/a/eye/skywalking/collector/actor/AbstractWorker.java
.../com/a/eye/skywalking/collector/actor/AbstractWorker.java
+8
-4
skywalking-collector/skywalking-collector-actor/src/main/java/com/a/eye/skywalking/collector/actor/AbstractWorkerProvider.java
...ye/skywalking/collector/actor/AbstractWorkerProvider.java
+5
-6
skywalking-collector/skywalking-collector-actor/src/main/java/com/a/eye/skywalking/collector/actor/router/RandomRouter.java
...a/eye/skywalking/collector/actor/router/RandomRouter.java
+0
-20
skywalking-collector/skywalking-collector-actor/src/main/java/com/a/eye/skywalking/collector/actor/router/RollingSelector.java
...ye/skywalking/collector/actor/router/RollingSelector.java
+35
-0
skywalking-collector/skywalking-collector-actor/src/main/java/com/a/eye/skywalking/collector/actor/router/WorkerRouter.java
...a/eye/skywalking/collector/actor/router/WorkerRouter.java
+0
-12
skywalking-collector/skywalking-collector-actor/src/main/java/com/a/eye/skywalking/collector/actor/router/WorkerSelector.java
...eye/skywalking/collector/actor/router/WorkerSelector.java
+24
-0
skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/cluster/NoAvailableWorkerException.java
...walking/collector/cluster/NoAvailableWorkerException.java
+15
-0
skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/cluster/WorkersRefCenter.java
.../a/eye/skywalking/collector/cluster/WorkersRefCenter.java
+15
-7
未找到文件。
skywalking-collector/skywalking-collector-actor/src/main/java/com/a/eye/skywalking/collector/actor/AbstractWorker.java
浏览文件 @
f9bee8c4
package
com.a.eye.skywalking.collector.actor
;
import
akka.actor.ActorRef
;
import
akka.actor.UntypedActor
;
import
akka.cluster.ClusterEvent
;
import
akka.cluster.Member
;
import
akka.cluster.MemberStatus
;
import
com.a.eye.skywalking.collector.actor.router.Worker
Route
r
;
import
com.a.eye.skywalking.collector.actor.router.Worker
Selecto
r
;
import
com.a.eye.skywalking.collector.cluster.WorkerListenerMessage
;
import
com.a.eye.skywalking.collector.cluster.WorkersListener
;
import
com.a.eye.skywalking.collector.cluster.WorkersRefCenter
;
import
java.util.List
;
/**
* @author pengys5
*/
public
abstract
class
AbstractWorker
extends
UntypedActor
{
public
abstract
class
AbstractWorker
<
T
>
extends
UntypedActor
{
final
String
workerRole
;
...
...
@@ -38,8 +41,9 @@ public abstract class AbstractWorker extends UntypedActor {
}
}
public
void
tell
(
String
workerRole
,
WorkerRouter
router
,
Object
message
)
throws
Throwable
{
router
.
find
(
workerRole
).
tell
(
message
,
getSelf
());
public
void
tell
(
AbstractWorkerProvider
targetWorkerProvider
,
WorkerSelector
selector
,
T
message
)
throws
Throwable
{
List
<
ActorRef
>
avaibleWorks
=
WorkersRefCenter
.
INSTANCE
.
avaibleWorks
(
targetWorkerProvider
.
roleName
());
selector
.
select
(
targetWorkerProvider
.
roleName
(),
avaibleWorks
,
message
).
tell
(
message
,
getSelf
());
}
void
register
(
Member
member
)
{
...
...
skywalking-collector/skywalking-collector-actor/src/main/java/com/a/eye/skywalking/collector/actor/AbstractWorkerProvider.java
浏览文件 @
f9bee8c4
...
...
@@ -9,16 +9,11 @@ import com.a.eye.skywalking.api.util.StringUtil;
*/
public
abstract
class
AbstractWorkerProvider
{
public
abstract
String
workerRole
();
public
abstract
Class
workerClass
();
public
abstract
int
workerNum
();
public
void
createWorker
(
ActorSystem
system
)
{
if
(
StringUtil
.
isEmpty
(
workerRole
()))
{
throw
new
IllegalArgumentException
(
"cannot createWorker() with nothing obtained from workerRole()"
);
}
if
(
workerClass
()
==
null
)
{
throw
new
IllegalArgumentException
(
"cannot createWorker() with nothing obtained from workerClass()"
);
}
...
...
@@ -27,7 +22,11 @@ public abstract class AbstractWorkerProvider {
}
for
(
int
i
=
1
;
i
<=
workerNum
();
i
++)
{
system
.
actorOf
(
Props
.
create
(
workerClass
(),
workerRole
()),
workerRol
e
()
+
"_"
+
i
);
system
.
actorOf
(
Props
.
create
(
workerClass
(),
roleName
()),
roleNam
e
()
+
"_"
+
i
);
}
}
protected
String
roleName
(){
return
workerClass
().
getSimpleName
();
}
}
skywalking-collector/skywalking-collector-actor/src/main/java/com/a/eye/skywalking/collector/actor/router/RandomRouter.java
已删除
100644 → 0
浏览文件 @
aca66aec
package
com.a.eye.skywalking.collector.actor.router
;
import
akka.actor.ActorRef
;
import
com.a.eye.skywalking.collector.cluster.WorkersRefCenter
;
import
java.util.List
;
import
java.util.Random
;
/**
* @author pengys5
*/
public
class
RandomRouter
implements
WorkerRouter
{
@Override
public
ActorRef
find
(
String
workerRole
)
{
int
workerNum
=
WorkersRefCenter
.
INSTANCE
.
sizeOf
(
workerRole
);
Random
random
=
new
Random
(
workerNum
);
return
WorkersRefCenter
.
INSTANCE
.
find
(
workerRole
,
random
.
nextInt
());
}
}
skywalking-collector/skywalking-collector-actor/src/main/java/com/a/eye/skywalking/collector/actor/router/RollingSelector.java
0 → 100644
浏览文件 @
f9bee8c4
package
com.a.eye.skywalking.collector.actor.router
;
import
akka.actor.ActorRef
;
import
com.a.eye.skywalking.collector.actor.AbstractWorker
;
import
java.util.List
;
/**
* The <code>RollingSelector</code> is a simple implementation of {@link WorkerSelector}.
* It choose {@link ActorRef} nearly random, by round-robin.
*
* @author wusheng
*/
public
enum
RollingSelector
implements
WorkerSelector
<
Object
>
{
INSTANCE
;
/**
* A simple round variable.
*/
private
int
index
=
0
;
/**
* Use round-robin to select {@link ActorRef}.
*
* @param members given {@link ActorRef} list, which size is greater than 0;
* @param message the {@link AbstractWorker} is going to send.
* @return the selected {@link ActorRef}
*/
@Override
public
ActorRef
select
(
List
<
ActorRef
>
members
,
Object
message
)
{
int
size
=
members
.
size
();
index
++;
int
selectIndex
=
Math
.
abs
(
index
)
%
size
;
return
members
.
get
(
selectIndex
);
}
}
skywalking-collector/skywalking-collector-actor/src/main/java/com/a/eye/skywalking/collector/actor/router/WorkerRouter.java
已删除
100644 → 0
浏览文件 @
aca66aec
package
com.a.eye.skywalking.collector.actor.router
;
import
akka.actor.ActorRef
;
import
java.util.List
;
/**
* @author wusheng
*/
public
interface
WorkerRouter
{
ActorRef
find
(
String
workerRole
);
}
skywalking-collector/skywalking-collector-actor/src/main/java/com/a/eye/skywalking/collector/actor/router/WorkerSelector.java
0 → 100644
浏览文件 @
f9bee8c4
package
com.a.eye.skywalking.collector.actor.router
;
import
akka.actor.ActorRef
;
import
com.a.eye.skywalking.collector.actor.AbstractWorker
;
import
java.util.List
;
/**
* The <code>WorkerSelector</code> should be implemented
* by any class whose instances are intended to provide select a {@link ActorRef} from a {@link ActorRef} list.
* <p></p>
* Actually, the <code>ActorRef</code> is designed to provide a routing ability in the collector cluster.
*
* @author wusheng
*/
public
interface
WorkerSelector
<
T
>
{
/**
* select a {@link ActorRef} from a {@link ActorRef} list.
*
* @param members given {@link ActorRef} list, which size is greater than 0;
* @param message the {@link AbstractWorker} is going to send.
* @return the selected {@link ActorRef}
*/
ActorRef
select
(
List
<
ActorRef
>
members
,
T
message
);
}
skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/cluster/NoAvailableWorkerException.java
0 → 100644
浏览文件 @
f9bee8c4
package
com.a.eye.skywalking.collector.cluster
;
/**
* The <code>NoAvailableWorkerException</code> represents no available member,
* when a {@link WorkerSelector} try to select.
*
* Most likely, in the cluster, these is no active worker of the particular role.
*
* @author wusheng
*/
public
class
NoAvailableWorkerException
extends
Exception
{
public
NoAvailableWorkerException
(
String
message
){
super
(
message
);
}
}
skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/cluster/WorkersRefCenter.java
浏览文件 @
f9bee8c4
...
...
@@ -37,11 +37,19 @@ public enum WorkersRefCenter {
actorToRole
.
remove
(
newRef
);
}
public
ActorRef
find
(
String
workerRole
,
int
sequence
)
{
return
roleToActor
.
get
(
workerRole
).
get
(
sequence
);
}
public
int
sizeOf
(
String
workerRole
)
{
return
roleToActor
.
get
(
workerRole
).
size
();
/**
* Get a copy all available {@link ActorRef} list, by the given worker role.
* @param workerRole the given role
* @return available {@link ActorRef} list
* @throws NoAvailableWorkerException , when no available worker.
*/
public
List
<
ActorRef
>
avaibleWorks
(
String
workerRole
)
throws
NoAvailableWorkerException
{
List
<
ActorRef
>
refs
=
roleToActor
.
get
(
workerRole
);
if
(
refs
==
null
||
refs
.
size
()
==
0
){
throw
new
NoAvailableWorkerException
(
"role="
+
workerRole
+
", no available worker."
);
}
List
<
ActorRef
>
availableList
=
new
ArrayList
<>(
refs
.
size
());
availableList
.
addAll
(
refs
);
return
Collections
.
unmodifiableList
(
availableList
);
}
}
\ No newline at end of file
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录