Go微服务: Grpc服务注册在Consul的示例(非Go-Micro)

news2024/9/24 21:20:30

概述

  • 现在,我们使用consul客户端的api来把GRPC服务实现注册到consul上,非Go-Micro的形式
  • 其实,consul官方提供了对应的接口调用来实现,golang中的consul/api包对其进行了封装
  • 我们使用consul/api来进行展示

目录结构

gitee.com/go-micro-services/consul-grpc
	├── protos
	│     └── users
	│           ├── users.proto
	│           ├── users.pb.go
	│           └── users_grpc.pb.go
	├── main.go
	└── go.mod

1 ) protos 相关

  • 这里,protos 相关,参考之前的文章:https://blog.csdn.net/Tyro_java/article/details/136632015

2 )main.go

package main

import (
	"context"
	"fmt"
	"net"
	"strconv"

	"gitee.com/go-micro-services/consul-grpc/protos/users"
	"github.com/hashicorp/consul/api"
	"google.golang.org/grpc"
	"google.golang.org/grpc/health"
	"google.golang.org/grpc/health/grpc_health_v1"
)

// 定义通用度变量, 这里以后可以做成配置,仅做简单举例
var (
	host    string = "127.0.0.1"
	port    int    = 9000
	portStr string = strconv.Itoa(port)
	address        = host + ":" + portStr
)

type Users struct {
	users.UnimplementedUsersServer
}

func (g Users) AddUser(c context.Context, req *users.AddUserReq) (*users.AddUserRes, error) {
	fmt.Println(req)
	return &users.AddUserRes{
		Success: true,
		Message: "增加用户成功",
	}, nil
}

func (g Users) GetUser(c context.Context, req *users.GetUserReq) (*users.GetUserRes, error) {
	var tempList []*users.UsersModel
	for i := 0; i < 10; i++ {
		tempList = append(tempList, &users.UsersModel{
			Name: "商品" + strconv.Itoa(i),
			Age:  int32(i),
		})
	}
	return &users.GetUserRes{
		UserList: tempList,
	}, nil
}

func main() {
	// ----------------------- 1. 注册consul服务 -----------------------
	// 1、初始化consul配置
	consulConfig := api.DefaultConfig()
	consulConfig.Address = "127.0.0.1:8500" // consul服务的默认地址可省略,如果不是本机,需要补充

	// 2、获取consul操作对象
	consulClient, _ := api.NewClient(consulConfig)

	// 3、配置注册服务的参数
	agentService := api.AgentServiceRegistration{
		ID:      "uuu-1", // 不要重复
		Tags:    []string{"test"},
		Name:    "Users-Service",
		Port:    port, // 和下面 grpc server 的配置相同, 否则就连接不上微服务
		Address: host, // 同上
		Check: &api.AgentServiceCheck{
			GRPC:                           address,
			Timeout:                        "3s",
			Interval:                       "1s",
			DeregisterCriticalServiceAfter: "5s",
		},
	}
	//  4、注册服务到consul上
	consulClient.Agent().ServiceRegister(&agentService)
	// ----------------------- 2. 注册GRPC -----------------------
	// 1、获取Grpc示例
	grpcServer := grpc.NewServer()
	// 2、注册服务
	users.RegisterUsersServer(grpcServer, &Users{})
	// 3. 健康检查
	grpc_health_v1.RegisterHealthServer(grpcServer, health.NewServer())
	// 4、监听端口
	listener, err := net.Listen("tcp", address)
	if err != nil {
		fmt.Println(err)
	}
	// 5、退出服务的时候关闭监听
	defer listener.Close()
	// 6、启动服务
	grpcServer.Serve(listener)
}
  • 主要关注 main 函数中的注册和健康检查的配置

运行效果

  • 可见,运行和健康检查都正常

其他

  • 源码: https://gitee.com/go-micro-services/consul-grpc
  • consul文档:https://developer.hashicorp.com/consul/docs/services/usage/checks#grpc-checks

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

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

相关文章

纯CSS丝滑边框线条动画

在这个网站&#xff08;minimal-portfolio-swart.vercel.app&#xff09;发现一个不错的交互效果&#xff0c;用户体验效果很不错。如封面图所示&#xff0c;这个卡片上有一根白色的线条围绕着卡片移动&#xff0c;且在线条的卡片内部跟随这一块模糊阴影&#xff0c;特别是在线…

Execel 数据分析-如何使用筛选-图表-透视图-处理多变量数据集

如果你的数据有很多个变量&#xff0c;比如横轴X有a,b,c,d等几个变量&#xff0c;Y轴也有个变量&#xff0c;那么这时候就用得到。 比如下面的例子&#xff0c;测试GPU的kernel吞吐量&#xff0c;其中stream cnt&#xff0c;grid dim&#xff0c;block dim 产生后面几个变量&am…

如何给出好的“文言一心”指令?

一、文言一心是什么&#xff1f; 在现代技术背景下&#xff0c;“文言一心”还是百度公司创建的一款大语言模型。这款模型基于飞桨深度学习平台和文心知识增强大模型&#xff0c;并拥有强大的中文语料库&#xff0c;可以理解和生成富含文化内涵和哲理的文本内容。其核心技术架构…

第三方软件测试机构进行代码审计需要哪些专业的知识?

代码审计 进行代码审计需要专业的知识&#xff0c;包括编程语言、操作系统、数据库、网络知识以及安全知识等。 1.编程语言知识是进行代码审计的基础&#xff0c;因为你需要理解代码的语法和结构。对于不同的应用程序&#xff0c;你需要了解其所使用的编程语言的特点和语法规…

