go-zero使用consul作为注册中心

news2024/9/21 12:21:38

目录

在rpc服务中添加配置

导入包:

在rpc服务中添加配置:

引入 Consul config 配置项

user.yml 文件

修改 user.go,将 rpc注册到consul

rpc的发现

在api服务中添加配置:

修改api/etc/user.yam 文件

修改 user.yml

修改api/user.go

启动rpc服务和api服务


在rpc服务中添加配置

导入包:

go get -u github.com/zeromicro/zero-contrib/zrpc/registry/consul

在rpc服务中添加配置:

进入项目代码 /gopath/gonivinck/code/go-zero-mall/

修改 service/user/rpc/internal/configrpc/internal/config 文件

引入 Consul config 配置项

vim /usr/src/code/go-zero-mall/service/user/rpc/internal/config/config.go

package config

import (
        "github.com/zeromicro/go-zero/core/logx"
        "github.com/zeromicro/go-zero/core/stores/cache"
        "github.com/zeromicro/go-zero/zrpc"
        "github.com/zeromicro/zero-contrib/zrpc/registry/consul"
)

type Config struct {
        zrpc.RpcServerConf

        Mysql struct {
                DataSource string
        }

        CacheRedis cache.CacheConf

        Salt string
        //引入consul配置
        Consul consul.Conf
        Log    logx.LogConf
}

user.yml 文件

vim /usr/src/code/go-zero-mall/service/user/rpc/etc/user.yml

Name: user.rpc
ListenOn: 0.0.0.0:9000

#Etcd:
#  Hosts:
#    - etcd:2379
#  Key: user.rpc
Consul:
  Host: 192.168.20.51:8500 #consul地址
  Key: user.rpc
Log:
  level: error

Mysql:
  DataSource: root:123456@tcp(mysql:3306)/mall?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai

CacheRedis:
  - Host: redis:6379
    Type: node
    Pass:

Salt: HWVOFkGgPTryzICwd7qnJaZR9KQ2i8xe

修改 user.go,将 rpc注册到consul

vim /usr/src/code/go-zero-mall/service/user/rpc/user.go

package main

import (
        "flag"
        "fmt"
        "github.com/zeromicro/zero-contrib/zrpc/registry/consul"

        "mall/service/user/rpc/internal/config"
        "mall/service/user/rpc/internal/server"
        "mall/service/user/rpc/internal/svc"
        "mall/service/user/rpc/types/user"

        "github.com/zeromicro/go-zero/core/conf"
        "github.com/zeromicro/go-zero/core/service"
        "github.com/zeromicro/go-zero/zrpc"
        "google.golang.org/grpc"
        "google.golang.org/grpc/reflection"
)

var configFile = flag.String("f", "etc/user.yaml", "the config file")

func main() {
        flag.Parse()

        var c config.Config
        conf.MustLoad(*configFile, &c)
        ctx := svc.NewServiceContext(c)
        svr := server.NewUserServer(ctx)

        s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) {
                user.RegisterUserServer(grpcServer, svr)

                if c.Mode == service.DevMode || c.Mode == service.TestMode {
                        reflection.Register(grpcServer)
                }
        })
        //将 rpc注册到consul
        _= consul.RegisterService(c.ListenOn,c.Consul)
        defer s.Stop()

        fmt.Printf("Starting rpc server at %s...\n", c.ListenOn)
        s.Start()
}

rpc的发现

在api服务中添加配置:

修改 api/internal/config config.go 文件

vim /usr/src/code/go-zero-mall/service/user/api/internal/config/config.go

package config

import (
        "github.com/zeromicro/go-zero/core/logx"
        "github.com/zeromicro/go-zero/rest"
        "github.com/zeromicro/go-zero/zrpc"
        "github.com/zeromicro/zero-contrib/zrpc/registry/consul"
)

type Config struct {
        rest.RestConf

        Auth struct {
                AccessSecret string
                AccessExpire int64
        }

        UserRpc zrpc.RpcClientConf
        Consul consul.Conf
        Log logx.LogConf
}

修改api/etc/user.yam 文件

Name: User
Host: 0.0.0.0
Port: 8000

Mysql:
  DataSource: root:123456@tcp(mysql:3306)/mall?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai

