go-micro框架-01-启动微服务及微服务间的调用

news2024/9/20 16:44:37

文章目录

  • 1. 环境准备
    • 1.1 安装protoc
    • 1.2 安装 go-micro
  • 2. 创建微服务项目
    • 2.1 创建第一个服务
    • 2.2 初始化
    • 2.3 同法再创建2个服务
    • 2.4 初始化项目
  • 3. 微服务间调用
  • 4. 使用 consul
    • 4.1 启动consul
    • 4.2 修改代码

1. 环境准备

1.1 安装protoc

https://github.com/protocolbuffers/protobuf/releases/tag/v22.2

在这里插入图片描述
将可执行文件拷贝到适合bin目录。

1.2 安装 go-micro

go install github.com/go-micro/cli/cmd/go-micro@latest

2. 创建微服务项目

随便创建3个服务做测试,名字仅做服务区分

2.1 创建第一个服务

  • 创建 crow-system服务
PS E:\go\src\crow-han> go-micro new service crow-system

输出如下

creating service crow-system

install requirements:

protoc is needed for code generation. You can either install it using your 
pacakge manager, or manually install it by downloading the protoc zip packages 
(protoc-$VERSION-$PLATFORM.zip) from https://github.com/protocolbuffers/protobuf/releases/latest 
and installing its contents.

compile the proto file crow-system.proto and install dependencies:

cd crow-system
make init proto update tidy

  • 生成文件如下
    在这里插入图片描述

2.2 初始化

按创建服务时,输出中的提示compile the proto file crow-system.proto and install dependencies的内容初始化服务

  • 初始化
PS E:\go\src\hello> cd .\crow-system\
PS E:\go\src\hello\system> make init proto update tidy
  • Makefile文件

这部分不用操作,仅了解一下我们刚才做了什么。

GOPATH:=$(shell go env GOPATH)

.PHONY: init
init:
	@go get -u google.golang.org/protobuf/proto
	@go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
	@go install github.com/go-micro/generator/cmd/protoc-gen-micro@latest

.PHONY: proto
proto:
	@protoc --proto_path=. --micro_out=. --go_out=:. proto/crow-user.proto

.PHONY: update
update:
	@go get -u

.PHONY: tidy
tidy:
	@go mod tidy

.PHONY: build
build:
	@go build -o crow-user *.go

.PHONY: test
test:
	@go test -v ./... -cover

.PHONY: docker
docker:
	@docker build -t crow-user:latest .
  • 生成文件
    在这里插入图片描述
    • proto中生成了两个文件
    • go.mod 中的依赖也有了

2.3 同法再创建2个服务

  • 创建crow-user服务

创建服务

go-micro new service crow-user

初始化

PS E:\go\src\hello> cd .\crow-user\
PS E:\go\src\hello\user> make init proto update tidy
  • 创建 crow-web

创建服务

go-micro new service web

初始化

PS E:\go\src\hello> cd .\web\
PS E:\go\src\hello\web> make init proto update tidy
  • 目前文件,如图
    在这里插入图片描述

2.4 初始化项目

go work init crow-system crow-user crow-web
  • 生成文件如图
    在这里插入图片描述

3. 微服务间调用

比如:我们让 crow-system调用crow-user

  • client端

在crow-system服务的main.go文件中的main函数里添加如下内容:

	//調用crow-user
	userSrv := crowuser.NewCrowUserService("crow-user", srv.Client())
	resp, err := userSrv.Call(context.Background(), &crowuser.CallRequest{
		Name: "Liu Bei",
	})
	if err != nil {
		logger.Error(err)
	}
	logger.Infof("request : %+v",resp)
  • 测试
    • 启动被调用服务: crow-user
    • 启动客户服务: crow-system
API server listening at: 127.0.0.1:55015
2023-03-30 14:16:35  file=crow-system/main.go:39 level=info request : msg:"Hello Liu Bei"
2023-03-30 14:16:35  file=crow-system/main.go:42 level=info Starting [service] crow-system
2023-03-30 14:16:35  file=v4@v4.10.0/service.go:99 level=info Transport [http] Listening on [::]:55022
2023-03-30 14:16:35  file=v4@v4.10.0/service.go:99 level=info Broker [http] Connected to 127.0.0.1:55023
2023-03-30 14:16:35  file=server/rpc_server.go:555 level=info Registry [mdns] Registering node: crow-system-dbf03259-af7e-437b-9930-1fdfba772692

