• Go Micro


    安装依赖

      Go Micro  

    $ go get github.com/micro/go-micro
    

      

      Protobuf (如果您使用代码生成,您还需要使用protoc-gen-go)

    $ go get github.com/micro/protobuf/{proto,protoc-gen-go}
    

      

      工具包 (Micro工具包提供了访问微服务的各种方法)

    $ go get github.com/micro/micro
    

      

      Docker (可用预制docker images)

    $ docker pull microhq/micro
    

      

      尝试CLI

        运行greeter服务
    $ go get github.com/micro/examples/greeter/srv && srv
    

     

        服务清单
    $ micro list services
    consul
    go.micro.srv.greeter
    

      

       获取服务
    $ micro get service go.micro.srv.greeter
    service  go.micro.srv.greeter
    
    version 1.0.0
    
    Id	Address	Port	Metadata
    go.micro.srv.greeter-34c55534-368b-11e6-b732-68a86d0d36b6	192.168.1.66	62525	server=rpc,registry=consul,transport=http,broker=http
    
    Endpoint: Say.Hello
    Metadata: stream=false
    
    Request: {
    	name string
    }
    
    Response: {
    	msg string
    }
    

      

        查询服务 
    $ micro query go.micro.srv.greeter Say.Hello '{"name": "John"}'
    {
    	"msg": "Hello John"
    }
    

      

        调用服务
     $ micro call hello Greeter.Greet '{"name":"SngZhibin","msg":"null"}'
    {
            "name": "SngZhibin",
            "msg": "SngZhibin您好"
    }
    
    // hello是服务名 Greeter.Greet是.proto中定义的服务
    

      

    创建服务实例 

    // demo.proto
    
    syntax = "proto3"; // 指定版本
    package pb; // 包名
    
    message Request {
        string name = 1;
        string msg = 2;
    }
    message Response {
        string name = 1;
        string msg = 2;
    }
    service Greeter {
        // 服务
        rpc Greet (Request) returns (Response) {
        }
    }
    

      

    使用protoc工具生成对应代码后服务代码

    // 服务代码
    package main
    
    import (
    	"Songzhibin/raftRealize/microDemo/pb"
    	"context"
    	"fmt"
    	"github.com/micro/go-micro"
    )
    
    // 自定义结构体
    type server struct{}
    
    func (s server) Greet(ctx context.Context, req *pb.Request, rep *pb.Response) error {
    	rep.Name = req.Name
    	rep.Msg = req.Name + "您好"
    	return nil
    }
    func main() {
    	// 创建服务
    	s := micro.NewService(
    		// micro.Name("服务名")
    		micro.Name("hello"),
    	)
    	// 初始化
    	s.Init()
    	// 注册
    	pb.RegisterGreeterHandler(s.Server(), &server{})
    	err := s.Run()
    	if err != nil {
    		fmt.Println(err)
    	}
    }
    

     

    // PS: 这里遇到一个问题就是本地下载包后无法正常启动编译服务 使用go mod 正常

    终端调用

    $ micro call hello Greeter.Greet '{"name":"SngZhibin","msg":"null"}'
    {
            "name": "SngZhibin",
            "msg": "SngZhibin您好"
    }
    

     

    代码调用 

    package main
    
    import (
    	"Songzhibin/raftRealize/microDemo/pb"
    	"context"
    	"fmt"
    	"github.com/micro/go-micro"
    )
    
    func main() {
    	s := micro.NewService(
    		// micro.Name("服务名")
    		micro.Name("hello"),
    	)
    	greeter := pb.NewGreeterClient("hello", s.Client())
    	rep, err := greeter.Greet(context.TODO(), &pb.Request{
    		Name: "Songzhibin",
    		Msg:  "null",
    	}, )
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	fmt.Printf("%#v",rep)
    }
    

      

    http Api调用

    // 先开启api
    $  micro api --handler=rpc 
    // 在启动服务
    // PS:服务名有要求 go.micro.api.xxx
    2020-03-01 11:24:41.173184 I | Transport [http] Listening on [::]:54896
    2020-03-01 11:24:41.173269 I | Broker [http] Connected to [::]:54897
    2020-03-01 11:24:41.173562 I | Registry [mdns] Registering node: go.micro.api.hello-7269ef09-b1bd-40eb-b6e2-627023af0009
    // 有 connect to 即可判断连接成功
    // 在postman 调用
    http://localhost:8080/hello/Greeter/Greet -> post
    // hello 服务名 Greeter 注册服务  Greet调用方法
    body:
    {
     "name":"Songzhibin",
     "msg":"Null"
    }
    
    res:
    {
        "name": "Songzhibin",
        "msg": "Songzhibin您好"
    }
    

      

    更多使用访问中文文档

    Songzhibin
  • 相关阅读:
    js 仿 asp中的 asc 和 chr 函数的代码
    escape,encodeURI,encodeURIComponent
    从项目从SVN上check下来,用idea打开后,idea没有SVN的工具栏解决方法
    idea中导入SVN的项目时,连接失败,报“Cannot run program "svn"
    spring基础----事件(Applicaition Event)
    idea在导入项目时遇到的问题
    Spring基础---bean的初始化和销毁
    spring基础----EL和资源调用
    spring基础----Bean的Scope
    面试题-------------js三种信息框
  • 原文地址:https://www.cnblogs.com/binHome/p/12381511.html
Copyright © 2020-2023  润新知