源码地址:

https://github.com/MwlLj/go-micro-service

go-micro-service
golang分布式框架

zookeeper 安装与启动
http://mirrors.hust.edu.cn/apache/zookeeper/

服务注册说明
import
* s "github.com/MwlLj/go-micro-service/service_discovery_nocache"
* proto "github.com/MwlLj/go-micro-service/common_proto"

example

func main() {var conns []proto.CConnectPropertyconns = append(conns, proto.CConnectProperty{ServerHost: "127.0.0.1", ServerPort: 2182, ServiceId: "server_1"})sds := s.New(&s.CInitProperty{PathPrefix:   "micro-service",ServerMode:   s.ServerModeZookeeper,ServerName:   "testserver",NodeData:     proto.CNodeData{ServerIp: "127.0.0.1", ServerPort: 50000, ServerUniqueCode: "cacd3aa4-4eb8-4bf6-b967-fbcee5377992", Weight: 1},Conns:        conns,ConnTimeoutS: 10})var _ = sdsfor {time.Sleep(100 * time.Millisecond)}}

description
* 服务端只需要调用 New 方法, 就可以将服务信息注册到 zookeeper 中, 内部自动实现重连机制
* 对于类似 http 的服务端, 可以不需要填写 ServerUniqueCode 字段
* ServerUniqueCode 字段是针对利用消息队列做成的服务端(这种服务没有ip和port监听, 是通过第三方的 broker 来做为中介者进行消息传递的), 所以这类的服务 必须要填写 ServerUniqueCode 字段, 而 ServerIp / ServerPort 字段非必填
> 这类服务实现分布式机制的一种方式:
    服务端存在一个 ServerUniqueCode, 客户端连接到服务端时, 服务端将自己的 ServerUniqueCode 发送给 客户端, 客户端每次发送消息时, 将这个 uniqueCode 传递给集群中的服务, 每个服务接收到消息, 都判断一下传来的 uniqueCode 是否与自己的 ServerUniqueCode 相等, 只有相等的时候才会接收, 否则丢弃

负载均衡说明
import
* bl "github.com/MwlLj/go-micro-service/loab_blance"
* proto "github.com/MwlLj/go-micro-service/common_proto"

example

