乐趣区

关于grpc:预览目录gozero必知必会

go-zero 必知必会

服务注册发现

一、服务注册发现分类

【阐明】: 其余服务发现形式看 https://github.com/zeromicro/… 官网 demo,其中 yaml 中,etcd、IP 直连、k8s 三种配置文件也不是对立的

默认形式 etcd
  1. api 配置文件
#gateway-api.yaml
#api 服务发现配置模块
AdminRpc:
  Timeout: 10000
  Etcd:
    Hosts:
      - 127.0.0.1:2379
    Key: admin.rpc
  1. rpc 配置文件
#admin.yaml
Name: admin.rpc
ListenOn: 127.0.0.1:8080
#rpc 服务发现配置模块
Etcd:
  Hosts:
  - 127.0.0.1:2379
  Key: admin.rpc
kubernetes

【阐明】: 举荐应用 k8s 形式部署对应利用,这样能够缩小保护一套 etcd 集群。

1.api 配置文件

#gateway-api.yaml
#api 服务发现配置模块
AdminRpc:
  Timeout: 10000
  Endpoints:
    - 127.0.0.1:39511

2.rpc 配置文件

#admin.yaml
Name: admin.rpc
ListenOn: 127.0.0.1:8080
#rpc 服务发现配置模块, 不须要配置 
IP 直连

1.api 配置文件

#gateway-api.yaml
#api 服务发现配置模块
AdminRpc:
  Timeout: 10000
  Endpoints:
    - 127.0.0.1:39511

2.rpc 配置文件

#admin.yaml
Name: admin.rpc
ListenOn: 127.0.0.1:8080
#rpc 服务发现配置模块, 不须要配置 
consul
nacos
polaris

二、框架组件

(一)、Api 定义

(二)、我的项目配置

  1. rest.RestConf 配置

    配置构造体

    RestConf struct {
        service.ServiceConf
        Host     string `json:",default=0.0.0.0"`
        Port     int
        CertFile string `json:",optional"`
        KeyFile  string `json:",optional"`
        Verbose  bool   `json:",optional"`
        MaxConns int    `json:",default=10000"`
        MaxBytes int64  `json:",default=1048576"`
        // milliseconds
        Timeout      int64         `json:",default=3000"`
        CpuThreshold int64         `json:",default=900,range=[0:1000]"`
        Signature    SignatureConf `json:",optional"`
    }
    // 成员 service.ServiceConf
    type ServiceConf struct {
        Name       string
        Log        logx.LogConf
        Mode       string            `json:",default=pro,options=dev|test|rt|pre|pro"`
        MetricsUrl string            `json:",optional"`
        Prometheus prometheus.Config `json:",optional"`
        Telemetry  trace.Config      `json:",optional"`
    }
    
    // 成员 Signature
    SignatureConf struct {
        Strict      bool          `json:",default=false"`
        Expiry      time.Duration `json:",default=1h"`
        PrivateKeys []PrivateKeyConf}
    

    第 1 步: 在 internal/config/config.go 新增配置文件

    【阐明】: 以后配置实践上只会存在于 api 模块中。

    package config
    
    import ("github.com/zeromicro/go-zero/rest")
    
    type Config struct {rest.RestConf}

    第 2 步: 在 YAML 文件配置残缺版本:

    Name: gateway-api   #ServiceConf.Name
    Host: 0.0.0.0        #RestConf.Host
    Port: 9510            #RestConf.Port
    Mysql:
      Datasource: root:123456@tcp(127.0.0.1:3306)/admin?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai
    AdminRpc:
      Timeout: 10000
      Etcd:
        Hosts:
          - 127.0.0.1:2379
        Key: admin.rpc
  1. zrpc.RpcClientConf 配置
  2. zrpc.RpcServerConf 配置
  3. 数据源 Mysql 配置
  4. Auth 权限配置
  5. Redis 缓存 cache.CacheConf 配置
  6. Redis 数据库配置
  7. 其余自定义扩大配置

(三)、序列化.

  • form
  • json
  • protobuf
  • xml
  • yaml

(四)、错误处理.

(五)、日志.

(六)、元信息传递.

(七)、head 申请头信息传递.

(八)、路由负载平衡.

(九)、中间件.

(十)、传输协定.

(十一)、model 不定参数查问、中间件 context 传值、配置文件详解、SSL 证书、ETCD 证书、参数验证

(十二)、传输协定

(十三)、分布式事务

(十四)、接口限流和超时设置、协程形式应用

(十五)、生产环境抉择计划

  1. Docker 模式 +ETCD 集群 / 单体【正文:vpc+slb】
  2. 守护过程 +ETCD 集群 / 单体
  3. k8s 集群
退出移动版