Golang学习笔记(三):Windows下Go Micro微服务开发环境搭建以及跨过的坑
Golang学习笔记(三):Windows下Go Micro微服务开发环境搭建以及跨过的坑
- 1 概述
- 2 安装go(已安装的略过)
- 3 安装Git、protoc、consul
- 3.1 安装git(已安装的略过)
- 3.2 安装 Protocol Buffers命令protoc
- 3.3 安装 consul
1 概述
通过前面两篇学习笔记,特别是《Golang学习笔记(二):第一个可用于生产环境下的真正Go程序》中我们对使用Go开发网络系统有了初步了解,因为本公司产品采用了微服务架构,故我们很关心Go的微服务框架,在本章节我们将探索Go的微服务框架。
Golang微服务框架有micro、kit、gizmo等,经过对比我们选用micro。
按照网上其他人写的教程,照着做可能会遇到各种坑,本人负责的团队因为准备向go转移,计划组织内部相关培训,做了多次安装测试,遇到了一些坑,本文会详细介绍micro开发环境安装过程,并介绍跨过的那些坑。
2 安装go(已安装的略过)
- 从https://gomirrors.org/ 下载安装包(也可翻墙从官网下载);
- Windows下直接安装;
- 设置系统环境变量:
GOROOT=[安装目录]
GOPATH=[程序目录]
——安装程序已自动在用户环境变量中添加了GOPATH=C:\Users\Administrator\go 可以改成自己的;
——安装程序已自动在系统环境变量Path中添加了[安装目录]\bin 可以不理会。 - 在%GOPATH%目录(上一步的程序目录)下创建三个目录:
- src 目录:放置项目和库的源文件;
- pkg 目录:放置编译后生成的包/库的归档文件;
- bin 目录:放置编译后生成的可执行文件。
(参见 http://c.biancheng.net/view/4773.html)
- 在cmd命令行中执行go version:
C:\Users\Administrator>go version go version go1.13.5 windows/amd64
说明安装成功了:)
3 安装Git、protoc、consul
在cmd命令行中执行以下命令,设置go模块代理(已翻墙可不设):
setx GO111MODULE on setx GOPROXY https://goproxy.io
3.1 安装git(已安装的略过)
windows安装其他包执行go get命令时,需要引用到git命令以及使用Git Bash命令行;
下载地址:https://git-scm.com/downloads/
默认安装,或参照下面连接安装:https://www.cnblogs.com/xiaozhaoboke/p/11403940.html
注:这是其中第一个坑,但没装Git会有提示,掉进去马上可爬出来,一般不算坑
3.2 安装 Protocol Buffers命令protoc
Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。开发gRPC微服务时需要用到。
protoc是protobuf文件(.proto)的编译器,可以借助这个工具把 .proto 文件转译成各种编程语言对应的源码,包含数据类型定义、调用接口等。
下载地址:
- https://github.com/protocolbuffers/protobuf/releases
放到合适的目录下,解压(无需安装):
D:\goDevTools\protoc-3.11.2-win64
将解压后的目录(D:\goDevTools\protoc-3.11.2-win64\bin)添加到到环境变量path
正是因为需要设置环境变量,故在提前于micro安装,以便于一次重启
3.3 安装 consul
Consul是一个服务网格(微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控)解决方案,它是一个分布式的,高度可用的系统,包括:服务发现、健康检查、键值存储、安全服务通信等功能。
Go Micro 框架以插件的形式内置了几种常用的服务发现组件,包括:mDNS、Consul、Etcd;
2019年之前 Go Micro默认使用Consul作为服务发现组件,目前改用mDNS为默认组件,因此网络上大多教程中为Consul,我们也先安装Consul作为测试环境;
在实际生产中计划使用Etcd,这个后面再说。
- 下载windows版本consul:
下载地址:https://www.consul.io/downloads.html
- 下载后解压到合适目录(无需安装)
D:\goDevTools\consul_1.6.2_windows_amd64
正是因为需要设置环境变量,故在提前于micro安装,以便于一次重启
重启系统……使环境变量配置生效……嗯,这是windows的坑,要重启
重启系统后在cmd命令行中输入git、consul、go等命令就会有Usage的响应。
4 安装micro相关go模块
最大的坑来了……
墙内用go get命令带 -u参数安装go模块可能会报404错误,如下图:
在这个坑里面,网上的教程会教你通过git clone下载源代码编译,嗯,我试了也能解决问题,但真正的问题是-u参数,而网上很多教程里面都是带有-u参数的,可能是安装的时候的版本不同,我现在安装的micro是v1.18.0。
这种时候,你可以先带上-u,不行的话去掉-u再执行,不过个人感觉不带为好,因为按照安全原则,不应追求最新版,而是次新版最好,除非次新版有重大问题或最新版有你必须要的功能。
go get 命令可以借助代码管理工具通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装。go get 命令参数如下:
- -d 只下载不安装
- -f 只有在你包含了 -u 参数的时候才有效,不让 -u 去验证 import 中的每一个都已经获取了,这对于本地 fork 的包特别有用
- -fix 在获取源码之后先运行fix,然后再去做其他的事情
- -t 同时也下载需要为运行测试所需要的包
- -u 强制使用网络去更新包和它的依赖包
- -v 显示执行的命令
下面还有一个坑……嗯,是windows的锅
网上很多教材都是用windows自带的命令行cmd,或没说明用什么命令行工具。cmd命令行大部分时候是可以的,但无法执行类似下面这条命令:
go get github.com/golang/protobuf/{proto,protoc-gen-go}
原因是不识别"{"。这条命令是在网上某个教程中看到的,其实可以分开执行,或不要proto(没有proto,不影响本文档相关测试)。
建议使用Git Bash执行命令,而cmd命令行有时候会有问题,说不定什么时候就有坑。 win10也可以使用power shell
在windows开始菜单、文件夹目录鼠标右键、桌面图标都可以启动Git Bash:
- 在windows开始菜单中启动Git Bash
- 在目录中鼠标右键启动Git Bash【推荐!可以省去cd命令】
4.1 安装micro
注:windows需要先重启电脑使前面设置的环境变量生效——前面说了,这是windows的坑
在cmd 或 Git Bash中执行如下令安装micro:
/** 注意不要带 -u 参数,参见前面说明 **/ go get -v github.com/micro/micro
网上教程中大部分都同时让执行 go get -v github.com/micro/go-micro,但我发现没执行也没事,先不安装吧,等有问题了再说,本人属完美主义者,且有强迫症,不喜欢多余的东西
安装完成之后在%GOPATH%/bin目录下有个 micro.exe 文件(没有的话说明安装失败),双击运行。打开浏览器,输入http://localhost:8082 ,再点击右上角的[Registry],会看到微服务框架所需的组件服务已经启动。如下图:
4.2 安装protoc-gen-micro、protoc-gen-go模块
这两个模块和主要作用由protoc命令调用,通过编译.proto文件生成go-micro的模板代码。
go get -v github.com/micro/protoc-gen-micro go get -v github.com/golang/protobuf/protoc-gen-go
执行完成之后在%GOPATH%/bin目录下会分别生成protoc-gen-micro.exe和protoc-gen-go.exe,若没有,则说明安装失败。
5 创建微服务项目
5.1 生成微服务项目myTest代码
在Git Bash中执行如下令,创建微服务项目模板:
micro new zkey.cc/myTest
这个命令执行完,在%GOPATH%/src(本案例为D:\goProject\src\zkey.cc\myTest)目录下会生成zkey.cc/myTest微服务项目源代码模板,但还需要按命令结果提示的最后三行处理一下, 但是 最后三行的提示里 有两个坑,是关于目录路径的,提示内容如下:
compile the proto file myTest.proto: cd D:\goProject\src\zkey.cc\myTest protoc --proto_path=.:$GOPATH/src --go_out=. --micro_out=. proto/myTest/myTest.proto
意思是让我们按照后面两行命令编译 myTest.proto 文件,问题的关键是:
- 在cmd中可以使用 cd D:\goProject\src\zkey.cc\myTest 命令,而在Git Bash中需把“/”反过来,应执行:cd D:/goProject/src/zkey.cc/myTest;
- 最后一行中不能用$GOPATH,这是linux系统中的应用方式,在windows中应该使用%GOPATH%,但是在git bash中%GOPATH%引过来的“\”方向是不对的,因此需要改成绝对路径,而且要将绝对路径改成项目源码根目录:D:/goProject/src/zkey.cc/myTest 。
因此,在Git bash中执行以下两条命令:
cd D:/goProject/src/zkey.cc/myTest protoc --proto_path=D:/goProject/src/zkey.cc/myTest --go_out=. --micro_out=. proto/myTest/myTest.proto
具体步骤,如下图:
5.2 运行微服务项目myTest
在上一步的基础上,在命令行中执行:(当前目录为项目源码根目录D:/goProject/src/zkey.cc/myTest)
go run main.go
在先前打开的浏览器中,刷新,可以发现Micro中已经注册了myTest微服务
点击【go.micro.srv.myTest】可以查看该微服务的API接口:
点击右上角的【Client】,按如下步骤测试API:
5.3 编译myTest及多副本负载均衡运行
在命令行中执行:(当前目录为项目源码根目录D:/goProject/src/zkey.cc/myTest)
go build -o myTest.exe main.go
在当前目录生成了myTest.exe可执行文件 (若无-o myTest.exe,则默认生成main.exe,也行)
在文件夹中双击myTest.exe运行,再双击运行可启动多个myTest微服务副本。在Micro管理页面中可以看到多个副本在运行。
本例启动了四个副本,在【Client】中进行了35次调用,可以发现已经自动实现了负载均衡。调用分布见下图:
6 结语
至此,Windows下Go Micro微服务开发环境搭建结束。
- 点赞
- 收藏
- 分享
- 文章举报
- Go语言学习笔记(一) : 搭建Windows下的Go开发环境
- golang微服务框架go-micro 入门笔记1.搭建 go-micro环境
- Windows下搭建go语言开发环境 以及 开发IDE (附下载链接)
- Spark2.x学习笔记:6、在Windows平台下搭建Spark开发环境(Intellij IDEA)
- golang笔记(1)windows开发环境搭建
- Object C学习笔记6-如何在Windows环境搭建Object C开发环境
- Boost学习-学习笔记-windows开发环境搭建
- cocos2d-x 2.1.4学习笔记01:windows平台搭建cocos2d-x开发环境
- Adroid学习笔记-入门资料以及V2.3系统开发环境搭建
- Object C学习笔记6-如何在Windows环境搭建Object C开发环境
- [Golang学习]Ubuntu搭建Go语言开发环境
- 【Cocos2D-X 学习笔记】windows如何搭建Cocos2D-x开发环境
- Cocos2d-x学习笔记(一)——Windows开发环境和Android交叉编译环境搭建
- windows golang开发环境搭建--LiteIDE-最适合Go的IDE
- 区块链学习笔记(一)Ethereum-Go开发环境搭建
- cocos2d-x学习笔记01:VS开发环境windows平台搭建
- Protocol Buffers学习笔记 - Windows上搭建开发环境,开发Java序列化应用
- Lua学习笔记1:开发环境搭建(windows和linux)
- go micro 学习笔记 2:环境搭建(可运行示例)
- go语言学习-windows下开发环境的搭建