Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Golang: micro service framework - go-micro #88

Open
hhstore opened this issue Sep 3, 2018 · 7 comments
Open

Golang: micro service framework - go-micro #88

hhstore opened this issue Sep 3, 2018 · 7 comments

Comments

@hhstore
Copy link
Owner

hhstore commented Sep 3, 2018

 相关:

@hhstore
Copy link
Owner Author

hhstore commented Sep 3, 2018

micro service framwork diff:

中文文档:

对比其他框架:

ref:

关于 micro service 的定义:

go-micro:

项目说明:

  • Micro包含开源库和工具,可帮助开发微服务。
  • go-micro - 用于编写微服务的可插拔Go RPC框架; 服务发现,客户端/服务器rpc,发布/订阅等
  • go-plugins - go-micro的插件,包括etcd,kubernetes,nats,rabbitmq,grpc等。
  • micro - 包含传统入口点的微服务工具包; API网关,CLI,Slack Bot,代理和Web UI。
  • 可以在github.com/micro中找到各种其他库和服务。

官方示例合集:

ref:

项目用户列表:

示例Demo:

go-micro 教程:

基于 go-micro 的项目:

FAQ:

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

  • https://lixiangyun.gitbooks.io/go-micro/content/Overview/FAQ.html

  • API服务:

  • Web服务:

    • https://github.com/micro/micro/tree/master/web
    • Web服务由Micro Web提供,默认名称空间为go.micro.web。
    • 我们相信web应用程序是微服务世界中的一等公民,因此可以将web仪表板作为微服务来构建。
    • Micro网络是一个反向代理,它会根据服务解析的路径将HTTP请求转发到相应的Web应用程序。
  • SRV服务:

    • SRV服务基本上是标准的RPC服务,通常这是你写的服务。
    • 我们通常称它们为RPC或后端服务,因为它们主要应该是后端架构的一部分,并且永远不会面向公众。
      -默认情况下,我们使用命名空间go.micro.srv,但是您应该使用您的域com.example.srv。

2. Micro是否支持gRPC?

@hhstore
Copy link
Owner Author

hhstore commented Sep 3, 2018

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


  • 主要步骤:
      1. .proto文件转换为swagger.json文件
      1. 合并所有swagger.json成为一个
      1. Serve the API

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
Copy link
Owner Author

hhstore commented Sep 21, 2018

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
Copy link
Owner Author

hhstore commented Sep 23, 2018

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

  • 完整创建步骤
  • 以 gitlab 为例

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. 编译服务:

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


  • 遇到 gen 报错, 可能是多个 GOPATH 问题, 改成一个, 可解决.

5. 预先启动 consul:

  • 参考上面

6. 启动服务:

  • 打开多个terminal窗口, 分别启动:
# 服务1:
./exchange-srv
# 服务2:
./exchange-web

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

# 启动:
micro api  

  • web端:
    image

  • web端调用:

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
Copy link
Owner Author

hhstore commented Mar 14, 2019

go-micro example:

greeter:

booking:

@hhstore hhstore mentioned this issue Mar 18, 2019
3 tasks
@hhstore
Copy link
Owner Author

hhstore commented May 1, 2019

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
Copy link
Owner Author

hhstore commented Apr 8, 2022

go-micro v4:

  • https://github.com/asim/go-micro
  • 作者又回来维护 go-micro 了. 可喜可贺.
  • 可惜了 go-micro 这个项目. 错过了最好的时机.
  • 虽然我尝试使用 go-kratos, go-zero, 还是有很多不爽的地方.
  • 要不要再给 go-micro 一个机会?

示例:

micro:

示例:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant