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

01 创建go-micro项目-查看生成的 proto文件

02 创建go-micro项目-查看生成的main文件和handler

## 创建 micro 服务

命令:micro new --type srv test66

框架默认自带服务发现:mdns。

使用consul服务发现:

    1. 初始consul服务发现: consulReg := consul.NewRegistry()
     2. 在 NewService 中 添加 服务。 micro.Registry(consulReg ),

03 http补充说明知识

# 使用 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 文件,做默认页面。

### go-micro 框架 测试使用 分析图

04 go-micro框架服务端-客户端测试

# gin 框架

go常见的web框架:gin、beego、echo、Iris 。。。

### 实现简单的 web 

http 常用方法与 数据库访问 一一对应。

- GET —— 查 —— 获取数据
- Post —— 增 —— 增加数据
- Put —— 改 —— 更新数据
- Delete —— 删 —— 删除数据

05 gin框架介绍和测试

06 gin框架客户端与micro服务端对接

### 使用 gin 框架创建最简单的web 

```go

func main()  {
    // 1. 初始化路由 -- 官网:初始化 web 引擎
    router := gin.Default()

    // 2. 做路由匹配
    router.GET("/", func(context *gin.Context) {
        context.Writer.WriteString("hello world!")
    })

    // 3. 启动运行
    router.Run(":8080")
}
```

07 使用访问发现consul测试

### 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 main

import (
    "github.com/gin-gonic/gin"
    "fmt"
    test66 "test66web/proto/test66"     // test66 为包的别名.
    "github.com/micro/go-micro/client"
    "context"
)

08 consul使用图解和RESTful

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)
}

func main()  {
    // 1. 初始化路由 -- 官网:初始化 web 引擎
    router := gin.Default()

    // 2. 做路由匹配
    router.GET("/", CallRemote)

    // 3. 启动运行
    router.Run(":8080")
}

09 MVC简介

### 指定 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

10 创建项目-创建目录结构-查看文档-导入错误处理包

#### 修改 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)

11 创建项目-资源目录html介绍

# REST 

REST全称是Representational State Transfer:  表述性 状态 转义

本质:一种代码设计风格。  web开发中常用。——遵循风格!

使用:一般以 http 4 种请求方法, 来确定对某一资源(URI:标识符。名词)的 固定操作。

- 获取数据:GET
- 添加数据:POST
- 修改数据:PUT
- 删除数据:Delete

​        满足 REST 设计风格的, 称之为 “RESTful”

​    

# MVC

- 是一种常见的 “代码组织架构”, 可以在开发中,对数据进行处理并解耦。
    - model:模型。 处理数据库相关的文件。
    - veiw:视图。处理显示相关的文件。 网站:html
    - controller:控制器。处理具体业务!  联动 m 和 v
- MVC 与语言无关!是常见的 代码组织架构。

![1581924280038](课堂笔记-03.assets/1581924280038.png)

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

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

相关文章

Redis--常见数据类型List列表

目录 一、概念 二、命令 2.1 LPUSH 2.2 LPUSHX 2.3 RPUSH 2.4 RPUSHX 2.5 LRANGE 2.6 LPOP 2.7 RPOP 2.8 LINDEX 2.9 LINSERT 2.10 LLEN 2.11 阻塞版本命令 三、内部编码 一、概念 列表类型是用来存储多个有序的字符串,列表中的每个字符串称为元素&…

QListWedget控件使用指南

QListWedget公共函数 函数签名功能描述QListWidget(QWidget *parent nullptr)构造函数,创建一个QListWidget对象,可指定父部件(默认为nullptr)。virtual ~QListWidget()虚析构函数,释放QListWidget对象及其资源。voi…

Seata源码—1.Seata分布式事务的模式简介

大纲 1.Seata分布式事务框架简介 2.Seata AT模式实现分布式事务的机制 3.Seata AT模式下的写隔离机制 4.Seata AT模式下的读隔离机制 5.官网示例说明Seata AT模式的工作机制 6.Seata TCC模式的介绍以及与AT模式区别 7.Seata Saga模式的介绍 8.单服务多个库的分布式事务…

【Qt】之音视频编程2:QtAV的使用篇

QtAV 基本播放控制功能实现&#xff08;C & QML&#xff09; QtAV 提供了完整的播放控制 API&#xff0c;支持 播放、暂停、停止、快进快退、截屏 等功能。以下是具体实现方法&#xff1a; 1. C 控制方式 基本播放控制 #include <QtAV> #include <QtAV/AVPlaye…

歌词滚动效果

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><!-- 设置标签页图标 --><link rel"shortcut icon&…

基于大模型的TIA诊疗全流程智能决策系统技术方案

目录 一、多模态数据融合与预处理系统1.1 数据接入模块1.2 数据预处理伪代码二、TIA智能预测模型系统2.1 模型训练流程2.2 混合模型架构伪代码三、术中智能监测系统3.1 实时监测流程3.2 实时预测伪代码四、智能诊疗决策系统4.1 手术方案推荐流程4.2 麻醉方案生成伪代码五、预后…

Java 日期解析与格式化:从标准格式到自然语言解析

使用 Java 搭配 Apache Commons Lang3 和 Natty 库&#xff0c;实现灵活高效的日期解析与格式化。 一、背景 将不同格式的日期统一成一个格式。日期格式可能有以下几种类型&#xff1a; 标准格式&#xff1a;2024-02-28、14/05/2022、2002年5月6日非英文月份缩写&#xff1a;…

Room持久化库:从零到一的全面解析与实战

简介 在Android开发中,Room作为官方推荐的数据库持久化库,提供了对SQLite的抽象层,使得数据库操作更加安全、高效且易于维护。 Room通过注解处理器和编译时验证,显著降低了数据库操作的复杂度,同时支持响应式编程模式,使开发者能够轻松实现数据变化的实时监听。对于企业…

MySQL(6)如何删除数据库和表?

在 MySQL 中删除数据库和表是常见的管理操作。下面将详细介绍如何使用 SQL 语句以及图形化工具来删除数据库和表。 步骤一&#xff1a;连接 MySQL 服务器 首先&#xff0c;连接到 MySQL 服务器&#xff0c;可以使用命令行工具 mysql 或图形化工具如 MySQL Workbench。 使用命…

携固态电池、新形态钢壳叠片电池等产品 豪鹏科技将亮相CIBF 2025

携固态电池、新形态钢壳叠片电池等产品 豪鹏科技将亮相CIBF 2025 来源&#xff1a; 电池百人会-电池网 豪鹏科技&#xff08;展位号:14W001&#xff09;将携固态电池、新形态钢壳叠片电池及高安全性钠离子电池等前沿技术产品亮相CIBF 2025&#xff0c;凭借多年的技术积累和产…

React学习———useEffect和useLayoutEffect

useEffect useEffect是React的一个Hook&#xff0c;用于在函数组件中处理副作用。副作用包括数据获取、订阅、手动DOM操作以及其他需要再渲染后执行的操作 基本用法 useEffect(() > {// 副作用逻辑return () > {// 可选的清理函数} }, [依赖数组])第一个参数&#xff…

“天神之眼”计算平台的算力设计(预计500-1000 TOPS)

关于比亚迪“天神之眼”计算平台的算力设计&#xff08;预计500-1000 TOPS&#xff09;&#xff0c;其技术路径和行业意义值得深入探讨。以下从实现方式、技术挑战和行业影响三个维度展开分析&#xff1a; 1. 多芯片互联的技术实现路径 &#xff08;1&#xff09;芯片选型方案…

FPGA: Xilinx Kintex 7实现PCIe接口

在Xilinx Kintex-7系列FPGA上实现PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;接口&#xff0c;通常使用Xilinx提供的7 Series Integrated Block for PCIe IP核&#xff0c;结合Vivado设计流程。以下是实现PCIe接口的详细步骤和关键点&#xff0c;适…

ArcGIS Desktop使用入门(二)常用工具条——图形

系列文章目录 ArcGIS Desktop使用入门&#xff08;一&#xff09;软件初认识 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——标准工具 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——编辑器 ArcGIS Desktop使用入门&#xff08;二&#x…

JT/T 808 通讯协议及数据格式解析

文章目录 一、引言二、协议数据帧结构三、消息头结构&#xff08;Message Header&#xff09;四、常用消息类型&#xff08;Message ID&#xff09;五、典型消息体结构解析六、数据转义规则七、校验码计算方法八、终端与平台通信流程示意&#xff08;简要&#xff09;九、平台接…

Rust 输出到命令行

Rust 输出到命令行 引言 Rust 是一门系统编程语言&#xff0c;以其高性能、内存安全、并发支持和零成本抽象等特性而闻名。在开发过程中&#xff0c;将 Rust 程序的输出传递到命令行是常见的需求。本文将详细介绍 Rust 输出到命令行的多种方法&#xff0c;帮助读者掌握这一技…

从字符串转换到矩阵快速幂:解决多次转换后的长度问题

引言 在编程竞赛和算法问题中&#xff0c;我们经常会遇到需要对字符串进行多次转换的问题。本文将介绍一个有趣的问题&#xff1a;给定一个字符串和转换规则&#xff0c;计算经过多次转换后字符串的长度。由于直接模拟会导致性能问题&#xff0c;我们将使用矩阵快速幂来高效解…

Vue2 elementUI 二次封装命令式表单弹框组件

需求&#xff1a;封装一个表单弹框组件&#xff0c;弹框和表单是两个组件&#xff0c;表单组件以插槽的形式动态传入弹框组件中。 外部组件使用的方式如下&#xff1a; 直接上代码&#xff1a; MyDialog.vue 弹框组件 <template><el-dialog:titletitle:visible.syn…

React Hooks:从“这什么鬼“到“真香“的奇幻之旅

写在前面:一个让React老手都拍案叫绝的魔法 “等等,函数组件怎么能有状态?!” —— 这是2018年我第一次听说React Hooks时的反应。当时我正在用class组件写一个复杂的表单,生命周期方法乱得像一碗意大利面。直到我看到了这段代码: function Counter() {const [count, s…

论文阅读笔记——双流网络

双流网络论文 视频相比图像包含更多信息&#xff1a;运动信息、时序信息、背景信息等等。 原先处理视频的方法&#xff1a; CNN LSTM&#xff1a;CNN 抽取关键特征&#xff0c;LSTM 做时序逻辑&#xff1b;抽取视频中关键 K 帧输入 CNN 得到图片特征&#xff0c;再输入 LSTM&…