Go Micro 入门指南

栏目: 服务器 · 发布时间: 6年前

内容简介:首先关于

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Mobilizing Web Sites

Mobilizing Web Sites

Layon, Kristofer / 2011-12 / 266.00元

Everyone has been talking about the mobile web in recent years, and more of us are browsing the web on smartphones and similar devices than ever before. But most of what we are viewing has not yet bee......一起来看看 《Mobilizing Web Sites》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

html转js在线工具
html转js在线工具

html转js在线工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具