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

news2024/12/27 11:18:28
在这里插入图片描述

📕作者简介: 过去日记,致力于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 main

import (
	"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:2379
	r, 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 main

import (
	"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:2379
	r, err := etcd.NewEtcdResolver([]string{"127.0.0.1:2379"})
	if err != nil {
		log.Fatal(err)
	}
	// 指定 Resolve
	cl, 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.coloradmin.cn/o/1564085.html

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

相关文章

Navicat for MySQL 15免费注册方法

一、效果图如下: 注:此方法仅用于非商业用途,请勿传播,否则后果自负。 二、下载安装 下载安装包,分为32位和6位,下载文件名:Navicat for MySQL 15.zip(https://download.csdn.net/…

阿赵UE学习笔记——23、动画蒙太奇

阿赵UE学习笔记目录   大家好,我是阿赵。   继续学习虚幻引擎的使用方法。上一篇介绍了动画合成功能,这次介绍的动画蒙太奇,和动画合成有很多类似的东西,但本质上却又不同。   蒙太奇是法语“剪接”的意思。所以动画蒙太奇&…

2024年03月CCF-GESP编程能力等级认证Scratch图形化编程二级真题解析

本文收录于专栏《Scratch等级认证CCF-GESP真题解析》,专栏总目录・点这里. 一、单选题(共 10 题,每题 3 分,共 30 分) 第1题 小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是?( )。 A、小程序 B、计时器 C、操作系统 D、神话人物 答案:…

XAMPP本地开发环境软件的最佳替代品

在开发新网站或应用时,选择合适的本地开发环境是至关重要的。本地开发环境让您可以在自己的电脑上搭建和测试网站或应用,直到它们准备好被迁移到线上服务器。一些工具甚至提供了推送到生产环境的功能,以及设置多个本地站点的能力。 XAMPP是一…

财报解读:首次全年盈利的奈雪的茶,正越来越“接地气”

从2021年6月到2023年底,上市的奈雪的茶用一年半的时间,终于进入了自己的“盈利时代”。 根据奈雪的茶近日披露的财报,2023年,公司营收51.64亿元,同比增长20.3%;经调整净利润2090万元,上年同期亏…

vue3组合式

setup原始写法 在setup中声明数据和函数,结果要用return{}的形式返回,才可以用模板语法。 setup中没有this 语法糖 将复杂的写法改为简单的写法,数据和方法就不用return返回才可以用模板语法 reactive只接受对象 ref(简单数据复…

Spring 事件广播机制详解

前言 写这篇文章的初衷源自对 Spring 框架中事件机制的好奇心。在编写观察者模式代码示例时,我突然想起了 Spring 框架中支持多事件监听的特性,例如ContextClosedEvent、ContextRefreshedEvent、ContextStartedEvent等等。传统的观察者模式通常是基于单…

2024/4/2 IOday4

使用文件IO 实现父进程向子进程发送信息&#xff0c;并总结中间可能出现的各种问题 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd…

盘点AI编程效率神器合集,代码助手工具大模型、Agent智能体

关注wx公众号:aigc247 进社群加wx号&#xff1a;aigc365 程序员是最擅长革自己命的职业&#xff0c;让我们借助AI的力量一起摸鱼一起卷&#xff01; 据说好用的AI代码助手工具、大模型、Agent智能体 微软的compoliot&#xff1a;AI神器之微软的编码助手Copilot-CSDN博客 阿…

数据库系统概论(超详解!!!) 第三节 关系数据库标准语言SQL(Ⅳ)

1.集合查询 集合操作的种类 并操作UNION 交操作INTERSECT 差操作EXCEPT 参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同 查询计算机科学系的学生及年龄不大于19岁的学生。SELECT *FROM StudentWHERE Sdept CSUNIONSELECT *FROM StudentWHERE Sage&l…

【与C++的邂逅】---- 函数重载与引用

关注小庄 顿顿解馋(▿) 喜欢的小伙伴可以多多支持小庄的文章哦 &#x1f4d2; 数据结构 &#x1f4d2; C 引言 : 上一篇博客我们了解了C入门语法的一部分&#xff0c;今天我们来了解函数重载&#xff0c;引用的技术&#xff0c;请放心食用 ~ 文章目录 一. &#x1f3e0; 函数重…

使用vscode前面几行被定住

当我们使用 vscode 滚动代码文档的时候&#xff0c;发现前面几行被定住了&#xff0c;想 css 的 sticky 一样&#xff0c;可能是之前我们不小心点到了这里&#xff0c;取消就好了

视觉Transformer和Swin Transformer

视觉Transformer概述 ViT的基本结构&#xff1a; ①输入图片首先被切分为固定尺寸的切片&#xff1b; ②对展平的切片进行线性映射&#xff08;通过矩阵乘法对维度进行变换&#xff09;&#xff1b; ③为了保留切片的位置信息&#xff0c;在切片送入Transformer编码器之前&…

做抖音小店,体验分一定要很高吗?多少分才是最佳?

大家好&#xff0c;我是电商花花。 做抖音小店&#xff0c;我们都知道体验分非常重要&#xff0c;如果做抖音小店不重视店铺的体验分&#xff0c;对于我们店铺影响还是很大的&#xff0c;体验分不仅影响我们店铺的销量&#xff0c;更是一个店铺流量的直接开关。 店铺体验分越…

Day28:回溯法 LeedCode 93.复原IP地址 78.子集 90.子集II

93. 复原 IP 地址 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&#xff0c;但是 …

DETREC数据集标注 VOC格式

经过将DETRAC数据集转换成VOC格式&#xff0c;并使用labelimg软件进行查看&#xff0c;发现该数据集存在很多漏标情况&#xff0c;截图如下所示。

121314饿

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

vue3 记录页面滚动条的位置,并在切换路由时存储或者取消

需求&#xff0c;当页面内容超出了浏览器可是屏幕的高度时&#xff0c;页面会出现滚动条。当我们滚动到某个位置时&#xff0c;操作了其他事件或者跳转了路由&#xff0c;再次回来时&#xff0c;希望还在当时滚动的位置。那我们就进行一下操作。 我是利用了会话存储 sessionSto…

SpringBoot+ECharts+Html 地图案例详解

1. 技术点 SpringBoot、MyBatis、thymeleaf、MySQL、ECharts 等 此案例使用的地图是在ECharts社区中查找的&#xff1a;makeapie echarts社区图表可视化案例 2. 准备条件 在mysql中创建数据库echartsdb&#xff0c;数据库中创建表t_location_count表&#xff0c;表中设置两个…

蚁剑流量分析

蚁剑流量分析 在靶机上面上传一个一句话木马&#xff0c;并使用蚁剑连接&#xff0c;进行抓包, 一句话木马内容 <?php eval($_POST[1]); defalut编码器 在使用蚁剑连接的时候使用default编码器 连接之后进行的操作行为是查看当前目录(/var/www/html)下的文件&#xff0…