Kitex 提供的服务注册与发现 etcd 拓展

在这里插入图片描述

📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。
📘相关专栏Rust初阶教程、go语言基础系列、spring教程等,大家有兴趣的可以看一看
📙Java并发编程系列,设计模式系列、go web开发框架 系列正在发展中,喜欢Java,GoLang,Rust,的朋友们可以关注一下哦!


@[TOC] # Kitex 提供的服务注册与发现 etcd 拓展 ## etcd介绍 etcd 是一个高度可用的、分布式、一致性的键值存储系统,主要用于服务发现、配置共享、协调分布式系统状态等场景。它是使用 Go 语言编写的,并采用 Raft 算法保证数据的强一致性。etcd 在云原生生态系统中扮演着至关重要的角色,特别是在 Kubernetes(K8s)中作为其元数据存储和集群协调的核心组件。 ## docker 安装 ```yaml docker etcd: image: bitnami/etcd:3.5 container_name: etcd ports: - 2379:2379 - 2380:2380 volumes: - ./etcd/data:/bitnami/etcd-data environment: - TZ=Asia/Shanghai - ALLOW_NONE_AUTHENTICATION=yes - ETCD_ADVERTISE_CLIENT_URLS=http://etcd:2379 ``` ## 代码实现 ### 安装包 >go get github.com/kitex-contrib/registry-etcd

服务注册

注册函数

提供了三个创建 Registry 的函数

NewEtcdRegistry
NewEtcdRegistry 使用 etcd 创建一个新的服务注册中心,需要传入端点值。可自定义服务注册中心配置,配置详情见 Option。
函数签名:

func NewEtcdRegistry(endpoints []string, opts …Option) (registry.Registry, error)

NewEtcdRegistryWithAuth
NewEtcdRegistryWithAuth 创建服务注册中心需要传入 auth 参数。
函数签名:

func NewEtcdRegistryWithAuth(endpoints []string, username, password string) (registry.Registry, error)

NewEtcdRegistryWithRetry
NewEtcdRegistryWithRetry 创建服务注册中心传入自定义 Retry 配置。
函数签名:

func NewEtcdRegistryWithRetry(endpoints []string, retryConfig *retry.Config, opts …Option) (registry.Registry, error)

使用 NewRetryConfig(opts …Option) *Config 生成 Retry 配置,配置详情见 Option。

代码示例

package mainimport ("github.com/cloudwego/kitex/pkg/rpcinfo""github.com/cloudwego/kitex/server"etcd "github.com/kitex-contrib/registry-etcd""log""mykitex/kitex_gen/example/shop/item/itemservice""net"
)func main() {// 使用时请传入真实 etcd 的服务地址,本例中为 127.0.0.1:2379r, err := etcd.NewEtcdRegistry([]string{"127.0.0.1:2379"})if err != nil {log.Fatal(err)}addr, _ := net.ResolveTCPAddr("tcp", "127.0.0.1:8890")svr := itemservice.NewServer(new(ItemServiceImpl),server.WithServiceAddr(addr),// 指定 Registry 与服务基本信息server.WithRegistry(r),server.WithServerBasicInfo(&rpcinfo.EndpointBasicInfo{ServiceName: "example.shop.item",},),)err = svr.Run()if err != nil {log.Println(err.Error())}
}
Option

Etcd 拓展在服务注册部分中提供了 option 配置。

WithTLSOpt
Etcd 扩展提供了 WithTLSOpt 用于帮助用户配置 Etcd 中的 TLS 选项。
函数签名:

func WithTLSOpt(certFile, keyFile, caFile string) Option

WithAuthOpt
Etcd 扩展提供了 WithAuthOpt 用于帮助用户配置 Etcd 中的 Username 和 Password 选项。
函数签名:

func WithAuthOpt(username, password string) Option

WithDialTimeoutOpt
Etcd 扩展提供了 WithTimeoutOpt 用于帮助用户配置连接超时时间。

func WithDialTimeoutOpt(dialTimeout time.Duration) Option

Retry
在服务注册到 etcd 之后,它会定期检查服务的状态。如果发现任何异常状态,它将尝试重新注册服务。observeDelay 是正常情况下检查服务状态的延迟时间,而 retryDelay 是断开连接后尝试注册服务的延迟时间。

默认配置

配置名默认值描述
WithMaxAttemptTimes(maxAttemptTimes uint) Option5用于设置最大尝试次数,如果为 0,则表示无限尝试
WithObserveDelay(observeDelay time.Duration) Option30 * time.Second用于设置正常连接条件下检查服务状态的延迟时间
WithRetryDelay(t time.Duration) Option10 * time.Second用于设置断开连接后重试的延迟时间

