go-micro入门,文末有protobuf安装指南

go-micro讲解--Go Micro编写微服务

特别注意: 生成的文件中的package是example, 那么文件必须放在example文件夹下! 否则会报错: “can’t load package: package example:

例如:编译example.proto文件如果文件中是import example, 需要将该文件放到example包中然后执行protoc --go_out=

./   example.proto就可以在example包中生成一个example.pb.go文件

本文链接:https://blog.csdn.net/chenxun2009/article/details/80949539

一、什么是go-micro

  •  Go Micro是一个插件化的基础框架,基于此可以构建微服务。Micro的设计哲学是『可插拔』的插件化架构。在架构之外,它默认实现了consul作为服务发现,通过http进行通信,通过protobuf和json进行编解码。我们一步步深入下去。

Go Micro是:

  • 一个用Golang编写的包
  • 一系列插件化的接口定义
  • 基于RPc
  • Go Micro为下面的模块定义了接口:
  1. 服务发现
  2. 编解码
  3. 服务端、客户端
  4. 订阅、发布消息

二、使用go-micro编写微服务

安装protoc

1.github上下载一个cpp包:https://github.com/google/protobuf/releases make make install安装即可
2.protoc-gen-go
go get -u github.com/golang/protobuf/protoc-gen-go
3.安装protoc-gen-micro
go get github.com/micro/protoc-gen-micro

安装Consul

micro默认使用consul作为微服务发现

 
  1. Consul is used as the default service discovery system.

  2.  
  3. Discovery is pluggable. Find plugins for etcd, kubernetes, zookeeper and more in the micro/go-plugins repo.

https://www.consul.io/intro/getting-started/install.html

启动cansul方式参考如下:注意修改自己-data-dir目录路劲

 
  1. consul agent -server -node chenxun-server -bind=192.168.199.62 -data-dir D:\工作文件备份\consul_1.0.0_windows_amd64\tmp1 -ui

  2.  
  3. # consul agent -server -bootstrap-expect 1 -node chenxun-server -bind=192.168.199.62 -data-dir c:/tmp

  4.  
  5. # ./consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=chenxun-server -bind=192.168.145.130 -ui

  6.  

准备proto文件: 文件保存为chenxun.proto,名称随便写,在实际项目中根据项目写就好了

chenxun.proto

 
  1. syntax = "proto3";

  2.  
  3. service Greeter {

  4. rpc Hello(HelloRequest) returns (HelloResponse) {}

  5. }

  6.  
  7. message HelloRequest {

  8. string name = 1;

  9. }

  10.  
  11. message HelloResponse {

  12. string greeting = 2;

  13. }

Generate the proto:

protoc --proto_path=$GOPATH/src:. --micro_out=. --go_out=. chenxun.proto

执行命令后能看到下面文件:

 
  1. -rw-r--r--. 1 root root 2441 Jul 7 10:38 chenxun.micro.go

  2. -rw-r--r--. 1 root root 2914 Jul 7 10:38 chenxun.pb.go

  3. -rw-r--r--. 1 root root 185 Jul 6 11:36 chenxun.proto

  4.  

比如我把这三个文件放在gopath路劲下面的src目录下面的mygoproject/gomirco

那么在import的时候写: import "mygoproject/gomirco"

Service端代码:

 
  1. package main

  2.  
  3. import (

  4. "context"

  5. "fmt"

  6.  
  7. micro "github.com/micro/go-micro"

  8. proto "mygoproject/gomirco" //这里写你的proto文件放置路劲

  9. )

  10.  
  11. type Greeter struct{}

  12.  
  13. func (g *Greeter) Hello(ctx context.Context, req *proto.HelloRequest, rsp *proto.HelloResponse) error {

  14. rsp.Greeting = "Hello " + req.Name

  15. return nil

  16. }

  17.  
  18. func main() {

  19. // Create a new service. Optionally include some options here.

  20. service := micro.NewService(

  21. micro.Name("greeter"),

  22. )

  23.  
  24. // Init will parse the command line flags.

  25. service.Init()

  26.  
  27. // Register handler

  28. proto.RegisterGreeterHandler(service.Server(), new(Greeter))

  29.  
  30. // Run the server

  31. if err := service.Run(); err != nil {

  32. fmt.Println(err)

  33. }

  34. }

Client端代码:

 
  1. package main

  2.  
  3. import (

  4. "context"

  5. "fmt"

  6.  
  7. micro "github.com/micro/go-micro"

  8. proto "mygoproject/gomirco" //这里写你的proto文件放置路劲

  9. )

  10.  
  11.  
  12. func main() {

  13. // Create a new service. Optionally include some options here.

  14. service := micro.NewService(micro.Name("greeter.client"))

  15. service.Init()

  16.  
  17. // Create new greeter client

  18. greeter := proto.NewGreeterService("greeter", service.Client())

  19.  
  20. // Call the greeter

  21. rsp, err := greeter.Hello(context.TODO(), &proto.HelloRequest{Name: "John"})

  22. if err != nil {

  23. fmt.Println(err)

  24. }

  25.  
  26. // Print response

  27. fmt.Println(rsp.Greeting)

  28. }

运行service:

 
  1. go run examples/service/main.go

  2.  

运行client:

go run examples/client/main.go

 

 

protobuf安装指南

2015.08.05 14:29:54字数 309阅读 10095

1、protobuf是google公司提出的数据存储格式,详细介绍可以参考:https://developers.google.com/protocol-buffers

2、下载最新的protobuf,下载地址:https://code.google.com/p/protobuf/downloads/list

3、下载protobuf2.5.o版本,protobuf-2.5.0.tar.gz解压并进行安装。
解压:tar xvf protobuf-2.5.0.tar.gz
安装步骤:(1)./configure (2)make (3)make check (4)make install
注意:安装成功后,将它的bin和lib目录分别加入到PATH和LD_LIBRARY_PATH环境变量,以方便直接调用。

通常建议安装到/usr/local目录下,执行configure时,指定--prefix=/usr/local/protobuf即可

设置环境变量过程:编辑/etc/profile,在文件末尾添加:

export PATH=$PATH:/usr/local/protobuf/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib

此时最好重启一次。

4、测试例子:
创建一个.proto文件,文件为:x.proto

package x;
message person
{
   required string name = 1;
   required int32 id = 2;
   optional string email = 3;
}

编译成目标语言: protoc -I=src_dir --cpp_out=dst_dir src_dir/addressbook.proto

5、C++语言编译命令添加后缀如下:
-I/usr/local/protobuf/include -L/usr/local/protobuf/lib -lprotobuf -pthread

实现的例子程序链接:
https://github.com/1angxi/RPCFrame/

参考:
http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/
http://www.hadoopor.com/thread-1837-1-1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值