微服务gomicro搭建

本文详细介绍了在Windows环境下搭建GoMicro微服务开发环境的步骤,包括Go、Git、protoc、consul的安装,以及micro、protoc-gen-micro和protoc-gen-go模块的获取。在安装过程中,特别指出了遇到的坑和解决方法,如goget命令的使用、环境变量配置等。最后,演示了如何创建并运行微服务项目myTest,以及实现负载均衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 安装go(已安装的略过)

1、从https://gomirrors.org/ 下载安装包(也可翻墙从官网下载);
下载Golang
2、Windows下直接安装;
3、设置系统环境变量:
GOROOT=[安装目录]
GOPATH=[程序目录]
——安装程序已自动在用户环境变量中添加了GOPATH=C:UsersAdministratorgo 可以改成自己的;
——安装程序已自动在系统环境变量Path中添加了[安装目录]bin 可以不理会。
4、在%GOPATH%目录(上一步的程序目录)下创建三个目录:
src 目录:放置项目和库的源文件;
pkg 目录:放置编译后生成的包/库的归档文件;
bin 目录:放置编译后生成的可执行文件。
(参见 http://c.biancheng.net/view/4773.html)
在这里插入图片描述

5、 在cmd命令行中执行go version:

C:UsersAdministrator>go version
go version go1.13.5 windows/amd64

说明安装成功了:)

2 安装Git、protoc、consul

在cmd命令行中执行以下命令,设置go模块代理(已翻墙可不设):

go env -w GOPROXY=https://goproxy.io,direct
go env -w GO111MODULE=on

2.1 安装git(已安装的略过)

windows安装其他包执行go get命令时,需要引用到git命令以及使用Git Bash命令行;
下载地址:https://git-scm.com/downloads/
默认安装,或参照下面连接安装:https://www.cnblogs.com/xiaozhaoboke/p/11403940.html

注:这是其中第一个坑,但没装Git会有提示,掉进去马上可爬出来,一般不算坑

2.2 安装 Protocol Buffers命令protoc
Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。开发gRPC微服务时需要用到。
protoc是protobuf文件(.proto)的编译器,可以借助这个工具把 .proto 文件转译成各种编程语言对应的源码,包含数据类型定义、调用接口等。

下载地址:
https://github.com/protocolbuffers/protobuf/releases
Protoc
放到合适的目录下,解压(无需安装):D:goDevTools
将解压后的目录(D:goDevTools\protoc-3.11.2-win64\bin)添加到到环境变量path
设置环境变量在这里插入图片描述

正是因为需要设置环境变量,故在提前于micro安装,以便于一次重启

2.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
在这里插入图片描述

下载consul
下载后解压到合适目录(无需安装)
D:goDevTools\consul_1.6.2_windows_amd64
配置环境变量
在这里插入图片描述
正是因为需要设置环境变量,故在提前于micro安装,以便于一次重启
重启系统……使环境变量配置生效……嗯,这是windows的坑,要重启

重启系统后在cmd命令行中输入git、consul、go等命令就会有Usage的响应。

3、安装micro相关go模块最大的坑来了……

墙内用go get命令带 -u参数安装go模块可能会报404错误,如下图:
404 Not Found

在这个坑里面,网上的教程会教你通过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命令行有时候会有问题,说不定什么时候就有坑。 在目录中鼠标右键启动Git Bash【推荐!可以省去cd命令】
在这里插入图片描述

4 安装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],会看到微服务框架所需的组件服务已经启动。如下图:
在这里插入图片描述

5、安装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,若没有,则说明安装失败。%GOPATH%可以在环境变量中查到

6 创建微服务项目

6.1 生成微服务项目myTest代码

在Git Bash中执行如下令,创建微服务项目模板:

micro new zkey.cc/myTest

这个命令执行完,在%GOPATH%/src目录下会生成mytest微服务项目源代码模板,但还需要按命令结果提示的最后三行处理一下, 但是 最后三行的提示里 有两个坑,是关于目录路径的,提示内容如下:

compile the proto file myTest.proto:

cd %GOPATH%/src
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%,因此需要改成绝对路径,而且要将绝对路径改成项目源码根目录:D:/goProject/src/zkey.cc/myTest 。

操作方法:修改proto文件,在第二行加上option go_package ="./;pb";
进入proto文件所在目录,在Git bash中执行以下命令:
protoc --proto_path=D:/goProject/src/zkey.cc/myTest --go_out=. --micro_out=. proto/mytest/mytest.proto

具体步骤,类似下图:
在这里插入图片描述

创建微服务
6.2 运行微服务项目myTest

在上一步的基础上,在命令行中执行:(当前目录为项目源码根目录D:/goProject/src/zkey.cc/myTest)

go run main.go

在先前打开的浏览器中,刷新,可以发现Micro中已经注册了myTest微服务
在这里插入图片描述

点击【go.micro.srv.myTest】可以查看该微服务的API接口:
在这里插入图片描述

点击右上角的【Client】,按如下步骤测试API:
在这里插入图片描述

6.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次调用,可以发现已经自动实现了负载均衡。调用分布见下图:
在这里插入图片描述

8 结语

至此,Windows下Go Micro微服务开发环境搭建结束。

### 回答1: CentOS 7启动httpd服务失败可能有多种原因,以下是一些常见的解决方法: 1. 检查httpd配置文件是否正确:可以使用命令`httpd -t`检查httpd配置文件是否正确,如果有错误,需要修改配置文件。 2. 检查端口是否被占用:可以使用命令`netstat -tlnp`查看端口是否被占用,如果被占用需要释放端口或修改httpd配置文件中的端口号。 3. 检查httpd服务是否安装:可以使用命令`rpm -qa | grep httpd`查看httpd服务是否安装,如果没有安装需要先安装httpd服务。 4. 检查httpd服务是否启动:可以使用命令`systemctl status httpd`查看httpd服务是否启动,如果没有启动需要使用命令`systemctl start httpd`启动httpd服务。 5. 检查SELinux是否开启:如果SELinux开启,可能会导致httpd服务启动失败,需要使用命令`setenforce 0`关闭SELinux,或者修改SELinux策略。 以上是一些常见的解决方法,如果以上方法都无法解决问题,可以查看httpd服务日志文件,找到具体的错误信息,然后根据错误信息进行解决。 ### 回答2: CentOS 7上的httpd服务启动失败可能有多种原因。以下列出了一些常见问题和解决方法: 1. 端口被占用 当httpd试图占用已被其他程序占用的端口时会启动失败。此时可以通过使用`netstat -tunlp`命令检查端口占用情况,然后杀死占用该端口的进程及时释放端口。或者修改httpd的配置文件,将端口修改为未被占用的端口。 2. 配置文件错误 有时httpd服务的配置文件中可能出现错误,例如语法错误或路径错误等等。在启动httpd服务之前,可以使用`apachectl configtest`命令进行检查,如果输出“Syntax OK”,则表示配置文件没有错误。如果出现错误,则需要根据错误提示进行相应修改。 3. 依赖关系问题 如果httpd依赖的其他程序或库缺失,也会导致启动失败。可以通过使用`systemctl status httpd.service`命令来查看httpd服务状态,如果输出“Failed to start”或“Loaded: failed”,则需要检查依赖关系是否完整。 4. SELinux问题 当SELinux启用时,有时会导致httpd服务启动失败。在这种情况下,可以在SELinux上禁用httpd服务,或者修改httpd配置文件解决SELinux相关的问题。 5. 用户权限问题 httpd服务启动可能需要特定的用户权限。如果使用的用户权限不够,则无法启动。可以尝试使用root用户启动httpd服务,或者根据需要修改相应的用户权限。 ### 回答3: CentOS 7中的Apache HTTP服务器(httpd)是一个常见的Web服务器,如果遇到httpd服务启动失败的情况,可能会影响服务器正常的工作和对外服务的稳定性。本文将提供一些可能会导致httpd服务启动失败的原因,并给出相应的解决方法。 1. 端口被占用 如果端口被其他进程占用,httpd服务就无法启动。可以通过 netstat -tulpn 命令查看端口占用情况,并杀死占用该端口的进程。如果端口被 httpd 服务自身占用,可以通过 systemctl restart httpd 命令重启 httpd 服务;如果是其他进程占用了端口,可以通过 kill 命令杀死该进程或更改 httpd.conf 文件配置,将 httpd 服务的端口改为其他空闲端口,重新启动。 2. 配置文件错误 httpd 服务的配置文件通常是 /etc/httpd/conf/httpd.conf,如果其中存在语法错误、权限问题或者其它配置错误,可能会导致 httpd 服务启动出错。可以通过将 httpd.conf 文件备份后删掉,重新执行 yum install httpd 命令安装 httpd 服务,然后手动修改 httpd.conf 文件,逐个检查每个配置项是否正确,确认无误后重启 httpd 服务。 3. SELinux 问题 SELinux 是 CentOS 7中提供的一种安全模块,它可以对系统文件和应用程序进行安全管控。如果 SELinux 配置不正确,可能会阻止 httpd 服务正常启动。可以通过修改 /etc/selinux/config 文件中 SELINUX=disabled 来暂时关闭 SELinux,然后重新启动 httpd 服务;或者一个更优的方式是,根据日志确定问题原因,使用命令 semanage 或者 setsebool 等工具将相关目录或者配置加入到 SELinux 许可列表中,重新启动 httpd 服务,以恢复服务正常工作。 4. 防火墙问题 如果你的 CentOs 7 服务器启用了防火墙,有可能会导致 httpd 服务启动失败。可以通过检查防火墙相关配置来确定问题原因,解决方案是修改防火墙规则,将端口 80 或者 443 等 httpd 服务需要的端口放行,重新启动 httpd 服务。 总之,当遇到 httpd 服务启动失败时,不要慌张,可以先通过日志或者执行命令查看错误信息,找到错误原因,然后根据错误原因一步一步解决问题。在解决问题过程中注意备份原始配置文件,以免造成不必要的损失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值