服务发现

发现函数

NewEtcdResolver
NewEtcdResolver 使用 etcd 创建一个新的服务发现中心,需要传入端点值。可自定义服务发现中心配置,配置详情见 Option。
函数签名:

func NewEtcdResolver(endpoints []string, opts …Option) (discovery.Resolver, error)

NewEtcdResolverWithAuth
NewEtcdResolverWithAuth 服务发现中心,需要传入 Auth 参数。
函数签名:

func NewEtcdResolverWithAuth(endpoints []string, username, password string) (discovery.Resolver, error)

代码示例

package mainimport ("context""github.com/cloudwego/kitex/client""github.com/cloudwego/kitex/pkg/rpcinfo"etcd "github.com/kitex-contrib/registry-etcd""log""mykitex/kitex_gen/example/shop/item""mykitex/kitex_gen/example/shop/item/itemservice""time"
)func main() {// 使用时请传入真实 etcd 的服务地址,本例中为 127.0.0.1:2379r, err := etcd.NewEtcdResolver([]string{"127.0.0.1:2379"})if err != nil {log.Fatal(err)}// 指定 Resolvecl, err := itemservice.NewClient("example.shop.item",client.WithResolver(r),client.WithClientBasicInfo(&rpcinfo.EndpointBasicInfo{ServiceName: "example.shop.item",},),)for {if err != nil {log.Println("发现服务失败")}p, _ := cl.GetItem(context.Background(), &item.GetItemReq{Id: 1})log.Println(p)time.Sleep(time.Second)}}
Option

Etcd 拓展在服务发现部分中提供了 option 配置。

WithTLSOpt
Etcd 扩展提供了 WithTLSOpt 用于帮助用户配置 Etcd 中的TLS选项。
函数签名:

func WithTLSOpt(certFile, keyFile, caFile string) Option

WithAuthOpt
Etcd 扩展提供了WithAuthOpt用于帮助用户配置 Etcd 中的Username和Password选项。
函数签名:

func WithAuthOpt(username, password string) Option

WithDialTimeoutOpt
Etcd 扩展提供了WithTimeoutOpt用于帮助用户配置连接超时时间。
func WithDialTimeoutOpt(dialTimeout time.Duration) Option

代码仓库

https://github.com/onenewcode/mykitex

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

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

相关文章

python批量转化pdf图片为jpg图片

1.把pdf图片批量转为jpg;需要注意的是,需要先安装poppler这个软件,具体安装教程放在下面代码中了 2.代码 #poppler安装教程参考:https://blog.csdn.net/wy01415/article/details/110257130 #windows上poppler下载链接&#xff1a…

5G PLMN相关概念

PLMN PLMN(Public Land Mobile Network,公用陆地移动网络),是由政府或其批准的经营者为公众提供陆地移动通信业务而建立、经营的网络。PLMN与公众交换电话网(PSTN)互连,形成整个地区或国家规模…

mysql锁表问题

问题描述 偶尔应用日志会打印锁表超时回滚 org.springframework.dao.CannotAcquireLockException: ### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transactionmysql锁…

【SQL Server】1. 认识+使用

1. 创建数据库的默认存储路径 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft SQL Server 2008 R2 当我们选择删除数据库时,对应路径下的文件也就删除了 2. 导入导出数据工具的路径 3. 注册数据库遇到的问题 ??? 目前的问题就是服务器新建…

应急响应实战笔记04Windows实战篇(5)

第5篇:挖矿病毒(一) 0x00 前言 ​ 随着虚拟货币的疯狂炒作,挖矿病毒已经成为不法分子利用最为频繁的攻击方式之一。病毒传播者可以利用个人电脑或服务器进行挖矿,具体现象为电脑CPU占用率高,C盘可使用空间…

【Web】记录Polar靶场<中等>难度题一遍过(全)

目录 到底给不给flag呢 写shell 注入 某函数的复仇 xxe SSTI unpickle BlackMagic 反序列化 找找shell 再来ping一波啊 wu 代码审计1 你的马呢? ezphp 随机值 phpurl search file PlayGame csdn 反正持续一个月,感觉XYCTF…

2024五大招聘趋势

2024年的招聘趋势梳理了五个关键趋势:AI驱动的招聘技术的兴起、自动化的重要性、向候选人为中心的招聘转变、招聘者外联的增加个性化,以及重视基于技能的招聘。尽管经济存在不确定性,但预计对AI用于招聘的投资将继续增长,大力强调…

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

前言: 在学习完数据结构顺序表和链表之后,其实我们就可以做很多事情了,后面的栈和队列,其实就是对前面的顺序表和链表的灵活运用,今天我们就来学习一下栈的原理和应用。 准备工作:本人习惯将文件放在test.c…

ubuntu22.04@Jetson Orin Nano安装配置VNC服务端

ubuntu22.04Jetson Orin Nano安装&配置VNC服务端 1. 源由2. 环境3. VNC安装Step 1: update and install xserver-xorg-video-dummyStep 2: Create config for dummy virtual displayStep3: Add the following contents in xorg.conf.dummyStep 4: Update /etc/X11/xorg.con…

WPF-基础及进阶扩展合集(持续更新)

目录 一、基础 1、GridSplitter分割线 2、x:static访问资源文件 3、wpf触发器 4、添加xaml资源文件 5、Convert转换器 6、多路绑定与多路转换器 二、进阶扩展 1、HierarchicalDataTemplate 2、XmlDataProvider从外部文件获取源 3、TextBox在CellTemplate中的焦点问题…

Python基础之pandas:文件读取与数据处理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、文件读取1.以pd.read_csv()为例:2.数据查看 二、数据离散化、排序1.pd.cut()离散化,以按范围加标签为例2. pd.qcut()实现离散化3.排序4.…

stream使用

stream流式计算 在Java1.8之前还没有stream流式算法的时候&#xff0c;我们要是在一个放有多个User对象的list集合中&#xff0c;将每个User对象的主键ID取出&#xff0c;组合成一个新的集合&#xff0c;首先想到的肯定是遍历&#xff0c;如下&#xff1a; List<Long> u…

通过pymysql读取数据库中表格并保存到excel(实用篇)

本篇文章是通过pymysql将本地数据库中的指定表格保存到excel的操作。 这里我们假设本地已经安装了对应的数据库管理工具&#xff0c;里面有一个指定的表格&#xff0c;现在通过python程序&#xff0c;通过调用pymysql进行读取并保存到excel中。 关于数据库管理工具是Navicat P…

Android Studio学习7——常用控件view

Android控件 双击shift键——>搜索想要找的文件 Ctrlshift回车——>补全“&#xff1b;”号 CtrlX——>删除一行&#xff0c;只需把鼠标放在那一行 windows自带字体

LC 111.二叉树的最小深度

111. 二叉树的最小深度 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明&#xff1a; 叶子节点是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a; root [3,9,20,null,null,15,7] 输出&#xff1a;…

mongodb的简单操作

文章目录 前言数据库的创建和删除集合的创建和删除文档的插入和查询异常处理更新数据局部修改符合条件的批量更新加操作 删除文档删除全部数据删除符合条件的数据 统计count统计有多少条数据统计特定条件有多少条数据 分页查询排序查询正则查询比较查询包含查询条件连接查询索引…

Docker 哲学 - push 本机镜像 到 dockerhub

注意事项&#xff1a; 1、 登录 docker 账号 docker login 2、docker images 查看本地镜像 3、注意的是 push镜像时 镜像的tag 需要与 dockerhub的用户名保持一致 eg&#xff1a;本地镜像 express:1 直接 docker push express:1 无法成功 原因docker不能识别 push到哪里 …

轻松上手 Tanssi:应用链开发与部署终极指南

随着 Polkadot 2.0 的推进&#xff0c;一个既强大又用户友好的技术支撑成为推动生态进步的关键&#xff0c;目的是为了降低应用链启动的成本和复杂度。在这个转折点上&#xff0c;Tanssi 逐渐成为应用链开发的首选解决方案。Tanssi 是一个旨在简化应用链部署流程的模块化基础设…

kubernetes-Pod基于污点、容忍度、亲和性的多种调度策略(二)

Pod调度策略 一.污点-Taint二.容忍度-Tolerations三.Pod常见状态和重启策略1.Pod常见状态2.Pod的重启策略2.1测试Always重启策略2.2测试Never重启策略2.3测试OnFailure重启策略&#xff08;生产环境中常用&#xff09; 一.污点-Taint 在 Kubernetes 中&#xff0c;污点&#x…

采用大语言模型进行查询重写——Query Rewriting via Large Language Models

文章&#xff1a;Query Rewriting via Large Language Models&#xff0c;https://arxiv.org/abs/2403.09060 摘要 查询重写是在将查询传递给查询优化器之前处理编写不良的查询的最有效技术之一。 手动重写不可扩展&#xff0c;因为它容易出错并且需要深厚的专业知识。 类似地…