go-micro开发第一个微服务

准备工作

想要用go开发一个微服务,首先需要三个可执行文件 :protoc ,protoc-gen-go ,protoc-gen-micro ,跟着下面的步骤开始准备

  1. 以下两种方式任选一种即可安装protoc,完成后命令行输入: protoc 查看是否安装成功
  • sudo apt install protobuf-compiler
  • https://github.com/protocolbuffers/protobuf/releases 选择对应的编译版本,我这里选择protoc-3.14.0-linux-x86_64.zip,下载好后,把/bin下的protoc 放到/usr/local/bin下,或设置一个软链接到/usr/local/bin下。
  1. 安装protoc-gen-go
  • go get -u github.com/golang/protobuf/protoc-gen-go
  1. 安装prtotc-gen-micro
  • go get github.com/micro/protoc-gen-micro

    第2,3步两个命令会把可执行文件放到gobin下的bin目录,然后再设置软链接到/usr/local/bin下

开始编写代码
服务端 :

在这里插入图片描述

microServer/proto/hello.proto

syntax = "proto3";
package myfirstmicro;
option go_package = "proto;mymicro";

service Hello {
    rpc MyHelloService (HelloReq) returns (HelloRes) ;
}

message HelloReq { 
    string Name = 1;
}

message HelloRes {
    string ResName = 1 ;
}

在项目目录下执行:protoc -I=./proto --go_out=. --micro_out=. ./proto/hello.proto
生成 microServer/proto/hello.pb.go 和 microServer/proto/hello.pb.micro.go两个文件
然后编写 microServer/controller/hello.go:

package controller

import (
	"context"
	"fmt"
	pb "microServer/proto"
)

type HelloService struct {
}

func NewHelloService() *HelloService {
	return &HelloService{}
}

func (h *HelloService) MyHelloService(ctx context.Context, req *pb.HelloReq, res *pb.HelloRes) error {
	fmt.Println("传入的结构体:", req.Name)
	//具体逻辑,假装查了一下数据库
	res.ResName = "你好" + req.Name
	fmt.Println("返回的结构体:", res.ResName)
	return nil
}

编写main.go文件

package main

import (
	"microServer/controller"
	pb "microServer/proto"

	"github.com/micro/go-micro/v2"
)

func main() {
	server := micro.NewService(
		micro.Name("myMicro"),
	)
	server.Init()
	_ = pb.RegisterHelloHandler(server.Server(), controller.NewHelloService())

	server.Run()
}

项目启动:go run main.go

客户端 :

在这里插入图片描述

microClient/main.go

package main

import (
	"context"
	"fmt"
	pb "microServer/proto"

	"github.com/micro/go-micro/v2"
)

func main() {
	//构建微服务
	server := micro.NewService()
	server.Init()
	// 调用服务端 /microServer/proto/hello.pb.micro.go中的方法
	// 得到一个结构体(该结构体实现了 client api 的方法)
	helloService := pb.NewHelloService("myMicro", server.Client())
	// 调用服务端 /microServer/proto/hello.pb.go中的方法
	// 得到入参结构体
	HelloReq := &pb.HelloReq{
		Name: "my name",
	}
	// 调用 /microServer/proto/hello.pb.micro.go中的方法(client api)
	// (client api 这个方法的具体实现中调用了 Server API 的MyHelloService 方法)
	// Server API 中的这个方法最终是由/microServer/controller中的 HelloService 实现了
	res, err := helloService.MyHelloService(context.Background(), HelloReq)
	fmt.Println("res:", res, "err:", err)

}

项目启动:go run main.go

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值