C++GO语言微服务和服务发现

目录

01 03-go-micro简介

02 04-服务发现的简单认识

03 05-consul的安装

04 06-consul常用的命令

05 07-注册服务到consul并验证

06 08-consul健康检查

07 09-consul结合grpc使用-上(只实现grpc远程调用)

08 10-consul结合grpc使用-中(注册服务到consul)

09 11-consul结合grpc使用-下(client从consul获取服务

10 12-consul结合grpc使用-小结

11 13-服务注销


01go-micro简介

# go-Micro 框架## 创建 micro 服务命令:micro new --type srv test66框架默认自带服务发现:mdns。使用consul服务发现:1. 初始consul服务发现: consulReg := consul.NewRegistry()2. 在 NewService 中 添加 服务。 micro.Registry(consulReg ),## 使用 go-micro框架 创建 客户端命令:micro new --type web test77### 补充 http 相关知识:- 路由器:资源分发
- 路由:请求分发。- service.HandleFunc("/test77/call", handler.Test77Call)- 将 /test77/call 这个请求,通过 回到函数 Test77Call() 处理。
- URL:- 组成:https://ip+port/资源路径- https://ip+port/   找到 pc机,找到 对应进程- 资源路径:在代码中,称之为路由。- “/ ” : 代表 主机上进程 对应的默认资源。- http协议,自动找当前目录下的 index.html 文件,做默认页面。

02 服务发现的简单认识

### go-micro 框架 测试使用 分析图![1581907970023](课堂笔记-03.assets/1581907970023.png)# gin 框架go常见的web框架:gin、beego、echo、Iris 。。。### 实现简单的 web http 常用方法与 数据库访问 一一对应。- GET —— 查 —— 获取数据
- Post —— 增 —— 增加数据
- Put —— 改 —— 更新数据
- Delete —— 删 —— 删除数据​	

03 consul的安装

### 使用 gin 框架创建最简单的web ```gofunc main()  {// 1. 初始化路由 -- 官网:初始化 web 引擎router := gin.Default()// 2. 做路由匹配router.GET("/", func(context *gin.Context) {context.Writer.WriteString("hello world!")})// 3. 启动运行router.Run(":8080")
}
```### gin 框架的客户端 与 微服务 对接1.  封装回调函数, 给 router.Get() 设置2.  拷贝 微服务的 “ 密码本” protobuf 到  web 中3.  修改 protobuf文件的 包名。  test66别名  “test66web/proto/test66”4.  实现 回调函数:1. 初始化客户端。    microClient := NewTeset66Sevice(服务名,client.DefaultClient)2. 调用远程服务。    resp, err := microClient.Call(context.TODO, &test66.Request{​						       })3. 将 返回的 数据, 显示到 浏览器。 context.Writer.WriteString(resp.Msg);```go
package mainimport ("github.com/gin-gonic/gin""fmt"test66 "test66web/proto/test66"     // test66 为包的别名."github.com/micro/go-micro/client""context"
)func CallRemote(ctx *gin.Context)  {// 1. 初始化客户端microClient := test66.NewTest66Service("go.micro.srv.test66", client.DefaultClient)fmt.Println()// 2. 调用远程服务resp, err := microClient.Call(context.TODO(), &test66.Request{Name:"xiaowang",})if err != nil {fmt.Println("call err:", err)return}// 为了方便查看, 在打印之前将结果返回给浏览器ctx.Writer.WriteString(resp.Msg)fmt.Println(resp, err)
}

04 consul常用的命令

