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上报成功!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu系统vscode调试c/c++大中型项目

文章目录 1. 插件2. 项目工程3. vsode的配置setting.jsonc_cpp_properties.json 4. 启动调试 前置阅读 vscode调试第一篇 1. 插件 c/c, cmake, cmake tools 2. 项目工程 对于我的项目需要用到很多的三方库,三方库的版本又会有很多,一般都是用cmake编译…

QT写一个mainWindow

切换风格的写法&#xff1a; 先看看样式效果&#xff1a; mian_window.h文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>class MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~MainWindow();void Ini…

对比预测编码表示学习

对比预测编码表示学习 引言 文章主要提出如下几点&#xff1a;首先将高维数据压缩到更加紧凑的潜在嵌入&#xff08;latent embdding&#xff09;空间&#xff0c;在这个空间中条件预测更容易被建模。第二&#xff0c;在这个潜在空间中使用自回归模型&#xff0c;以对未来的多…

DC系列靶场---DC 2靶场的渗透测试(一)

信息收集 Nmap扫描 nmap -sV -p- -sC -T4 172.30.1.141 域名解析 echo 172.30.1.141 dc-2 >> /etc/hosts 目录枚举 gobuster dir -u http://172.30.1.141 -w work/lab/CTF/ATT_CK_01/SecLists-master/Discovery/Web-Content/big.txt -x .php,.rar,.html,.zip -t 20 -b…

探索XEX数字资产交易的优势与操作指南

随着数字资产市场的快速发展&#xff0c;越来越多的投资者开始关注并参与其中。XEX交易所作为一个新兴的数字资产交易平台&#xff0c;以其用户友好的界面和高效的交易服务&#xff0c;迅速吸引了大量用户。本文将介绍XEX数字资产交易的主要特点和优势&#xff0c;帮助新手更好…

物联网在电力行业的应用

作者主页: 知孤云出岫 这里写目录标题 作者主页:物联网在电力行业的应用简介主要应用领域代码案例分析1. 智能电表数据采集和分析2. 设备监控和预测性维护3. 能耗管理和优化4. 电力负载预测5. 分布式能源管理6. 电动汽车充电管理7. 电网安全与故障检测 物联网在电力行业的应用…

python+onlyoffice+vue3项目实战20240722笔记,环境搭建和前后端基础代码

开发后端 先创建data目录,然后在data目录下创建一个test.docx测试文档。 后端代码: import json import req import api from api import middleware, PlainTextResponseasync def doc_callback(request):data = await api.req.get_json(request)print("callback ==…

数据结构——堆(C语言版)

树 树的概念&#xff1a; 树&#xff08;Tree&#xff09;是一种抽象数据结构&#xff0c;它由节点&#xff08;node&#xff09;的集合组成&#xff0c;这些节点通过边相连&#xff0c;把 节点集合按照逻辑顺序抽象成图像&#xff0c;看起来就像一个倒挂着的树&#xff0c;也…

使用C#手搓Word插件

WordTools主要功能介绍 编码语言&#xff1a;C#【VSTO】 1、选择 1.1、表格 作用&#xff1a;全选文档中的表格&#xff1b; 1.2、表头 作用&#xff1a;全选文档所有表格的表头【第一行】&#xff1b; 1.3、表正文 全选文档中所有表格的除表头部分【除第一行部分】 1.…

java面向对象进阶篇--《多态》

目录 一、前言 二、认识多态 方法重写&#xff08;Override&#xff09;&#xff1a; 方法重载&#xff08;Overload&#xff09;&#xff1a; 示例&#xff1a; Person类&#xff08;父类&#xff09; Administrator&#xff08;子类&#xff09; Student&#xff08;子…

docker搭建ES 8.14 集群

参考&#xff1a;【docker搭建es8集群kibana】_docker 安装生产级 es 8.14 集群-CSDN博客 1、之前已搭建一台单机版的dockerES集群 参见 Elasticsearch docker 安装_docker 安装es8.14.3-CSDN博客 2、现在需要重新搭建为docker ES集群 准备新搭建3个点 一、准备工作 提前开…

构建网络安全之盾:应对“微软蓝屏”教训的全面策略

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

深度学习模型Transformer结构

Transformer结构是一种基于自注意力&#xff08;Self-Attention&#xff09;机制的深度学习模型&#xff0c;最初由Vaswani等人在2017年的论文《Attention Is All You Need》中提出&#xff0c;用于解决自然语言处理&#xff08;NLP&#xff09;领域的任务&#xff0c;如机器翻…

MySQL --- 库的操作

一、创建数据库 create database [ if not exists ] 数据库名; // []中的为可选项 在创建库时&#xff0c;也可以指定数据库采用的字符集(character set)和数据库字符集的校验规则(collate) (当我们创建数据库没有指定字符集和校验规则时&#xff0c;系统使用默认字符集&#x…

【复习】软件工程

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 典型表现&#xff1a; 开发成本和进度的估计常常很不准确 用户对已完成的软件系统不满意&#xff0c;闭门造车 软件质量&#xff08;quality&#xff09;不可靠 软件常常是不可维护的 软件产品供不应…

css技巧混合模式

看上面这个神奇的效果&#xff0c;文字在黑色背景里面显示为白色&#xff0c;而在白色的背景里面显示为黑色&#xff0c;这就是文字智能适配背景。 看到这样的需求&#xff0c;大多数人第一时间想到的是&#xff0c;文字元素有两个&#xff0c;是完全重叠的两层&#xff0c;一…

Facebook在内容创作中的新策略与机会

随着社交媒体的不断发展&#xff0c;内容创作已经成为了平台吸引和留住用户的核心竞争力。Facebook作为全球最大的社交平台之一&#xff0c;不断调整和优化其内容创作策略&#xff0c;以适应用户需求的变化和技术的进步。本文将深入探讨Facebook在内容创作中的新策略与机会&…

考研复习7月进度严重滞后?

宇哥说&#xff1a;来不及了&#xff01; 因为基础30讲和强化36讲&#xff0c;加起来已经快300小时了。 所以&#xff0c;必须换个思路&#xff1a; 不看课行吗&#xff1f; 大多数人7月的情况是这样的&#xff1a; 1. 听完线代&#xff0c;高数知识点忘得差不多了&#xf…

JMeter接口测试-3.断言及参数化测试

1. 断言 JMeter官方断言&#xff08;Assertion&#xff09;的定义 用于检查测试中得到的响应数据是否符合预期&#xff0c;用于保证测试过程中的数据交互与预期一致 断言的目的&#xff1a; 一个取样器可以添加多个不同形式的断言&#xff0c;根据你的检查需求来添加相应的…

自动驾驶系列—智能巡航辅助功能中的路口通行功能介绍

自动驾驶系列—智能巡航辅助功能中的车道中央保持功能介绍 自动驾驶系列—智能巡航辅助功能中的车道变换功能介绍 自动驾驶系列—智能巡航辅助功能中的横向避让功能介绍 自动驾驶系列—智能巡航辅助功能中的路口通行功能介绍 文章目录 2. 功能定义3. 功能原理4. 传感器架构5. 实…