hhstore / blog

My Tech Blog: about Mojo / Rust / Golang / Python / Kotlin / Flutter / VueJS / Blockchain etc.
https://github.com/hhstore/blog/issues
281 stars 23 forks source link

Golang: micro service framework - go-micro #88

Open hhstore opened 5 years ago

hhstore commented 5 years ago

 相关:

hhstore commented 5 years ago

micro service framwork diff:

中文文档:

对比其他框架:

ref:

关于 micro service 的定义:

go-micro:

项目说明:

官方示例合集:

ref:

项目用户列表:

示例Demo:

go-micro 教程:

基于 go-micro 的项目:

FAQ:

1. API,Web和SRV服务有什么区别?

2. Micro是否支持gRPC?

hhstore commented 5 years ago

go-micro 支持 rest API:

go-micro 集成各种插件服务:

1. 集成 swagger:


go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway

go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger

2. 问题跟踪系统:

go-micro 官方文档摘要:

ref: 参考实践:

0. 项目脚手架: micro

go get -u github.com/micro/micro

#
brew install protobuf

#
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}

go get -u github.com/micro/protoc-gen-micro

使用示例:

# 创建:
micro new github.com/micro/example

# 编译pb:
protoc --proto_path=. --micro_out=. --go_out=. proto/example/example.proto

# 运行:
go run main.go

cli 工具支持命令:

1. 安装指南:


go get github.com/micro/go-micro
go get github.com/micro/micro

# Demo:
go get github.com/micro/examples/greeter/srv && srv

2. 配合 grpc-gateway 项目:

3. 服务定义:

写一个服务:

MQ 发布/订阅:

4. 配置读取:

5. 插件集:

6. 部署:

基于 docker:

基于 kubernetes:

hhstore commented 5 years ago

go micro:

1. 准备环境: consul 依赖服务注册


docker-compose -f devops-consul.yml up -d

2. 创建项目:


cd $GOPATH

# 创建一个demo项目:
micro new micro_demo

# 创建成功有提示信息: 告诉你先生成 protobuf文件:
cd $GOPATH/src/micro_demo

protoc --proto_path=. --go_out=. --micro_out=. proto/example/example.proto

3. 启动项目:


cd GOPATH/src/micro_demo

(py27-base) ζ go run main.go                                                                                                  
2018/09/21 15:27:36 Listening on [::]:49408
2018/09/21 15:27:36 Broker Listening on [::]:49409
2018/09/21 15:27:36 Registering node: go.micro.srv.demo2-cfd100c4-bd6f-11e8-bb1a-a45e60b7c119

4. 查看启动的微服务:

# henry@hh-rmbp: ~/iGit/iSpace/iGo/libdir/src/demo2                                                               
(py27-base) ζ micro list services                                                                                             
consul
go.micro.srv.demo2
topic:go.micro.srv.demo2
# henry@hh-rmbp: ~/iGit/iSpace/iGo/libdir/src/demo2                                                                (15:31:08)  
(py27-base) ζ micro call go.micro.srv.demo2 Example.Call '{"name": "John"}'                                                   
{
        "msg": "Hello John"
}

# henry@hh-rmbp: ~/iGit/iSpace/iGo/libdir/src/demo2                                                                (15:35:55)  
(py27-base) ζ micro web                                                                                                       
2018/09/21 15:35:57 Listening on [::]:8082
2018/09/21 15:35:57 Listening on [::]:49562
2018/09/21 15:35:57 Broker Listening on [::]:49563
2018/09/21 15:35:57 Registering node: go.micro.web-faae005c-bd70-11e8-a266-a45e60b7c119
hhstore commented 5 years ago

从0到1创建一个完整的micro项目:

1. 创建git项目:

git clone git@gitlab.com:ceres-mirror/exchange-trade-proxy4.git

2. 安装 micro 环境:

go get -u github.com/micro/micro
#
brew install protobuf
#
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
go get -u github.com/micro/protoc-gen-micro

# 创建API依赖:
go get -t github.com:micro/go-api

3. 使用micro脚手架初始化工程:


# exchange:
micro new --type srv --alias exchange --namespace "com.ceres.trade.proxy" gitlab.com/ceres-mirror/exchange-trade-proxy4/server/exchange/srv
micro new --type web --alias exchange --namespace "com.ceres.trade.proxy" gitlab.com/ceres-mirror/exchange-trade-proxy4/server/exchange/web
micro new --type api --alias exchange --namespace "com.ceres.trade.proxy" gitlab.com/ceres-mirror/exchange-trade-proxy4/server/exchange/api
micro new --type fnc --alias exchange --namespace "com.ceres.trade.proxy" gitlab.com/ceres-mirror/exchange-trade-proxy4/server/exchange/fnc

# trade:
micro new --type srv --alias trade --namespace "com.ceres.trade.proxy" gitlab.com/ceres-mirror/exchange-trade-proxy4/server/trade/srv
micro new --type web --alias trade --namespace "com.ceres.trade.proxy" gitlab.com/ceres-mirror/exchange-trade-proxy4/server/trade/web
micro new --type api --alias trade --namespace "com.ceres.trade.proxy"  gitlab.com/ceres-mirror/exchange-trade-proxy4/server/trade/api

# order:
micro new --type srv --alias order --namespace "com.ceres.trade.proxy" gitlab.com/ceres-mirror/exchange-trade-proxy4/server/order/srv
micro new --type web --alias order --namespace "com.ceres.trade.proxy" gitlab.com/ceres-mirror/exchange-trade-proxy4/server/order/web
micro new --type api --alias order --namespace "com.ceres.trade.proxy" gitlab.com/ceres-mirror/exchange-trade-proxy4/server/order/api

4. 编译服务:

cd ~/src/gitlab.com/ceres-mirror/exchange-trade-proxy4/server/trade/api
protoc --proto_path=. --go_out=. --micro_out=. proto/example/example.proto

5. 预先启动 consul:

6. 启动服务:

# 服务1:
./exchange-srv
# 服务2:
./exchange-web

# 启动 :8082 端口访问web端
micro web  

# 启动:
micro api  

image

7. 调用服务:

# 查看服务列表:
# henry@hh-rmbp: ~/iGit/iSpace/iGo                                                                                  (15:35:15)  
(py27-base) ζ micro list services                                                                                              
com.ceres.trade.proxy.srv.exchange
com.ceres.trade.proxy.web.exchange
consul
go.micro.api
go.micro.web
topic:com.ceres.trade.proxy.srv.exchange

# 调用API:
# henry@hh-rmbp: ~/iGit/iSpace/iGo                                                                                  (15:35:23)  
(py27-base) ζ micro call com.ceres.trade.proxy.srv.exchange Example.Call '{"name": "john"}'    
{
        "msg": "Hello john"
}
hhstore commented 5 years ago

go-micro example:

greeter:

booking:

hhstore commented 5 years ago

go-micro:

推荐目录结构:

user/
    api/    # api routes
    web/    # web html
    client/ # generated clients
    service/    # core service types
    handler/    # request handlers
    subscriber/ # message subscribers
    proto/  # proto generated code
    main.go # service main
    user.mu # mu definition
    README.md   # readme
hhstore commented 2 years ago

go-micro v4:

示例:

micro:

示例: