ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第二课 Go容器化微服务系统实战-微服务模块开发

2021-07-05 23:57:57  阅读:342  来源: 互联网

标签:第二课 micro -- proto 化微 go user Go com


第二课 Go容器化微服务系统实战-微服务模块开发

tags:

  • GO
  • 慕课网

categories:

  • 项目目录搭建
  • GORM

文章目录

第一节 开发目录和依赖包

1.1 项目目录搭建

# 使用容器方式micro/micro 这个容器创建不了--type=api 只能创建service 估计版本问题
sudo docker pull micro/micro
sudo docker run --rm -v $(pwd):$(pwd) -w $(pwd) micro/micro new user(user是我们需要开发的模块)
# 使用容器方式microhq/micro 这个容器暂时用不起来 老报错GOPATH路径找不到 改天研究一下
sudo docker run --rm -v $(pwd):$(pwd) -w $(pwd) microhq/micro new user(user是我们需要开发的模块)
# 直接安装环境 验证micro是否安装成功:micro --version
# 官网https://micro.mu/introduction 这里的最新版本已经不支持consul建议使用etcd
go get github.com/micro/micro
micro new user
  1. 第三步:新建domain(文件夹,写数据库相关的内容)
    • model:数据库模型
    • repository: 编写数据库映射关系
    • service:对数据库方法进行包装。业务逻辑
    • Handler:类似controller作用
      在这里插入图片描述

1.2 Go module的使用

  1. Go module基本设置
    • Go >=1.13会自动默认使用Go Modules
    • Go Modules使用GOPROXY 环境变量来解决无法使用go get的问题
  2. Go module私有仓库设置, GOPRIVATE
    • 使用go env命令查看本机参数
    • GOPRIVATE="*.imooc.com"
# windows
SET GO111MODULE=on
SET GOPROXY=https://goproxy.cn
# liunx
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
  1. Go module 设置慕课网git转发
    • go get内部使用git clone命令,默认只支持公有仓库
    • 替换https 为ssh请求(注意,慕课网ssh端口是80不是22)
git config --global url."ssh://git@git.imooc.com:80/".insteadOf "https://git.imooc.com/"

1.3 GORM基本介绍及使用

  1. GORM库是go语言中实现数据库访问的ORM(对象关系映射)库
  2. 使用GORM这个库,我们可以利用面向对象的方法
  3. GORM可以方便的对数据库中的数据进行CRUD(增删改查)
  4. GORM依赖库
go get github.com/jinzhu/gorm
go get github.com/go-sql-driver/mysql
gorm.Open("mysql",
"root:123456@/test?charset=utf8&parseTime=True&loc=Local")

第二节 用户功能开发

2.1 需求分析

  1. 用户信息管理 增删改查
  2. 用户登陆,注册(鉴权)
  3. 上面生成的mod是user,我们想重新生成并导包。删除之前的go.mod.
go mod init git.imooc.com/qnhyn/user
go mod tidy
# 然后修改main中的导包路径之前user 变成 git.imooc.com/qnhyn/user

2.2 编写proto

  1. proto下的user.proto文件删除。新建文件夹,创建新的user.proto
syntax = "proto3";

package go.micro.service.user;

service User{
  // 注册
  rpc Register(UserRegisterRequest) returns (UserRegisterResponse){}
  // 登录
  rpc Login(UserLoginRequest) returns (UserLoginResponse) {}
  // 查询用户信息
  rpc GetUserInfo(UserInfoRequest) returns (UserInfoResponse){}
}

message UserInfoRequest {
  string user_name = 1;
}

message UserInfoResponse {
  int64 user_id = 1;
  string user_name = 2;
  string first_name = 3;
}

message UserRegisterRequest {
  string user_name = 1;
  string first_name = 2;
  string pwd = 3;
}

message UserRegisterResponse {
  string message = 1;
}

message UserLoginRequest {
  string user_name = 1;
  string pwd = 2;
}

message UserLoginResponse {
  bool is_success = 1;
}
  1. 转换为go代码。
protoc *.proto --gofast_out=. --micro_out=. 

2.3 编写业务逻辑

  1. 第一步:编写proto文件,把暴露出去的服务编写一遍,明确message信息。通过proto自动生成go的文件。
  2. 第二步:开发domain。
    • 首先:在model文件夹下编写user模型。数据库模型。
    • 然后:在repository文件夹下编写文件使用gorm操作数据库。
    • 最后:在service文件加下编写我们的业务代码。
  3. 第三步: 在handler文件夹下写Handler是我们要暴露出去的接口,它和生成的pb.micro文件中的UserHandle接口中的函数一一对应。
  4. 第四步:在mian.go中创建服务参数,初始化服务和中间件实例化比如:数据库。
    • 这里注意:“github.com/micro/go-micro” 这个包如果是新版本v3, 编译会报错
    • 修改如下
# 先删除go.mod中的所有引入,重新引入包
# 修改"github.com/micro/go-micro/v2" 执行下面, 用到的包给我导入进来即可
go mod tidy
# 如果编译仍然出错比如:Service不存在之类的 检查这两个都是v2.重新生成go文件。
go get github.com/micro/go-micro/v2
go get github.com/micro/protoc-gen-micro/v2

2.4 创建数据库环境

  1. 使用docker创建
# 最后创建数据库micro即可
docker pull mysql:5.6
sudo docker run -p 3306:3306 -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456  -d  --name micro-mysql mysql:5.6

第三节 Dockerfile打包user模块

3.1 Dockerfile常用命令

  1. FROM:定制的镜像都是基于FROM的镜像,后续的操作都是基于这个镜像
  2. RUN:用于执行后面跟着的命令行命令
  3. COPY,ADD:复制指令,从文件或者目录到容器里指定路径
  4. CMD,ENTRYPOINT:用于运行程序
  5. ENV︰设置环境变量,在后续的指令中,就可以使用这个环境变量。
  6. EXPOSE:声明端口
  7. WORKDIR:指定工作目录
  8. USER∶于指定执行后续命令的用户和用户组
FROM alpine
ADD user /user
ENTRYPOINT [ "/user" ]

3.2 构建镜像

  1. 首先交叉编译生成对应文件。
# 交叉编译 user文件夹下
CGO_ENABLED=0 GooS=linux GOARCH=amd64 go build -o user *.go
# 生成镜像
docker build -t user:latest .
# 运行
docker run -d user
docker logs 74fdsdfa
# 删除
docker rm -f 74fdsdfa

3.3 Makefile简化命令

  1. 避免反复执行上面命令。
  2. 自己查找安装。

GOPATH:=$(shell go env GOPATH)
.PHONY: proto
proto:
	#sudo docker run --rm -v $(shell pwd):$(shell pwd) -w $(shell pwd)  znly/protoc -I ./ --go_out=./ --micro_out=./  ./proto/user/*.proto
	# 这个还是手动执行吧
    # protoc ./proto/user/*.proto --gofast_out=. --micro_out=.

.PHONY: build
build:
	CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o user *.go

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

.PHONY: dockerBuild
dockerBuild:
	sudo docker build -t user:latest .
  1. 下面执行
# 通过.proto文件生成我们go文件 如果存在覆盖之前的
make proto 
# 生成执行文件
make build
# 打包成镜像
make dockerBuild

标签:第二课,micro,--,proto,化微,go,user,Go,com
来源: https://blog.csdn.net/aa18855953229/article/details/118501384

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有