4. 使用 consul

4.1 启动consul

  • 在consul目录中创建docker-compose.yml文件内容如下
version: '3.1'
services:
 consul:
  image: harbocto.xxx.com.cn/public/consul:1.9.4 #我的内网镜像,需要替换。
  restart: always
  command:
    agent
    -server
    -bootstrap
    -ui
    -node=1
    -client='0.0.0.0'
  ports:
    - 8500:8500
  • 启动
docker-compose up -d
  • 测试
    访问 http://IP:8500端口

4.2 修改代码

  • 每个项目的main函数中添加如下标记的内容
func main() {
	// Create service
	srv := micro.NewService()

	//添加下边这里段,创建consul配置
	//consulRegis := consul.NewRegistry(registry.Addrs("10.10.xxx.32:8500"))
	consulRegis := consul.NewRegistry(func(options *registry.Options) {
		options.Addrs = []string{
			"10.10.xxx.32:8500",
		}
	})

	srv.Init(
		micro.Name(service),
		micro.Version(version),
		micro.Registry(consulRegis), //添加这一行,使用consul配置
	)

	// Register handler
	if err := pb.RegisterCrowUserHandler(srv.Server(), new(handler.CrowUser)); err != nil {
		logger.Fatal(err)
	}
	// Run service
	if err := srv.Run(); err != nil {
		logger.Fatal(err)
	}
}

查看结果
在这里插入图片描述


在这里插入图片描述

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

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

相关文章

webpack: 5 报错,错误

webpack-报错:Uncaught ReferenceError: $ is not defined (webpack) webpack打包jquery的插件(EasyLazyLoad)时,报错 方法一: //多个js文件用到jquery,用这种方法 在jquery.min.js的做最后写上下面的代码…

中交路桥科技浅谈:边坡稳定的影响因素及边坡主要监测内容

边坡稳定的影响因素 岩(土)性质的影响:包括岩石的坚硬程度、抗风化能力、抗软化能力、强度、组成、透水性等; 岩土结构的影响:表现为节理裂缝的发育程度及其分布规律、结构面的胶结情况、软弱面和破碎带的分布与边坡…

记录--ThreeJs手搓一个罗盘特效

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 先上效果 前言 最近在学Three.js.,对着文档看了一周多,正好赶上码上掘金的活动,就顺便写了一个小demo,手搓一个罗盘特效。 太极 先来看一下太极的实现方式&#xff…

教你一招轻松搞定大量视频滚动字幕

如果你也想批量快速的给大量视频画面添加上滚动字幕的话,那你一定要看这个教程,今天小编要给大家分享一个可以批量给大量视频添加滚动字幕的简单方法,有需要的小伙伴们可以一起来看看具体的操作步骤! 首先我们来看看用这个工具添加…

c语言-指针

指针详解 ​ 这段时间在看 Linux内核,深觉C语言功底不扎实,很多代码都看不太懂,深入学习巩固C语言的知识很有必要。先从指针开始。 什么是指针 ​ C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组&…

跨域时怎么处理 cookie?

前言 一个请求从发出到返回,需要浏览器和服务端的协调配合。浏览器要把自己的请求参数带给服务端,服务端校验参数之后,除了返回数据,也可能会顺便把请求是否缓存,cookie等信息告诉浏览器。当请求是跨域请求的时候&…

uniapp仿淘宝购物车demo

项目是基于uview2.0的ui组件,并且在一定程度上修改过原本组件的代码(app-navbar是使用u-navbar在进行二次封装的组件;u-number-box也进行了修改),符合项目需求(这个看个人项目需求在进行修改) u…

【 在线音乐平台(onlinemusic) 】

文章目录 一、核心功能二、效果演示三、创建项目四、数据库设计及配置数据库4.1 数据库和表设计4.2 配置连接数据库 五、创建配置类六、具体功能实现6.1 注册模块6.2 登录模块拓展:登录注册加密(MD5,BCrypt) 6.3 退出模块6.4 上传音乐模块知识拓展1&…

