当前位置: 首页 > news >正文

go-kratos 学习笔记(4) 服务注册与发现 nacos注册

接口实现​

Registry 接口分为两个,Registrar 为实例注册和反注册,Discovery 为服务实例列表获取

type Registrar interface {// 注册实例Register(ctx context.Context, service *ServiceInstance) error// 反注册实例Deregister(ctx context.Context, service *ServiceInstance) error
}

type Discovery interface {// 根据 serviceName 直接拉取实例列表GetService(ctx context.Context, serviceName string) ([]*ServiceInstance, error)// 根据 serviceName 阻塞式订阅一个服务的实例列表信息Watch(ctx context.Context, serviceName string) (Watcher, error)
}
nacos的注册数据data层,在data目录选创建一个 register.go
下载包
go get github.com/nacos-group/nacos-sdk-go go get github.com/go-kratos/kratos/contrib/registry/nacos/v2go get github.com/nacos-group/nacos-sdk-go/clients/config_client
package dataimport ("github.com/go-kratos/kratos/contrib/registry/nacos/v2""github.com/go-kratos/kratos/v2/registry""github.com/nacos-group/nacos-sdk-go/clients""github.com/nacos-group/nacos-sdk-go/common/constant""github.com/nacos-group/nacos-sdk-go/vo""log"conf "xgs_kratos/gen/users"
)func CreateRegister(conf *conf.Data) registry.Registrar {sc := []constant.ServerConfig{*constant.NewServerConfig(conf.Nacos.Addr, conf.Nacos.Port),}配置项自己定义cc := constant.ClientConfig{NamespaceId:         conf.Nacos.NamespaceId, // namespace idTimeoutMs:           5000, //配置项自己定义NotLoadCacheAtStart: true,LogDir:              "tmp/nacos/log",CacheDir:            "tmp/nacos/cache",LogLevel:            "debug",}// a more graceful way to create naming clientclient, err := clients.NewNamingClient(vo.NacosClientParam{ClientConfig:  &cc,ServerConfigs: sc,},)if err != nil {log.Panic(err)}r := nacos.New(client)return r
}
配置文件需要修改

api/user/conf.proto

syntax = "proto3";
package kratos.api;option go_package = "xgs_kratos/app/users/internal/conf;conf";import "google/protobuf/duration.proto";message Bootstrap {Server server = 1;Data data = 2;
}message Server {message HTTP {string network = 1;string addr = 2;google.protobuf.Duration timeout = 3;}message GRPC {string network = 1;string addr = 2;google.protobuf.Duration timeout = 3;}HTTP http = 1;GRPC grpc = 2;
}message Data {message Database {string driver = 1;string source = 2;}message Redis {string network = 1;string addr = 2;google.protobuf.Duration read_timeout = 3;google.protobuf.Duration write_timeout = 4;}
//新增nacos的配置message Nacos{string addr = 1;uint64 port = 2;string namespaceId = 3;}Database database = 1;Redis redis = 2;Nacos nacos = 3;
}

然后执行 buf generate

在app/users/connfigs里面写入配置

server:http:addr: 0.0.0.0:8000timeout: 1sgrpc:addr: 0.0.0.0:9000timeout: 1s
data:database:driver: mysqlsource: root:root@tcp(127.0.0.1:3306)/test?parseTime=True&loc=Localredis:addr: 127.0.0.1:6379read_timeout: 0.2swrite_timeout: 0.2snacos:addr: 127.0.0.1port: 8848namespaceId: local

由于使用的是模版默认的需要替换一下 app/users下 xgs_kratos/app/users/internal/conf替换成 xgs_kratos/gen/users

main.go中修改

package mainimport ("flag""github.com/go-kratos/kratos/v2/registry""os""xgs_kratos/gen/users""github.com/go-kratos/kratos/v2""github.com/go-kratos/kratos/v2/config""github.com/go-kratos/kratos/v2/config/file""github.com/go-kratos/kratos/v2/log""github.com/go-kratos/kratos/v2/middleware/tracing""github.com/go-kratos/kratos/v2/transport/grpc""github.com/go-kratos/kratos/v2/transport/http"_ "go.uber.org/automaxprocs"
)// go build -ldflags "-X main.Version=x.y.z"
var (// Name is the name of the compiled software.Name string = "users-xgs"// Version is the version of the compiled software.Version string = "v1.0.0"// flagconf is the config flag.flagconf stringid, _ = os.Hostname()
)func init() {flag.StringVar(&flagconf, "conf", "../../configs", "config path, eg: -conf config.yaml")
}func newApp(rg registry.Registrar, logger log.Logger, gs *grpc.Server, hs *http.Server) *kratos.App {return kratos.New(kratos.ID(id),kratos.Name(Name),kratos.Version(Version),kratos.Metadata(map[string]string{}),kratos.Logger(logger),kratos.Registrar(rg),kratos.Server(gs,hs,),)
}func main() {flag.Parse()logger := log.With(log.NewStdLogger(os.Stdout),"ts", log.DefaultTimestamp,"caller", log.DefaultCaller,"service.id", id,"service.name", Name,"service.version", Version,"trace.id", tracing.TraceID(),"span.id", tracing.SpanID(),)c := config.New(config.WithSource(file.NewSource(flagconf),),)defer c.Close()if err := c.Load(); err != nil {panic(err)}var bc conf.Bootstrapif err := c.Scan(&bc); err != nil {panic(err)}app, cleanup, err := wireApp(bc.Server, bc.Data, logger)if err != nil {panic(err)}defer cleanup()// start and wait for stop signalif err := app.Run(); err != nil {panic(err)}
}

修改完代码之后需要生成一下依赖 在app/users下执行  wire

然后直接执行 kratos run 

 nacos上报成功!!

 项目的代码  码云 https://gitee.com/gebilaoxie/xgs_kratos.git

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 以进程完成并发的UDP服务端
  • python中的fire和Linux shell中的参数传递
  • IDEA的pom.xml显示ignored 的解决办法
  • go-kratos 学习笔记(2) 创建api
  • JS递归遍历路由文件,修改hidden属性
  • 三、【Python】入门 - 第一个python程序
  • 微信小程序开发:项目程序代码构成
  • 【机器学习】FlyFlowerSong【人工智能】资源指南
  • 服务攻防-框架安全(漏洞复现)
  • 2024年7月23日(samba DNS)
  • MySQL8的备份方案——全量(完全)备份(CentOS)
  • 操作系统——笔记(1)
  • 驱动框架——CMSIS第一部分 RTE驱动框架介绍
  • 类和对象(四)
  • AV1技术学习:Quantization
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • CSS相对定位
  • JS字符串转数字方法总结
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Node + FFmpeg 实现Canvas动画导出视频
  • Python语法速览与机器学习开发环境搭建
  • vue-cli3搭建项目
  • Web设计流程优化:网页效果图设计新思路
  • 阿里云前端周刊 - 第 26 期
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 当SetTimeout遇到了字符串
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 聊聊directory traversal attack
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 一文看透浏览器架构
  • 用mpvue开发微信小程序
  • 再谈express与koa的对比
  • Semaphore
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​zookeeper集群配置与启动
  • # centos7下FFmpeg环境部署记录
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (1)svelte 教程:hello world
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (js)循环条件满足时终止循环
  • (python)数据结构---字典
  • (分布式缓存)Redis持久化
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (强烈推荐)移动端音视频从零到上手(上)
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (学习日记)2024.02.29:UCOSIII第二节
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)插入排序
  • (转)jdk与jre的区别
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**