zoukankan      html  css  js  c++  java
  • 5.使用内置命令参数启动、注册多个服务

    看下面的代码调用了server.Init()之后就支持命令行读取配置了

    package main
    
    import (
        "github.com/gin-gonic/gin"
        "github.com/micro/go-micro/registry"
        "github.com/micro/go-micro/web"
        "github.com/micro/go-plugins/registry/consul"
    )
    
    func main() {
        consulReg := consul.NewRegistry( //新建一个consul注册的地址,也就是我们consul服务启动的机器ip+端口
            registry.Addrs("localhost:8500"),
        )
        ginRouter := gin.Default()
        ginRouter.Handle("GET", "/user", func(context *gin.Context) {
            context.String(200, "user api")
        })
        ginRouter.Handle("GET", "/news", func(context *gin.Context) {
            context.String(200, "news api")
        })
        server := web.NewService( //go-micro很灵性的实现了注册和反注册,我们启动后直接ctrl+c退出这个server,它会自动帮我们实现反注册
            web.Name("prodservice"), //注册进consul服务中的service名字
            //web.Address(":8001"), //注册进consul服务中的端口
            web.Handler(ginRouter), //web.Handler()返回一个Option,我们直接把ginRouter穿进去,就可以和gin完美的结合
            web.Registry(consulReg),//注册到哪个服务器伤的consul中
        )
        server.Init() //加了这句就可以使用命令行的形式去设置我们一些启动的配置
        /* Init支持以下参数 这是源代码
        func (s *service) Init(opts ...Option) error {
        for _, o := range opts {
            o(&s.opts)
        }
    
        serviceOpts := []micro.Option{}
    
        if len(s.opts.Flags) > 0 {
            serviceOpts = append(serviceOpts, micro.Flags(s.opts.Flags...))
        }
    
        if s.opts.Registry != nil {
            serviceOpts = append(serviceOpts, micro.Registry(s.opts.Registry))
        }
    
        serviceOpts = append(serviceOpts, micro.Action(func(ctx *cli.Context) {
            if ttl := ctx.Int("register_ttl"); ttl > 0 {
                s.opts.RegisterTTL = time.Duration(ttl) * time.Second
            }
    
            if interval := ctx.Int("register_interval"); interval > 0 {
                s.opts.RegisterInterval = time.Duration(interval) * time.Second
            }
    
            if name := ctx.String("server_name"); len(name) > 0 {
                s.opts.Name = name
            }
    
            if ver := ctx.String("server_version"); len(ver) > 0 {
                s.opts.Version = ver
            }
    
            if id := ctx.String("server_id"); len(id) > 0 {
                s.opts.Id = id
            }
    
            if addr := ctx.String("server_address"); len(addr) > 0 {
                s.opts.Address = addr
            }
    
            if adv := ctx.String("server_advertise"); len(adv) > 0 {
                s.opts.Advertise = adv
            }
    
            if s.opts.Action != nil {
                s.opts.Action(ctx)
            }
        }))
    
        s.opts.Service.Init(serviceOpts...)
        srv := s.genSrv()
        srv.Endpoints = s.srv.Endpoints
        s.srv = srv
    
        return nil
    }
        */
        server.Run()
    }
    

    一般我们不推荐用这种方式去做服务注册,因为以后维护的人不知道你传的什么参数去注册的服务,导致维护困难,一般还是用读取配置文件的方式去注册服务





  • 相关阅读:
    RefineDet by hs
    RFCN by hs
    经典排序算法总结(二)by Rose
    Libra R-CNN——“平衡学习” by Rose
    经典排序算法总结(一)by Rose
    注意力机制在MDNet跟踪算法中的应用 by leona
    Deep Sort 多目标跟踪算法总结-by Wilson
    tf.truncated_normal_initializer
    tf.add_to_collection方法
    tf.trainable_variables方法
  • 原文地址:https://www.cnblogs.com/hualou/p/12097364.html
Copyright © 2011-2022 走看看