CacheRedis:
  - Host: redis:6379
    Pass:
    Type: node

Auth:
  AccessSecret: uOvKLmVfztaXGpNYd4Z0I1SiT7MweJhl
  AccessExpire: 86400

Log:
  Encoding: json
  Level: error
UserRpc:
  Target: consul://192.168.20.51:8500/user.rpc?wait=14s
Consul:
    Host: 192.168.20.51:8500
    Key: user.rpc
#  Etcd:
#    Hosts:
#      - etcd:2379
#    Key: user.rpc

修改 user.yml

添加一个UserRpc配置,去掉官方自带的Etcd配置

vim /usr/src/code/go-zero-mall/service/user/api/etc/user.yml

Name: User
Host: 0.0.0.0
Port: 8000

Mysql:
  DataSource: root:123456@tcp(mysql:3306)/mall?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai

CacheRedis:
  - Host: redis:6379
    Pass:
    Type: node

Auth:
  AccessSecret: uOvKLmVfztaXGpNYd4Z0I1SiT7MweJhl
  AccessExpire: 86400

Log:
  Encoding: json
  Level: error
UserRpc:
  Target: consul://192.168.20.51:8500/user.rpc?wait=14s
Consul:
    Host: 192.168.20.51:8500
    Key: user.rpc
#  Etcd:
#    Hosts:
#      - etcd:2379
#    Key: user.rpc

修改api/user.go

vim /usr/src/code/go-zero-mall/service/user/api/user.go

 
package main

import (
        "flag"
        "fmt"

        "mall/service/user/api/internal/config"
        "mall/service/user/api/internal/handler"
        "mall/service/user/api/internal/svc"

        "github.com/zeromicro/go-zero/core/conf"
        "github.com/zeromicro/go-zero/rest"
        _ "github.com/zeromicro/zero-contrib/zrpc/registry/consul"
)

var configFile = flag.String("f", "etc/user.yaml", "the config file")

func main() {
        flag.Parse()

        var c config.Config
        conf.MustLoad(*configFile, &c)

        ctx := svc.NewServiceContext(c)
        server := rest.MustNewServer(c.RestConf)
        defer server.Stop()

        handler.RegisterHandlers(server, ctx)

        fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port)
        server.Start()
}

启动rpc服务和api服务

可以看到rpc服务已经被注册和发现了

 
root@7ce3fbb23e76:/usr/src/code/go-zero-mall/service/user/rpc# pwd
/usr/src/code/go-zero-mall/service/user/rpc
root@7ce3fbb23e76:/usr/src/code/go-zero-mall/service/user/rpc#
root@7ce3fbb23e76:/usr/src/code/go-zero-mall/service/user/rpc# go run user.go -f etc/user.yaml
Starting rpc server at 0.0.0.0:9000...
{"@timestamp":"2022-10-21T01:56:11.694+08:00","caller":"stat/usage.go:61","content":"CPU: 175m, MEMORY: Alloc=2.2Mi, TotalAlloc=7.9Mi, Sys=14.8Mi, NumGC=3","level":"stat"}
{"@timestamp":"2022-10-21T01:56:11.699+08:00","caller":"load/sheddingstat.go:61","content":"(rpc) shedding_stat [1m], cpu: 175, total: 0, pass: 0, drop: 0","level":"stat"}
{"@timestamp":"2022-10-21T01:57:11.699+08:00","caller":"load/sheddingstat.go:61","content":"(rpc) shedding_stat [1m], cpu: 0, total: 0, pass: 0, drop: 0","level":"stat"}
{"@timestamp":"2022-10-21T01:57:11.699+08:00","caller":"stat/usage.go:61","content":"CPU: 1m, MEMORY: Alloc=3.4Mi, TotalAlloc=11.0Mi, Sys=14.8Mi, NumGC=4","level":"stat"}

root@7ce3fbb23e76:/usr/src/code/go-zero-mall/service/user/api# pwd
/usr/src/code/go-zero-mall/service/user/api
root@7ce3fbb23e76:/usr/src/code/go-zero-mall/service/user/api# go run user.go -f etc/user.yaml
{"@timestamp":"2022-10-21T02:05:44.290+08:00","caller":"consul@v0.0.0-20220909060747-217517c21c16/resolver.go:76","content":"[Consul resolver] 1 endpoints fetched in(+wait) 1.557115ms for target={service='user.rpc' healthy='false' tag=''}","level":"info"}
Starting server at 0.0.0.0:8000...

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

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

