Go Micro 入门指南

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

内容简介:首先关于

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


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

查看所有标签

猜你喜欢:

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

刷屏

刷屏

[美] 凯文•阿洛卡 / 侯奕茜、何语涵 / 中信出版社 / 2018-10-1 / 68.00

1. YouTube流行趋势经理,解密如何打造爆款视频 在视频时代,制造互动,才能创造潮流 用户不再是被动的观众,而是主动的传播者 2. 《刷屏》以行内人视角解读: 病毒视频 粉丝经济 网红产业 平台如何为内容创作者赋能 3. 你是否常常被病毒视频刷屏?你是否觉得很多网红火爆到“无法用常理解释”? 视频时代已经到来,我们每天观看网络......一起来看看 《刷屏》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具