首页 > 其他分享 >通过JRaft简单使用raft选举

通过JRaft简单使用raft选举

时间:2024-07-07 18:19:33浏览次数:12  
标签:name 选举 JRaft public nodeOptions new raft serverId void

依赖:

<dependency>
  <groupId>com.alipay.sofa</groupId>
  <artifactId>jraft-core</artifactId>
  <version>1.3.14</version>
</dependency>

StateMachine.java:

@Slf4j
public class StateMachine extends StateMachineAdapter {

  private final String name;

  public StateMachine(String name) {
    this.name = name;
  }


  @Override
  public void onApply(Iterator iterator) {

  }

  @Override
  public void onLeaderStart(long term) {
    log.info(name + "become leader");
  }

  @Override
  public void onLeaderStop(Status status) {
    log.info(name + "end leader");
  }

  @Override
  public void onStopFollowing(LeaderChangeContext ctx) {
    log.info(name + "stop following leader");
  }

  @Override
  public void onStartFollowing(LeaderChangeContext ctx) {
    log.info(name + "start following leader");
  }
}

主要流程:


public class Main {
  public static void main(String[] args) {
    int id = Integer.parseInt(args[0]);
    List<PeerId> peerIdList = new ArrayList<>();
    Configuration conf = new Configuration();
    for (int i = 0; i < 2; i++) {
      PeerId p = new PeerId("localhost", 6000 + i);
      peerIdList.add(p);
      conf.addPeer(p);
    }


    PeerId serverId = peerIdList.get(id);
    NodeOptions nodeOptions = new NodeOptions();
    nodeOptions.setLogUri("raftLog");
    nodeOptions.setRaftMetaUri("raftMeta");
    nodeOptions.setInitialConf(conf);
    nodeOptions.setFsm(new StateMachine(serverId.toString()));

    Node node = RaftServiceFactory.createRaftNode("group", serverId);

    NodeManager.getInstance().addAddress(serverId.getEndpoint());

    node.init(nodeOptions);

    RpcServer rpcServer = RaftRpcServerFactory.createRaftRpcServer(serverId.getEndpoint());
    rpcServer.init(null);


  }
}

 

参考文档:JRaft 用户指南 · SOFAStack

标签:name,选举,JRaft,public,nodeOptions,new,raft,serverId,void
From: https://www.cnblogs.com/JackieJK/p/18288772

相关文章

  • 副本集选举
    副本集使用选举来确定哪个成员将成为主成员。副本集可以响应各种事件触发选举,例如:向副本集添加新节点,initiatingareplicaset,使用诸如rs.stepDown()或rs.reconfig()和之类的方法执行副本集维护次要成员与主成员失去连接的时间超过配置的时间timeout(默认为10秒)。......
  • P1271 选举学生会【排序】
    【模板】排序题目描述将读入的NNN个数从小到大排序后输出。输入格式第一行为一个正整数N......
  • 深度解析 Raft 分布式一致性协议
    深度解析Raft分布式一致性协议本文参考转载至:浅谈Raft分布式一致性协议|图解Raft-白泽来了-博客园(cnblogs.com)深度解析Raft分布式一致性协议-掘金(juejin.cn)raft-zh_cn/raft-zh_cn.mdatmaster·maemual/raft-zh_cn(github.com)本篇文章将模拟一个KV......
  • MIT6.824-2022 分布式系统课程实验笔记 Lab 2A Raft-领导者选举(leader election)--xu
    Lab2A:Raft文章目录Lab2A:RaftLab1:MapReduceLab2:Raft实验解读Lab2B:日志复制我的代码实现(附带详细代码注释)前言Part2A:[leaderelection](中等难度)提示错误:实现细节(包含对于方法的解释如有错误大佬勿喷)结构体GetState()获取节点任期和角色sendAllRequestVote()发起投票......
  • MIT6.824-2022 分布式系统课程实验笔记 Lab 2B Raft-日志复制(Log Replication)--xunznu
    Part2B:LogReplication日志复制(困难)文章目录Part2B:LogReplication日志复制(困难)Lab1:MapReduceLab2:Raft实验解读Lab2A:领导者选举leaderelection我的代码实现(附带详细代码注释)提示:实现细节:1、commitIndex和lastApplied2、nextIndex和matchIndex3、Co......
  • World of Warcraft [CLASSIC] Talent Tree
    WorldofWarcraft[CLASSIC] TalentTree 天赋树模拟器01)初始化整个页面,选择游戏职业,初始化3个天赋树02)初始化天赋树结构,层次为N层03)每层有4个技能,设置可显示,设置隐藏04)每个技能可配置图表,技能名称,备注说明,每一级说明不同05)每层的技能可支持最大技能点......
  • Minecraft Java 1.20.1 forge服务器搭建
    ☁️MinecraftJava1.20.1forge服务器搭建......
  • 深度解析RocketMq源码-高可用存储组件(一) raft协议详解
    1.绪论前面的文章已经分析过,以前rocketmq通过主从复制的思想实现系统的高可用,即在搭建集群的时候会手动的设置一个主节点和从节点,在写入数据的时候,会先写入到主broker,然后再同步到从节点中。但是这样会有一个问题,就是主节点宕机过后,需要手动的修改从节点成为新的主节点。在roc......
  • 【学习笔记】爱立信SPO 1400 CRAFT软件基础知识3——图形用户界面之管理树
    一、前期准备提示:下面所有学习内容都是基于以下条件完成的条件1.已经正确安装并正常运行SPO1400CRAFT软件(以下简称LCT)条件2.确认已正确使用爱立信SPO1400CRAFT软件通过网络登录设备(以下简称NE)具体登录教程参考:使用爱立信SPO1400CRAFT软件通过网络登录设备的详细......
  • 【学习笔记】爱立信SPO 1400 CRAFT软件基础知识2一图形用户界面之菜单栏
    一、前期准备提示:下面所有学习内容都是基于以下条件完成的条件1.已经正确安装并正常运行SPO1400CRAFT软件(以下简称LCT)条件2.确认已正确使用爱立信SPO1400CRAFT软件通过网络登录设备(以下简称NE)具体登录教程参考:使用爱立信SPO1400CRAFT软件通过网络登录设备的详细......