本文介绍了golang实现简易的分布式系统方法,分享给大家,具体如下:
<强>功能强>
-
<李>能够发送/接收请求和响应李>
<李>能够连接到集群李>
<李>如果无法连接到群集(如果它是第一个节点),则可以作为主节点启动节点李>
<李>每个节点有唯一的标识李>
<李>能够在节点之间交换json数据包李>
<李>接受命令行参数中的所有信息(将来在我们系统升级时将会很有用)李>
<>强源码强>
主要包 导入( “fmt” “strconv” “时间” “数学/兰德” “净” “国旗” “弦” “编码/json” )//节点数据信息 NodeInfo struct类型{//节点ID,通过随机数生成 NodeId int的json:“NodeId”//节点IP地址 NodeIpAddr字符串的json:“NodeIpAddr”//节点端口 港口字符串的json:“端口” }//将节点数据信息格式化输出//NodeInfo: {nodeId: 89423, nodeIpAddr: 127.0.0.1/8,端口:8001} func(节点* NodeInfo)字符串String () { 返回“NodeInfo: {nodeId:“+ strconv.Itoa (node.NodeId) +”, nodeIpAddr:“+节点。NodeIpAddr +”,端口:”+节点。港口+“}” }/*添加一个节点到集群的一个请求或者响应的标准格式*/AddToClusterMessage struct类型{//源节点 源NodeInfo json:“源”的//目的节点 桌子NodeInfo json:“桌子”//两个节点连接时发送的消息 消息字符串的json:“消息” }/*请求/响应信息格式化输出*/func(点播AddToClusterMessage)字符串String () { 返回“AddToClusterMessage: {\ n来源:“+ req.Source.String () + ", \ n桌子:“+ req.Dest.String() +”,消息:\ n”+点播。信息+“}” }//猫vi//rm 函数main () {//解析命令行参数 makeMasterOnError:=国旗。Bool (“makeMasterOnError”、虚假,“如果IP地址没有连接到集群中,我们将其作为大师节点。”) clusterip:=国旗。字符串(“clusterip”、“127.0.0.1:8001”,“任何的节点连接都连接这个IP”) myport:=国旗。字符串(“myport”,“8001”,“运行这个节点ip地址>/用户/liyuechun/走 liyuechun:去yuechunli $去安装主要 liyuechun: yuechunli主要美元 我的细节:NodeInfo: {nodeId: 53163002, nodeIpAddr: 127.0.0.1/8,端口:8001} 不能连接到集群。53163002 退出系统。设置makeMasterOnError标志节点的主人。53163002 liyuechun:去yuechunli $
获取相关帮助信息
美元。/bin/主要- h
liyuechun:去yuechunli。美元/bin/主要- h 使用/bin/主要: -clusterip字符串 照样ip地址的任何节点联系(默认“127.0.0.1:8001”) -makeMasterOnError 把这个节点主如果无法连接到集群ip提供。 -myport字符串 运行这个节点ip地址> 美元。/bin/主要——makeMasterOnError
liyuechun:去yuechunli。美元/bin/主要——makeMasterOnError 我的细节:NodeInfo: {nodeId: 82381143, nodeIpAddr: 127.0.0.1/8,端口:8001} 未连接到集群。82381143 将开始这个节点为主。
<强>添加节点Node2到集群强>
美元。/bin/主要——8002年myport clusterip 127.0.0.1:8001
<强>添加节点Node3到集群强>
主要——8004年myport clusterip 127.0.0.1:8001
<强>添加节点Node4到集群强>
主要——myport 8003美元——clusterip 127.0.0.1:8002
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。