如何利用InputStream类实现文件读取与处理?

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

嵌入式UI开发-lvgl+wsl2+vscode系列:2、label(标签)+button(按钮)+slider(滑块)控件熟悉及其示例demo运行

文章目录 一、前言二、常见控件示例demo模拟环境运行及接口熟悉&#xff08;重要&#xff09;如何修改示例main函数测试各种示例1、label示例1.1、label示例1&#xff08;标签基础示例&#xff09;1.2、label示例2&#xff08;标签带阴影效果&#xff09;1.3、label示例3&#…

在微信公众号怎么添加留言板功能

在如今信息爆炸的时代&#xff0c;微信公众号已成为企业与用户互动的重要桥梁。如何在这个平台上脱颖而出&#xff0c;吸引用户的眼球&#xff0c;提升用户黏性&#xff0c;成为每一个公众号运营者都需要思考的问题。今天&#xff0c;我们就来聊聊如何在微信公众号中巧妙添加留…

新浪测试社招要个25K,第一次面大厂挂了

一面 1、讲下被测系统和你负责测试的模块功能&#xff1f; 2、为什么选择这个测试框架&#xff0c;这个测试框架有什么优缺点&#xff1f; 3、测试文件的目录&#xff0c;包含哪些包&#xff0c;这些之间是怎么调用的&#xff1f; 4、UI自动化和接口自动化都是怎么做的&…

【C语言】大小端字节序存储

引子 不知道你是否像我一样好奇过一个问题&#xff1a;为什么每当我们在调试查看内存窗口时&#xff0c;&#xff08;以int类型为例&#xff09;4个字节内容存储的顺序好像是倒着的。 比如下面这张图&#xff0c;十进制数2077转换为十六进制是0x81d&#xff0c;四个字节分别是…

Windows 11 HBuilder X的安装和环境搭建教程

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 HBuilder X是一个由DCloud推出的集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于构建基于HTML、CSS和JavaScript的跨平台应用程序&#xff0c;如微信小程序、App、H5等。它提供了丰富的功能…

【iOS】Block总结

文章目录 前言一、Block如何捕获外界变量1.捕获自动变量2.捕获静态局部变量3.全局、全局静态变量 二、__block修饰符三、Block的类型四、判断block存储在哪里五、Block的copy操作六、源码分析Block_copy()七、__block 与 __forwarding八、block发生copy的时机总结 前言 之前的…

鹏哥C语言复习——程序的编译、链接和预处理

目录 可执行程序的生成&#xff1a; 预处理&#xff08;预编译&#xff09;&#xff1a; 预定义符号&#xff1a; #define&#xff08;重难点&#xff09;&#xff1a; 第一种的讲解&#xff08;定义常量&#xff09;&#xff1a; 第二种的讲解&#xff08;定义宏&#x…

怎么添加微信留言板功能

在这个信息爆炸的时代&#xff0c;如何让自己的微信公众号或朋友圈内容脱颖而出&#xff0c;成为每位内容创作者思考的问题。今天&#xff0c;我将为您揭示一种新颖且实用的功能——微信留言板&#xff0c;并带您探讨如何通过巧妙设置&#xff0c;将其打造成独一无二的主题&…

RuntimeError: CUDA out of memory. Tried to allocate 1.77 GiB?如何解决

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

JavaWeb-JS

目录 学习重点 什么是 JavaScript? Web标准 JS的引入方式 JS的基本语法 JS的函数 JS的对象 JS事件监听 学习重点 js 引入方式 js 基础语法 js 函数 js 对象 js 事件监听 什么是 JavaScript? Web标准 Web 标准也称为网页标准 &#xff0c;由一系列的标准组成&#xff0…

Spring - Spring Cache 缓存注解这样用,实在是太香了!

作者最近在开发公司项目时使用到 Redis 缓存&#xff0c;并在翻看前人代码时&#xff0c;看到了一种关于 Cacheable 注解的自定义缓存有效期的解决方案&#xff0c;感觉比较实用&#xff0c;因此作者自己拓展完善了一番后分享给各位。 Spring 缓存常规配置 Spring Cache 框架给…

GpuMall智算云:AUTOMATIC1111/stable-diffusion-webui/stable-diffusion-webui-v1.8.0

配置环境介绍 目前平台集成了 Stable Diffusion WebUI 的官方镜像&#xff0c;该镜像中整合如下资源&#xff1a; GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 Stable Diffusion WebUI版本&#xff1a;v1.8.0 Python版本&#xff1a;3.10.…

运维专题.Docker功能权限(Capabilities)管理和查看

运维专题 Docker功能权限&#xff08;Capabilities&#xff09; - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:htt…

Python深度学习基于Tensorflow(12)实战生成式模型

文章目录 Deep Dream风格迁移参考资料 Deep Dream DeepDream 是一项将神经网络学习模式予以可视化展现的实验。与孩子们观察云朵并尝试解释随机形状相类似&#xff0c;DeepDream 会过度解释并增强其在图像中看到的图案。 DeepDream为了说明CNN学习到的各特征的意义&#xff0c…

SQL使用函数给多个分表添加同一字段

数据库中分表时&#xff0c;往往需要向多个分表中添加同一个字段&#xff0c;可以定义一个函数&#xff0c;每次调用这个函数向多个份表中添加同意字段。 1、创建函数示例&#xff1a; 在PostgreSQL中创建一个简单的函数 以下是一个在PostgreSQL中创建函数的简单示例&#x…