zoukankan      html  css  js  c++  java
  • go-micro+consul+gin

    安装(前提是本地已安装protobuf和protof的go扩展)

    go get github.com/micro/micro

    go get github.com/micro/go-micro

    go get github.com/micro/protoc-gen-micro

    go get github.com/micro/go-plugins/registry/consul

    支持consul需要单独安装这个包

    go get github.com/micro/go-plugins/registry/consul

    micro生成新项目

    micro new --gopath=false --type=srv micpro

    进入到 proto文件的同级目录,然后执行以下命令生成go文件

    protoc  --micro_out=. --go_out=. *.proto

    package main
    
    import (
    	"github.com/micro/go-micro"
    	"github.com/micro/go-micro/util/log"
    	"github.com/micro/go-plugins/registry/consul"
    	"micpro/handler"
    	micpro "micpro/proto/micpro"
    )
    
    func main() {
    
    	consulRegis := consul.NewRegistry()
    
    	// New Service
    	service := micro.NewService(
    		micro.Name("go.micro.srv.micpro"),
    		micro.Version("latest"),
    		micro.Registry(consulRegis),
    		micro.Address("127.0.0.1:10345"),
    	)
    
    	// Initialise service
    	service.Init()
    
    	// Register Handler
    	micpro.RegisterMicproHandler(service.Server(), new(handler.Micpro))
    
    	// Run service
    	if err := service.Run(); err != nil {
    		log.Fatal(err)
    	}
    }
    

      

    将micro框架proto目录下的文件拷贝到gin目录下,然后在main.go中使用consul

    package main
    
    import (
    	context2 "context"
    	"fmt"
    	micpro "gintemp/proto/micpro"
    	"github.com/gin-gonic/gin"
    	"github.com/micro/go-micro"
    	"github.com/micro/go-micro/client"
    	"github.com/micro/go-plugins/registry/consul"
    	"time"
    )
    
    func microCall(context *gin.Context){
    
    	reg := consul.NewRegistry()
    	service := micro.NewService(micro.Registry(reg))
    	micServ := micpro.NewMicproService("go.micro.srv.micpro",service.Client())
    	res,err := micServ.Call(context2.TODO(),&micpro.Request{Name:"mayuan"},func(o *client.CallOptions) {
    		o.RequestTimeout = time.Second * 30
    		o.DialTimeout = time.Second * 30
    	})
    	if err != nil{
    		fmt.Println(err)
    	}
    	context.Writer.WriteString(res.Msg)
    }
    
    
    func main() {
    	route := gin.Default()
    	route.GET("/", microCall)
    	route.Run(":8080")
    }
  • 相关阅读:
    Django 类方式view进行进行用户验证
    Django-发送注册、忘记密码邮件验证-send_mail
    Django-当前菜单激活状态-模版 request | slice
    django url路由参数错误
    video.js不能控制本地视频或者音频播放时长
    Django中url使用命名空间的错误
    python_求相邻数
    scrapy_移除内容中html标签
    scrapy-redis功能简介
    Determining IP information for eth0...failed 错误解决
  • 原文地址:https://www.cnblogs.com/itsuibi/p/14730237.html
Copyright © 2011-2022 走看看