相关文章

@Import的用法

官方定义: https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#spring-core Using the ImportAnnotation Much as the <import/> element is used within Spring XML files to aid in modularizing configurations, the Import annotat…

一文详解ARP报文格式及工作原理

ARP&#xff08;地址解析协议&#xff09;作用&#xff1a;将目的IP解析为目的MAC&#xff0c;用于二层帧结构的目标MAC封装&#xff0c;数据必须封装为帧才能够被网卡发送出去&#xff0c;帧中必须包含MAC。报文格式&#xff1a;ARP报文不能穿越路由器&#xff0c;不能被转发到…

基于飞桨实现钢铁企业废钢判级迈入智能化道路

目前&#xff0c;国家“双碳”战略与“数据智能”环境正驱动着钢铁企业废钢判级迈入智能化道路。针对生产过程中带来高能耗和高污染问题&#xff0c;企业通过使用飞桨用友废钢智能判级系统&#xff0c;助力提升自身经济效益和安全生产水平。 建设背景 目前&#xff0c;国家“双…

如何在IDEA中创建Web项目

&#x1f44c; 棒棒有言&#xff1a;也许我一直照着别人的方向飞&#xff0c;可是这次&#xff0c;我想要用我的方式飞翔一次&#xff01;人生&#xff0c;既要淡&#xff0c;又要有味。凡事不必太在意&#xff0c;一切随缘&#xff0c;缘深多聚聚&#xff0c;缘浅随它去。凡事…

QT入门Buttons之QToolButton

目录 一、界面布局介绍 1、布局器中的位置及使用 2、控件的界面属性 2.1对象名称和大小设置 2.2对象文本设置和鼠标箭头更改 2.3、扁平化样式 二、属性功能介绍 1、显示箭头属性 2、按钮风格 3、添加默认action属性 三、Demo展示 此文为作者原创&#xff0c;转载请标…

Web前端:提高React Native应用程序性能的技巧

不可否认&#xff0c;React Native是开发混合应用的未来。它提供了可扩展性、灵活性、速度、敏捷性、成本效益和卓越的性能。难怪这么多成功的公司依赖React Native来构建他们的应用程序。毕竟&#xff0c;在互联网时代&#xff0c;每个企业都需要一个高性能的应用程序来满足客…

PCB如何进行阻抗设计经验总结

&#x1f3e1;《总目录》 目录1&#xff0c; 什么是阻抗匹配2&#xff0c;为何要阻抗匹配3&#xff0c;阻抗设计经验1&#xff0c; 什么是阻抗匹配 阻抗是指电路中两点间电阻&#xff0c;电感和电容的总称。而阻抗匹配是指&#xff0c;传输线及传输线两端的电子元器件的输入或输…

Canvas(HTML 5 元素)之绘制曲线图形

文章目录参考描述模板圆形圆形半圆形互补弧形arc()arcTo()二次贝塞尔曲线三次贝塞尔曲线参考 项目描述搜索引擎BingCanvas 中文网CanvasRenderingContext2DW3schoolHTML Canvas 参考手册从 0 到 1&#xff1a;HTML 5 Canvas 动画开发莫振杰 描述 项目描述Edge109.0.1518.70 (…

1.Java基础入门

目录 一.java概述 1.1 java语言发展史 1.2 为什么用Java 1.3 Java能做什么 1.4 Java技术体系 二.Java快速入门 2.1 如何使用Java 2.2 JVM&#xff0c;JRE&#xff0c;JDK 2.2.1 JVM 2.2.2 JRE 2.2.3 JDK 2.3 JDK的下载和安装 2.3.1 JDK的下载 2.3.2 JDK的安装 2.3.3 如何验证JD…

git版本回滚详解

写在前面&#xff1a;本文图片中出现的git st, git co分别是git status和git checkout的简写&#xff0c;使用中可以自行设置git config --global alias.st statusgit config --global alias.co checkout查看git配置文件 vim ~/.gitconfig1 工作区内的回滚操作当工作区的文件发…

