基于Golang的微服务——Micro实践(二)

这篇文章主要是微服务客户端,函数,发布订阅...的实践。git

想了解微服务服务端定义的请看我上一篇文章基于Golang的微服务——Micro实践(一)github

在 Micro 架构中, 一个完整的请求流程是:web

api-gateway => [customer-api | customer-web ] => customer-srv后端

其中 api-gateway 是 有 micro 工具直接提供的, customer-(api | web | srv) 则是 micro中的开发概念.api

在 micro 中, 服务分为三种类型:bash

  • srv:srv 是标准的 RPC 服务, 也能够叫作后端服务, 开发人员一般写的就是这种类型. 在 Micro 的设想中, 这一服务永远不会面向用户,属于内部服务.
  • api:提供 HTTP 到 RPC 的转换服务, API 网关默认状况下会将请求转发给它来处理.
  • web:Micro 认为 web 也能够当作微服务来建立.

附一张图演示这SRV, API, WEB三者之间的关系:markdown

定义客户端

popular项目目录下新建文件 client.go,编辑文件内容架构

package main

import (
	"context"
	"fmt"
	micro "github.com/micro/go-micro"
	proto "popular/proto"
)


func main() {
	// 定义服务,能够传入其它可选参数
	service := micro.NewService(micro.Name("popular.client"))
	service.Init()

	// 建立新的客户端
	popular := proto.NewGreeterService("popular", service.Client())

	// popular
	rsp, err := popular.Ping(context.TODO(), &proto.PingRequest{Name: "winyh"})
	if err != nil {
		fmt.Println(err)
	}

	// 打印响应请求
	fmt.Println(rsp.Popularing)
}
复制代码

运行客户端框架

go run client.go
复制代码

输出内容为:函数

Ping winyh
复制代码

定义Function

Function是指接收一次请求,执行后便退出的服务

只须要稍微改造下main.go 文件便可

package main

import (
	"context"
	"fmt"
	micro "github.com/micro/go-micro"
	proto "popular/proto"
)

type Popular struct{}

func (g *Popular) Ping(ctx context.Context, req *proto.PingRequest, rsp *proto.PingResponse) error {
	rsp.Popularing = "Ping " + req.Name
	return nil
}

func main() {

	// 建立新的服务,这里能够传入其它选项。
	service := micro.NewService(
		micro.Name("popular"),
	)

	// 初始化方法会解析命令行标识
	service.Init()

	// 注册处理器
	proto.RegisterPopularHandler(service.Server(), new(Popular))

	// 运行服务
	if err := service.Run(); err != nil {
		fmt.Println(err)
	}

	/********* == 函数定义 == *********/
	// 建立新函数
	fnc := micro.NewFunction(
		micro.Name("popular"),
	)

	// 初始化命令行
	fnc.Init()

	// 注册handler
	fnc.Handle(new(Popular))

	// 运行服务
	fnc.Run()
}
复制代码

发布与订阅

Go-micro 给事件驱动架构内置了消息代理(broker)接口。发布与订阅像RPC同样操控生成的protobuf消息。这些消息会自动编/解码并经过代理发送.

[这部分我得理解下...],先写我以前练手的一个小项目 基于Golang的开发框架Gin实战

相关文章
相关标签/搜索