RabbitMQ详解(六):RabbitMQ集群搭建

集群 官方参考文档:https://www.rabbitmq.com/clustering.html RabbitMQ这款消息队列中间件产品本身是基于Erlang编写,Erlang语言天生具备分布式特性(通过同步Erlang集群各节点的magic cookie来实现)。因此,RabbitMQ天…

什么是柔性玻璃?

柔性玻璃(Flexible glass)是一种新型薄膜玻璃基板(Thin film glass substrate)材料,厚度极薄可以弯曲。 柔性玻璃定义有广义和狭义之分: 广义柔性玻璃泛指所有制成微米尺寸具有可弯曲特性的玻璃材料,如玻璃纤维、光纤、玻璃棉、玻璃布等。这些…

第10课【STM32 USB通讯协议实战】HID键盘+CDC虚拟串口组合设备

目录 前言USB设备类别未定义设备设备描述符/配置描述符分析如何配置从机类型如何配置设备专用的描述符如何配置从机端点 HID设备特点设备描述符/配置描述符分析HID报文描述符短条目前缀可选数据表现形式 层次结构实例分析总结 CDC设备特点设备描述符/配置描述符分析设备类特定请…

【LED子系统】四、核心层详解(一)

个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1、前言2、leds_init分析2.1 相关数据结构2.1.1 class 2.2 实现流程 3、leds_class_dev_pm_ops分析…

Mysql出现问题:ERROR 1062 (23000): Duplicate entry ‘‘ for key ‘PRIMARY‘解决方案

回城传送–》《数据库问题解决方案》 ❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主🏆,51CTO专家博主🏆 ❤️技术活,该赏 ❤️点赞 👍 收藏 ⭐再看,养成…

QT中的模态对话框及非模态对话框

QT中的模态对话框及非模态对话框 [1] QT中的模态对话框及非模态对话框[2] Qt工作笔记-主界面往模式对话框emit信号,有注意的问题正常情况下:不正常情况下:下面给出正常情况下的代码: [1] QT中的模态对话框及非模态对话框 原文链接…

KVM软件安装/Guest OS图形模式安装

KVM软件安装 首先你的Linux操作系统得带有图形化界面 虚拟机开启硬件虚拟化 关闭防火墙和selinux [rootserver-d ~]# systemctl stop firewalld [rootserver-d ~]# systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.ser…

RK3568修改调试串口的波特率

概述 使用了临滴 RK3568 开发板,其调试串口的默认波特率是 1500000 ,但并不是所有的 USB 转 TTL 都能使用这么高的波特率,所以我们就将波特率修改为 115200 这个比较通用的波特率。 RK3568 调试串口修改波特率的方法 ddr 运行阶段串口波特率的修改 ddr…

linux利用定时任务提权

背景: 运维为了防止数据丢失等,写个定时任务进行数据的打包压缩。由于数据打包压缩命令为tar,tar可以尝试加参数调用其他命令执行。 压缩命令:tar zxf 1.tar.gz /var/www/* 查看定时任务:cat /etc/crontab root权限下…

WordPress入门之WordPress站点基本设置

在Wordpress站点搭建过程中,我们需要快速去熟悉Wordpress,并进行一些简单的基本设置,在开始设置之前,大家可以先熟悉左边的菜单栏的每个选项,了解它们都是做什么的,今天就简单为大家介绍Wordpress入门之Wordpress站点基本设置。 一、设置个人资料 建议大家完善基本信息…

电容笔一定要防误触吗?苹果平板平替电容笔排行

至于用ipad作为学习工具的学生们,更是将它当成了一种必不可少的工具。但是,由于苹果原装电容笔的价格过高,没有人能负担得起。所以,最好的办法就是使用普通的电容笔。我是IPAD的忠实用户,也是数码爱好者,这…

10.BOM浏览器对象模型

BOM 浏览器对象模型 1. BOM 概述 1.1 什么是 BOM BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与**浏览器窗口进行交互的对象,其核心对象是 window BOM 由一系列相关的对象构成,并且每个对象都…