Android 传感器概述(二)

Android 传感器概述&#xff08;二&#xff09;Android 传感器概述&#xff08;二&#xff09;运动传感器使用重力传感器使用线性加速度计使用旋转矢量传感器使用有效运动传感器使用计步器传感器使用步测器传感器使用原始数据使用加速度计使用陀螺仪使用未经校准的陀螺仪Androi…

【数据结构】动图详解单向链表

目录 1.什么是链表 1.问题引入 2. 链表的概念及结构 3. 问题解决 2.单向链表接口的实现 1.接口1&#xff0c;2---头插&#xff0c;尾插 2. 接口3&#xff0c;4---头删&#xff0c;尾删 3. 接口5---查找 4. 接口6&#xff0c;7---插入&#xff0c;删除 5. 接口8---打印 6. 注意…

CVE-2021-36934提权复现

CVE-2021-369342021年7 月 20 日&#xff0c;微软确认了一个新的本地提权漏洞(CVE-2021-36934)&#xff0c;被称为HiveNightmare。该漏洞由于Windows中多个系统文件的访问控制表(ACL)过于宽松&#xff0c;使得任何标准用户都可以从系统卷影副本中读取包括SAM、SYSETM、SECURITY…

Windows系统运行iOS设备管理软件iMazing2023

iMazing2023免费版是一款运行在Windows系统上的iOS设备管理软件&#xff0c;软件功能非常强大&#xff0c;界面简洁清晰&#xff0c;操作方便快捷&#xff0c;设计的非常有人性化&#xff0c;iMazing官方版为用户提供了多种设备管理功能&#xff0c;每一位用户都能以自己的形式…

MyISAM和InnoDB存储引擎的区别

目录前言存储引擎区别事务外键表单的存储数据查询效率数据更新效率如何选择前言 MyISAM和InnoDB是使用MySQL最常用的两种存储引擎&#xff0c;在5.5版本之前默认采用MyISAM存储引擎&#xff0c;从5.5开始采用InnoDB存储引擎。 存储引擎 存储引擎是&#xff1a;数据库管理系统…

小白如何快速入门Verilog HDL ?一文为你讲解清楚

在学习的过程中&#xff0c;无论学什么都不可能一蹴而就。都是从一个初步认识到慢慢了解再到精通掌握的过程&#xff0c;学习Verilog HDL语法也是一样的道理&#xff0c;首先你要清楚什么是Verilog HDL&#xff0c;然后结合实践再遵从理论&#xff0c;这样后面的学习才能理解的…

P1359 租用游艇

# 租用游艇 ## 题目描述 长江游艇俱乐部在长江上设置了 $n$ 个游艇出租站 $1,2,\cdots,n$。游客可在这些游艇出租站租用游艇&#xff0c;并在下游的任何一个游艇出租站归还游艇。游艇出租站 $i$ 到游艇出租站 $j$ 之间的租金为 $r(i,j)$&#xff08;$1\le i\lt j\le n$&#xf…

MPLS实验(1.31)

目标&#xff1a; 一、首先为公网的每个路由器配置对应的ip和环回并且用OSPF进行动态选路 r2&#xff1a; [r2]int gi 0/0/2 [r2-GigabitEthernet0/0/2]ip add 23.1.1.1 24 [r2-GigabitEthernet0/0/2]int lo0 [r2-LoopBack0]ip add 2.2.2.2 24 r3&#xff1a; [r3]int gi 0…

Oracle的学习心得和知识总结(十)|Oracle数据库PL/SQL语言循环控制语句之LOOP语句技术详解

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《Oracle Database SQL Language Reference》 2、参考书籍&#xff1a;《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Guid…

yolov5篇---yolov5训练pt模型并转换为rknn模型,部署在RK3588开发板上——从训练到部署全过程

yolov5训练pt模型并转换为rknn模型&#xff0c;部署在RK3588开发板上——从训练到部署全过程一、任务介绍二、实验过程2.1 使用正确版本的yolov5进行训练(平台&#xff1a;x86机器ubuntu22.04系统)2.2 best.pt转换为best.onnx(平台&#xff1a;x86机器ubuntu22.04系统)2.3 best…