func main() {var conns []proto.CConnectPropertyconns = append(conns, proto.CConnectProperty{ServerHost: "127.0.0.1", ServerPort: 2182, ServiceId: "server_1"})bls, connChan := bl.New(bl.ServerModeZookeeper, &conns, "micro-service", 10)// algorithm := bls.GetNormalNodeAlgorithm(bl.AlgorithmRoundRobin)// algorithm := bls.GetNormalNodeAlgorithm(bl.AlgorithmWeightRoundRobin)// algorithm := bls.GetNormalNodeAlgorithm(bl.AlgorithmRandom)// algorithm := bls.GetNormalNodeAlgorithm(bl.AlgorithmWeightRandom)// algorithm := bls.GetNormalNodeAlgorithm(bl.AlgorithmIpHash)// algorithm := bls.GetNormalNodeAlgorithm(bl.AlgorithmUrlHash)algorithm := bls.GetNormalNodeAlgorithm(bl.AlgorithmLeastConnect)select {case <-connChan:break}data, err := bls.GetMasterNode("testserver")if err != nil {fmt.Println("[ERROR] get master node error, ", err)} else {fmt.Println("------------master------------")fmt.Println(data.ServerIp, data.ServerPort, data.ServerUniqueCode, data.Weight)fmt.Println("------------master------------")}fmt.Println("------------normal------------")for i := 0; i < 20; i++ {// data, err = algorithm.Get("testserver", "192.168.9.2")// data, err = algorithm.Get("testserver", "192.168.9.2")// data, err = algorithm.Get("testserver", "/data/user")data, err = algorithm.Get("testserver", "/data/video")if err != nil {fmt.Println("[ERROR] get normal node error, ", err)} else {fmt.Println(data.ServerIp, data.ServerPort, data.ServerUniqueCode, data.Weight)}}fmt.Println("------------normal------------")var _ = blsfor {time.Sleep(100 * time.Millisecond)}}

description
* ServerModeZookeeper 这种方式是通过接口直接调用的, 后续将支持 Http 版本的
* 通过 GetMasterNode 接口获取 master 节点
> master节点的作用:
    如果需要同步操作数据库等不可以同时进行的事务时, 就不能让多个 server 同时执行, 这种任务, 同一时刻只能有一个服务运行
    这个服务就是 master (master 节点的逻辑不需要使用者关心, 使用者只需要通过 GetMasterNode 接口获取此时的 master 节点对应的服务信息就可以)
* 负载均衡 获取normal节点 是通过 GetNormalNodeAlgorithm 来指定所需的算法
* 通过 GetNormalNodeAlgorithm 返回的对象, 调用 Get 方法就可以, 获取到一个 normal 节点信息

golang 分布式框架 (持续更新)相关推荐

  1. iOS之github第三方框架(持续更新)

    1.MBProgressHUD MBProgressHUD是一个开源项目,实现了很多种样式的提示框 使用上简单.方便,并且可以对显示的内容进行自定义,功能很强大,很多项目中都有使用到. 到Github ...

  2. golang 分布式框架Origin学习笔记

    最近项目的后端需求是全球同服的,在使用语言方面确定了为golang之后,了解了一下当前的一些goalng游戏服务器框架,终于在leaf/pitaya/ 等众多框架中选择了 Origin, 主要是因为它 ...

  3. Go-lang分布式框架选择上的历程记录【go-micro、go-zero、go-kratos】

    三者在github上的star数差别不大. go-micro,原本的老大,但最近变动很大,作者去搞云原生去了,分布式框架的这个分支不确定后续还能分得创作者多少精力,担心后续万一go语言有啥大改动,框架 ...

  4. Java进阶学习 - Dubbo框架(持续更新中~~)

    Java进阶学习 - Dubbo框架 1.简介 Dobbo是一个高性能的RPC框架,解决了分布式钟的调用问题 优点:解决了分布式系统中互相调用问题 缺点:缺少统一管理的调度中心 2.为什么Dubbo说 ...

  5. 几款不错的golang应用包 持续更新中~~~

    队列 1.hibiken/asynq 保证至少执行一次任务 任务调度 重试失败的任务 在工作进程崩溃时自动恢复任务 加权优先级队列 严格优先级队列 由于Redis中的写入速度很快,因此添加任务的延迟很 ...

  6. ThinkPhp5开发实战1:搭建环境配置TP5框架(持续更新收藏关注)

    文章目录 前言 一.下载thinkphp5.0.10和安装本地环境 二.下载H-UI后端模板 三.静态文件引入 四.创建后台页面首页 前言 php框架有助于促进快速应用开发,不仅节省时间,有助于建立更 ...

  7. golang 小知识-持续更新中

    Golang 中的指针 - Pointer Go 的原生数据类型可以分为基本类型和高级类型,基本类型主要包含 string, bool, int 及 float 系列,高级类型包含 struct,ar ...

  8. 深度模型框架(持续更新)

    文章目录 1.翻译 1.1.快照 1.2.详解 2.reading comprehension 快照 详解 展望 在各个领域,在一项技术渐于成熟的时候,就会摒弃掉一些底层枯燥的东西,一步步抽象出更加高 ...

  9. TKDragView_iOS开发常用第三方开源框架 持续更新中...

    网络请求 AFNetworking Alamofire AFNetworking swift版本 YTKNetwork AFNetworking的封装 YQNetworking 基于AFNetwork ...

最新文章

  1. 如何让 python 处理速度翻倍?内含代码
  2. JavaScript 的函数式编程与面向对象编程区别在哪?
  3. C++ 整型所能表示的数据范围
  4. Python-初体验
  5. Sequelize-nodejs-5-Querying
  6. 什么叫java方法重载?
  7. 经典面试题 Ipv4 和 Ipv6 是什么
  8. word转PDF时,英文单词的字母间距问题
  9. 企业级网络架构(搭建)学习笔记(网管)
  10. Spring Thymeleaf无法显示图片
  11. 初步认识计算机网络的结构特点
  12. 常见的GC算法(GC的背景与原理)
  13. SOEM 源码解析 ecx_LRD
  14. Windows下使用windeployqt打包QML项目(双击运行无反应)
  15. excel透视表 统计结果 累加
  16. Java--花卉管理系统
  17. 数据中心3D可视化公司
  18. 使用ThinkPHP操作数据库
  19. ‘CollectReport‘ object has no attribute ‘description‘
  20. 宽屏透明html5产品展示模板

热门文章

  1. UDP和TCP对比与区别
  2. Torch 中添加自己的 nn Modules:以添加 Dropout、 Triplet Loss 为例
  3. 随笔:关于FPS网络游戏“行业标准”(二)强硬的核心设定
  4. iphone11屏比例_苹果11:iphone11屏幕的尺寸大小了解
  5. 敏涵控股集团董事长刘敏陪同国资委赵华林部长赴娃哈哈集团考察调研
  6. Kettle 8.2 新手使用指南
  7. 对strcmp函数学习
  8. java计算机毕业设计论文评审系统源代码+数据库+系统+lw文档
  9. 中国农业大规模推广使用绿色环保化肥减少环境污染
  10. mysql创建备份表的sql语句_mysql 备份语句