go-micro 微服务学习笔记(1)

最近接了一个项目,需要用到go微服务架构开发,由于本人是初次接触go语言,也是第一次自己搭建实现微服务框架,故对其实现细节先不进行深入解析,仅记录基本开发步骤。

 在经过一段时间的初步调研,决定选择go-micro为本次的开发框架,go-micro的基本原理网上有很多资料,再此就不过多阐述。想要了解的可以访问micro文档,其基本框架可以引用官方的一个框架图说明:

go-micro架构图

其中各个子模块的说如下:

子模块说明

其中除了Service,其他都是可插拔的。

编译安装好go-micro,可运行 micro new 项目名称 自动创建项目,其运行结果如下:

go-micro服务创建

需要注意的是用这次方式创建的默认通信为RPC(只支持POST请求),关于这方面的知识后面再说。

打开test.proto,可看到如下自动生成的接口:

syntax = "proto3";

package go.micro.srv.test;

service Test {
	rpc Call(Request) returns (Response) {}
	rpc Stream(StreamingRequest) returns (stream StreamingResponse) {}
	rpc PingPong(stream Ping) returns (stream Pong) {}
}

message Message {
	string say = 1;
}

message Request {
	string name = 1;
}

message Response {
	string msg = 1;
}

message StreamingRequest {
	int64 count = 1;
}

message StreamingResponse {
	int64 count = 1;
}

message Ping {
	int64 stroke = 1;
}

message Pong {
	int64 stroke = 1;
}

进入项目目录下,如这里创建的项目为test,进入test目录下,运行 protoc --proto_path=. --go_out=. --micro_out=. proto/test/test.proto,即可自动生成相关代码。

由于默认使用的服务发现为mDNS,故需要修改其方式,代码如下:

package main

import (
	"github.com/micro/go-micro/util/log"
	"github.com/micro/go-micro"
	"test/handler"
	"test/subscriber"

	test "test/proto/test"
    "github.com/micro/go-micro/registry"
    "github.com/micro/go-micro/registry/consul"
)

func main() {
	// New Service
    reg := consul.NewRegistry(func(op *registry.Options) {
		op.Addrs = []string{
            "127.0.0.1:8500",
		}
	})

	// New Service
	service := micro.NewService(
        micro.Registry(reg),
		micro.Name("go.micro.srv.test"),
		micro.Version("latest"),
	)

	// Initialise service
	service.Init()

	// Register Handler
	test.RegisterTestHandler(service.Server(), new(handler.Test))

	// Register Struct as Subscriber
	micro.RegisterSubscriber("go.micro.srv.test", service.Server(), new(subscriber.Test))

	// Register Function as Subscriber
	micro.RegisterSubscriber("go.micro.srv.test", service.Server(), subscriber.Handler)

	// Run service
	if err := service.Run(); err != nil {
		log.Fatal(err)
	}
}

go-micro目前默认的服务发现方式是mDNS,想简单入门可以选择consul方式,安装配置好之后可输入下列方式启动:

consul agent -dev -ui -node=consul-dev -client=127.0.0.1

再启动micro api(选择RPC方式):

micro --registry_address=127.0.0.1:8500 --register_interval=5 --register_ttl=10 --registry=consul --api_handler=rpc --api_namespace=go.micro.srv api

此时,运行程序,就可以通过 http://127.0.0.1:8080/test/Call 的方式调用接口,运行结果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值