Mossrose高可用分布式調(diào)度框架
Mossrose,高可用分布式調(diào)度框架
環(huán)境要求:
Zookeeper
Java 8
安裝
<dependency> <groupId>com.jiuxian</groupId> <artifactId>mossrose</artifactId> <version>1.1.0-RELEASE</version> </dependency>
核心概念
SimpleJob
簡單任務(wù)
DistributedJob
分布式任務(wù),通過slice()方法將作業(yè)分隔成多個(gè)子任務(wù),子任務(wù)在集群內(nèi)分布執(zhí)行
MossroseProcess
多個(gè)MossroseProcess組成集群,集群保證有且只有一個(gè)節(jié)點(diǎn)競選成為主節(jié)點(diǎn),主節(jié)點(diǎn)負(fù)責(zé)觸發(fā)作業(yè);所有節(jié)點(diǎn)都是工作節(jié)點(diǎn),主節(jié)點(diǎn)觸發(fā)的任務(wù)會(huì)在所有工作節(jié)點(diǎn)上分布執(zhí)行
MossroseConfig
Mossrose配置,包括集群元信息和任務(wù)元信息
快速上手
實(shí)現(xiàn)一個(gè)簡單任務(wù)
public class SomeJob implements SimpleJob {
@Override
public void execute() {
System.out.println("SimpleJob: " + UUID.randomUUID());
}
}
配置任務(wù) - mossrose.yaml
# Mossrose config info --- cluster: name: mossrose-example # 集群命名空間 loadBalancingMode: ROUND_ROBIN # 集群負(fù)載均衡策略,可選:ROUND_ROBIN/RANDOM jobs: - id: 1 # 作業(yè)ID group: test # 作業(yè)分組(可選) cron: 0/5 * * * * ? # 作業(yè)cron表達(dá)式 runInCluster: true # 是否在集群中分布執(zhí)行,如果為false,則只在主節(jié)點(diǎn)上執(zhí)行 main: com.jiuxian.mossrose.test.SomeJob # 作業(yè)類全名
運(yùn)行mossrose主類
public class MainTest {
@Test
public void test() throws Exception {
String zks = "localhost"; // zookeeper集群地址
try (MossroseProcess process = new MossroseProcess(
MossroseConfigFactory.fromClasspathYamlFile("mossrose.yaml"),
new ZookeeperClusterDiscovery("/mossrose/jobtest", zks), zks)) {
process.run();
try {
// Block the unit test
Thread.sleep(60 * 60 * 1000);
} catch (InterruptedException e) {
}
}
}
}
分布式任務(wù)
實(shí)現(xiàn)一個(gè)分布式任務(wù)
public class SomeDistributedJob implements DistributedJob {
@Override
public List slice() {
return Splitter.on(" ").splitToList("This is a test on the mossrose distributed job, how are you feeling?");
}
@Override
public void execute(String item) {
System.out.println(Thread.currentThread() + " DistributedJob: " + item);
}
}評論
圖片
表情
