内容简介:首先关于
go-micro
是一种可插拔的RPC分布式系统微服务开发框架,这一章主要介绍一下入门的相关内容。
服务发现依赖项
首先 micro
这个框架需要且依赖于服务发现工具(service discovery),框架默认的服务发现 工具 是 Consul
,同时框架的插拔机制也可确保能够切换到其他的服务发现工具上,如Etcd、NATS等,详见
micro plugins
;
关于 consul
的安装与运行:
$ brew install consul # 安装 $ consul agent -dev # 运行
gRPC的安装
由于 micro
框架基于 gRPC
,故需要安装相关依赖项,同时安装时确保 go version
版本在 1.6
以上;
安装 gRPC
$ go get -u google.golang.org/grpc
安装Protocol Buffers v3
安装用于生成 gRPC
服务代码的 protoc
编译器工具;
最简单的方式是通过在 protobuf工具文件列表
中,以查看 protoc-<version>-<platform>.zip
文件名格式的方式找出符合你当前版本及系统平台的安装包,找到后下载解压放置于 bin
目录、修改环境变量PATH等;
同时安装protoc go插件
$ go get -u github.com/golang/protobuf/protoc-gen-go
Micro相关安装
框架包的安装
$ go get github.com/micro/go-micro
protoc micro插件安装
用于通过 .proto
文件生成 .micro.go
代码文件
$ go get github.com/micro/protoc-gen-micro
micro工具包的安装
$ go get github.com/micro/micro
micro 命令行工具可以提供诸如服务列表查看、服务详情查看、调用服务接口等功能;
实践一下
首先,创建一个 user.proto
结构文件
syntax = "proto3"; service User { rpc Hello(Request) returns (Response) {} } message Request { string name = 1; } message Response { string msg = 1; }
其次,通过proto文件编译生成代码
protoc --proto_path=$GOPATH/src:. --micro_out=. --go_out=. user.proto
此时,通过 protoc
工具对 user.proto
文件的编译,生成了两个 go 文件:
- user.micro.go
- user.pb.go
然后,分别编写服务端及客户端代码
服务端 service.go
package main import ( "context" "fmt" proto "github.com/JiangInk/coin_exchange/ms-user/proto" micro "github.com/micro/go-micro" ) type User struct{} func (u *User)Hello(ctx context.Context, req *proto.Request, res *proto.Response)error { res.Msg = "Hello " + req.Name return nil } func main() { service := micro.NewService( micro.Name("user"), ) service.Init() proto.RegisterUserHandler(service.Server(), new(User)) if err := service.Run(); err != nil { fmt.Println(err) } }
客户端 client.go
package main import ( "context" "fmt" proto "github.com/JiangInk/coin_exchange/ms-user/proto" micro "github.com/micro/go-micro" ) func main() { service := micro.NewService(micro.Name("user.client")) service.Init() user := proto.NewUserService("user", service.Client()) res, err := user.Hello(context.TODO(), &proto.Request{Name: "World ^_^"}) if err != nil { fmt.Println(err) } fmt.Println(res.Msg) }
最后,运行起来
首先启动服务发现
$ consul agent -dev
可通过访问: http://127.0.0.1:8500/ui/ 查看服务;
启动服务端程序
$ go run service.go
此时刷新: http://127.0.0.1:8500/ui/
页面会发现新服务 user
;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript高级程序设计(第3版)
[美] Nicholas C. Zakas / 李松峰、曹力 / 人民邮电出版社 / 2012-3-29 / 99.00元
本书是JavaScript 超级畅销书的最新版。ECMAScript 5 和HTML5 在标准之争中双双胜出,使大量专有实现和客户端扩展正式进入规范,同时也为JavaScript 增添了很多适应未来发展的新特性。本书这一版除增加5 章全新内容外,其他章节也有较大幅度的增补和修订,新内容篇幅约占三分之一。全书从JavaScript 语言实现的各个组成部分——语言核心、DOM、BOM、事件模型讲起,深......一起来看看 《JavaScript高级程序设计(第3版)》 这本书的介绍吧!