在每个模块中的main函数写的太长,不利于维护,可不可以将初始化注册中心:
consul:=consul.NewRegistry(func(options *registry.Options) {
options.Addrs = []string{
consulHost+":"+strconv.FormatInt(consulPort,10),
}
})
初始化数据库:
db,err := gorm.Open("mysql",mysqlInfo.User+":"+mysqlInfo.Pwd+"@("+mysqlInfo.Host+":3306)/"+mysqlInfo.Database+"?charset=utf8&parseTime=True&loc=Local")
if err !=nil {
//命令行输出下,方便查看错误
fmt.Println(err)
common.Fatal(err)
}
初始化k8s:
var kubeconfig *string
if home := homedir.HomeDir(); home != "" {
kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file")
} else {
kubeconfig = flag.String("kubeconfig", "", "absolute path to the kubeconfig file")
}
flag.Parse()
config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
if err != nil {
common.Fatal(err.Error())
}
//在集群中外的配置
//config, err := rest.InClusterConfig()
//if err != nil {
// panic(err.Error())
//}
// create the clientset
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
common.Fatal(err.Error())
}
创建服务:
service := micro.NewService(
//自定义服务地址,且必须写在其它参数前面
micro.Server(server.NewServer(func(options *server.Options) {
options.Advertise =serviceHost+":"+servicePort
})),
micro.Name("go.micro.service.middleware"),
micro.Version("latest"),
//指定服务端口
micro.Address(":"+servicePort),
//添加注册中心
micro.Registry(consul),
//添加链路追踪
micro.WrapHandler(opentracing2.NewHandlerWrapper(opentracing.GlobalTracer())),
micro.WrapClient(opentracing2.NewClientWrapper(opentracing.GlobalTracer())),
//只作为客户端的时候起作用,如果存在调用别人的情况,原则上不去主动调用
//micro.WrapClient(hystrix2.NewClientHystrixWrapper()),
//添加限流
micro.WrapHandler(ratelimit.NewHandlerWrapper(1000)),
)
这些代码都放到common这个独立的模块,这样其他模块在初始化的时候直接调用common就可以了?