func main()  {// 1. 初始化路由 -- 官网:初始化 web 引擎router := gin.Default()// 2. 做路由匹配router.GET("/", CallRemote)// 3. 启动运行router.Run(":8080")
}```![1581911529452](课堂笔记-03.assets/1581911529452.png)### 指定 consul 服务发现到 go-micro 服务和 gin 框架客户端中- mdns服务发现: (组播)支持的服务,必须是本地服务, 局域网内的服务。#### 修改 go-micro 微服务1. consulReg := consul.NewRegistry()   初始化 consul服务发现
2. 添加 服务 service := micro.NewService(micro.Name("go.micro.srv.test66"),micro.Registry(consulReg),micro.Version("latest"),)3. 在命令行,执行 consul agent -dev

05 注册服务到consul并验证

#### 修改 gin 框架 web服务 (客户端)1.  consulReg := consul.NewRegistry()   初始化 consul服务发现
2.  microClinet := micro.NewService( micro.Registry(consulReg ) )
3.  test66.NewTest66Service(“服务名”,microClinet.Client() )测试:浏览器键入: 192.168.6.108:8080  ——> hello xiaowang ![1581922279521](课堂笔记-03.assets/1581922279521.png)# REST REST全称是Representational State Transfer:  表述性 状态 转义本质:一种代码设计风格。  web开发中常用。——遵循风格!使用:一般以 http 4 种请求方法, 来确定对某一资源(URI:标识符。名词)的 固定操作。- 获取数据:GET
- 添加数据:POST
- 修改数据:PUT
- 删除数据:Delete​		满足 REST 设计风格的, 称之为 “RESTful”

06 consul健康检查

# MVC- 是一种常见的 “代码组织架构”, 可以在开发中,对数据进行处理并解耦。- model:模型。 处理数据库相关的文件。- veiw:视图。处理显示相关的文件。 网站:html- controller:控制器。处理具体业务!  联动 m 和 v
- MVC 与语言无关!是常见的 代码组织架构。![1581924280038](课堂笔记-03.assets/1581924280038.png)# 项目准备1. 准备项目环境。1. 创建项目目录  web、service2. 在 web 端 使用 MVC3. 创建项目常用目录: conf 配置文件、utils 工具类、bin可执行文件、test测试目录4. 导入 异常处理error.go5. 导入前端资源 html/ 到 view/ 中2. 开发项目1. 开发 微服务端2. 开发 web 服务(客户端)### http协议错误5 类:1. 1xx	   100		请求成功,需要继续发送请求
2. 2xx       200   201  202    请求被成功接收。
3. 3xx       300 301               请求的资源,指定到对应的 URI上
4. 4xx       404  403              请求端错误
5. 5xx       500 501  502      服务端错误### 网站开发形式:1. 前后端不分离- 前端只负责页面创建,不负责加载数据。- 后台负责主要业务书写,数据操作、加载。—— 需要后端会 web。 css 、js、h5 
2. 前后端分离- 前端负责页面创建 和 数据的加载。- 后端只负责数据处理。  —— 节省时间:服务器优化     1)健壮性 2)并发性。

07 consul结合grpc使用-上(只实现grpc远程调用)

# 获取 session 1.  在 web/main.go 中 , 跟据 gin 框架 使用static() , 设置访问路径
2. F12 浏览器中,查看 NetWork 中 Headers 和  Respose。 得到 url
3. 查看 《接口文档.doc》, 获取 url 、错误码、错误处理函数。
4. 在 web/ 下 遵循 MVC 设计模式创建  controller 目录。添加 user.go
5. 根据 《接口文档.doc》实现错误函数。1. resp[“errno”]2. resp[“errmsg”]3. ctx.Json(200, resp)  // 将 错误消息,进行序列化。返回给浏览器。
6.  url寻址时,都是从 “/‘’ 开始, 产生歧义- router.Static(“/”)    --- 修改为: router.Static(“/home”)7. 浏览器测试: IP:8080/home 

08 consul结合grpc使用-中(注册服务到consul)

09 consul结合grpc使用-下(client从consul获取服务

10 consul结合grpc使用-小结

11 服务注销

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

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

相关文章

HDFS 常用基础命令详解——快速上手分布式文件系统

简介: 本文面向刚接触 Hadoop HDFS(Hadoop 分布式文件系统)的读者,结合 CSDN 博客风格,系统梳理最常用的 HDFS 客户端命令,并配以示例和注意事项,帮助你在开发和运维中快速掌握 HDFS 的文件管理…

VUE CLI - 使用VUE脚手架创建前端项目工程

前言 前端从这里开始,本文将介绍如何使用VUE脚手架创建前端工程项目 1.预准备(编辑器和管理器) 编辑器:推荐使用Vscode,WebStorm,或者Hbuilder(适合刚开始练手使用),个…

make和makefile的使用,以及写一个简单的进度条程序

1.自动化构建-make/makefile 1.1 背景 一个工程文件中的文件不计其数,其按类型、功能、模块放在若干目录中,makefile定义了一系列规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于过呢…

数据结构中的栈与队列:原理、实现与应用

前言:栈和队列是计算机科学中两种最基础的线性数据结构,它们的独特操作规则和广泛的应用场景使其成为每一位开发者必须掌握的核心知识。本文将通过生活案例、代码实现和实际应用场景,带您深入理解这两种数据结构的精髓。 1.栈(Sta…

如何选择自己喜欢的cms

选择内容管理系统cms what is cms1.whatcms.org2.IsItWP.com4.Wappalyzer5.https://builtwith.com/6.https://w3techs.com/7. https://www.netcraft.com/8.onewebtool.com如何在不使用 CMS 检测器的情况下手动检测 CMS 结论 在开始构建自己的数字足迹之前,大多数人会…

SDC命令详解:使用all_outputs命令进行查询

相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html all_outputs命令用于创建一个输出端口对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。 Synopsys:设计对象https://chenzhang.blog.csdn…

vue 中的ref

vue 中的ref vue 中的ref 1. ​​ref​​ ** 的基本作用** 在 Vue 中&#xff0c;ref 是用来获取 DOM 元素或者组件实例的一种方式。对于 <el-form> 组件&#xff0c;通过 ref 可以获取到该表单组件的实例&#xff0c;进而调用表单组件提供的各种方法和访问其属性。 …

数据库版本控制工具--flyway

一. 什么是Flyway Flyway 是一款开源的数据库迁移工具。它采用简单直观的方式管理数据库变更&#xff0c;通过版本化的迁移脚本确保数据库结构的一致性和可重复性。无论是开发环境、测试环境还是生产环境&#xff0c;Flyway 都能确保数据库变更按照预期顺序执行&#xff0c;避…

C++使用PoDoFo库处理PDF文件

&#x1f4da; PoDoFo 简介 PoDoFo 是一个用 C 编写的自由开源库&#xff0c;专用于 读取、写入和操作 PDF 文件。它适用于需要程序化处理 PDF 文件的应用程序&#xff0c;比如批量生成、修改、合并、提取元数据、绘图等。 &#x1f31f; 核心特点 特性说明&#x1f4c4; P…

论文分享➲ arXiv2025 | TTRL: Test-Time Reinforcement Learning

TTRL: Test-Time Reinforcement Learning TTRL&#xff1a;测试时强化学习 https://github.com/PRIME-RL/TTRL &#x1f4d6;导读&#xff1a;本篇博客有&#x1f9a5;精读版、&#x1f407;速读版及&#x1f914;思考三部分&#xff1b;精读版是全文的翻译&#xff0c;篇幅较…

dify插件接入fastmcp示例

文章目录 1. 使用python完成mcp服务1.1 准备环境&#xff08;python安装fastmcp&#xff09;1.2 mcp服务端示例代码1.3 启动mcp服务端 2. dify接入2.1 安装MCP SSE和 Agent 策略&#xff08;支持 MCP 工具&#xff09; 插件2.2 dify agent插件配置mcp:2.3 mcp服务配置&#xff…

Linux 挖矿木马排查命令清单

Linux 挖矿木马排查命令清单 1. 系统资源使用情况检查 # 查看CPU、内存使用情况 top -c# 检查CPU占用最高的进程 ps aux --sort-%cpu# 查找可疑进程名 ps -ef | grep -i miner\|cpu\|GPU\|xmr# 检查网络连接情况 lsof -i2. 可疑进程和隐藏进程检查 # 检查僵尸进程 ps -ef | …

PyTorch 中如何针对 GPU 和 TPU 使用不同的处理方式

一个简单的矩阵乘法例子来演示在 PyTorch 中如何针对 GPU 和 TPU 使用不同的处理方式。 这个例子会展示核心的区别在于如何获取和指定计算设备&#xff0c;以及&#xff08;对于 TPU&#xff09;可能需要额外的库和同步操作。 示例代码&#xff1a; import torch import tim…

自主shell命令行解释器

目标 能处理普通命令能处理内建命令 实现原理 用下面的时间轴来表示时间发生次序。时间从左向右。shell由标识为sh的方块&#xff0c;它随着时间从左向右移动。 shell从用户读入字符串“ls”。shell建立一个新的进程&#xff0c;然后等待进程中运行ls程序并等待进程结束。 …

如何在sheel中运行Spark

启动hdfs集群&#xff0c;打开hadoop100:9870&#xff0c;在wcinput目录下上传一个包含很多个单词的文本文件。 启动之后在spark-shell中写代码。 // 读取文件&#xff0c;得到RDD val rdd1 sc.textFile("hdfs://hadoop100:8020/wcinput/words.txt") // 将单词进行切…

【入门】数字走向II

描述 输入整数N&#xff0c;输出相应方阵。 输入描述 一个整数N。&#xff08; 0 < n < 10 ) 输出描述 一个方阵&#xff0c;每个数字的场宽为3。 #include <bits/stdc.h> using namespace std; int main() {int n;cin>>n;for(int in;i>1;i--){for(…

Python自动化-python基础(下)

六、带参数的装饰器 七、函数生成器 运行结果&#xff1a; 八、通过反射操作对象方法 1.添加和覆盖对象方法 2.删除对象方法 通过使用内建函数: delattr() # 删除 x.a() print("通过反射删除之后") delattr(x, "a") x.a()3 通过反射判断对象是否有指定…

重新定义高性能:Hyperlane —— Rust生态中的极速HTTP服务器

重新定义高性能&#xff1a;Hyperlane —— Rust生态中的极速HTTP服务器 &#x1f680; 为什么选择Hyperlane&#xff1f; 在追求极致性能的Web服务开发领域&#xff0c;Hyperlane 凭借其独特的Rust基因和架构设计&#xff0c;在最新基准测试中展现出令人惊艳的表现&#xff…

通俗的理解MFC消息机制

1. 消息是什么&#xff1f; 想象你家的门铃响了&#xff08;比如有人按门铃、敲门、或者有快递&#xff09;&#xff0c;这些都是“消息”。 在 MFC 中&#xff0c;消息就是系统或用户触发的各种事件&#xff0c;比如鼠标点击&#xff08;WM_LBUTTONDOWN&#xff09;、键盘输入…

腾讯开源SuperSonic:AI+BI如何重塑制造业数据分析?

目录 一、四款主流ChatBI产品 二、ChatBI应用案例与实际落地情况 三、SuperSonic底层原理 3.1、Headless BI 是什么 3.2、S2SQL 是什么 3.3、SuperSonic 平台架构 四、ChatBI应用细节深挖 五、与现有系统的集成方案 六、部署和安全 七、开源生态、可扩展性与二次开…