| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- package main
- import (
- "context"
- "flag"
- "os"
- nacosConfig "git.ikuban.com/server/kratos-nacos/config"
- "git.ikuban.com/server/kratos-nacos/registry"
- "github.com/go-kratos/kratos/v2/config/file"
- "git.ikuban.com/server/yaml"
- "github.com/go-kratos/kratos-layout/internal/conf"
- "github.com/go-kratos/kratos/v2"
- "github.com/go-kratos/kratos/v2/config"
- "github.com/go-kratos/kratos/v2/log"
- "github.com/go-kratos/kratos/v2/transport/grpc"
- "github.com/go-kratos/kratos/v2/transport/http"
- )
- // go build -ldflags "-X main.Version=x.y.z"
- var (
- // Name is the name of the compiled software.
- name string
- // Version is the version of the compiled software.
- Version string
- // flagconf is the config flag.
- flagconf string
- group string
- namespace string
- configSource string
- )
- func init() {
- flag.StringVar(&flagconf, "f", "", "config path, eg: -f configs/config.yaml")
- if configSource == "" {
- configSource = "http://wxbot-cfg.cpshelp.cn:80"
- }
- if group == "" {
- group = "wxbot"
- }
- if os.Getenv("WXBOT_GROUP") != "" {
- group = os.Getenv("WXBOT_GROUP")
- }
- if namespace == "" {
- namespace = "fbdb8990-cd74-4703-a14f-8a10c3290270"
- }
- if os.Getenv("WXBOT_NAMESPACE") != "" {
- namespace = os.Getenv("WXBOT_NAMESPACE")
- }
- if os.Getenv("WXBOT_CONFIG_SOURCE") != "" {
- configSource = os.Getenv("WXBOT_CONFIG_SOURCE")
- }
- }
- func newApp(ctx context.Context, logger log.Logger, r *registry.Registry, hs *http.Server, gs *grpc.Server) *kratos.App {
- opts := []kratos.Option{
- kratos.Name(name),
- kratos.Version(Version),
- kratos.Metadata(map[string]string{}),
- kratos.Logger(logger),
- kratos.Server(
- hs,
- gs,
- ),
- kratos.Context(ctx),
- }
- if r != nil {
- opts = append(opts, kratos.Registrar(r))
- }
- err := postInitService()
- if err != nil {
- panic(err)
- }
- return kratos.New(
- opts...,
- )
- }
- func main() {
- flag.Parse()
- ctx := context.Background()
- logger := log.NewStdLogger(os.Stdout)
- logger = log.With(logger, "caller", log.Caller(4), "ts", log.DefaultTimestamp)
- var confSource config.Source
- if flagconf != "" {
- confSource = file.NewSource(flagconf)
- } else {
- confSource = nacosConfig.NewSource(configSource,
- namespace,
- nacosConfig.Group(group),
- nacosConfig.DataID(name),
- )
- }
- bc := new(conf.Bootstrap)
- c := config.New(
- config.WithSource(
- confSource,
- ),
- config.WithDecoder(func(kv *config.KeyValue, v map[string]interface{}) error {
- return yaml.Unmarshal(kv.Value, bc)
- }),
- )
- if err := c.Load(); err != nil {
- panic(err)
- }
- if bc.Server.Registrar == nil {
- bc.Server.Registrar = &conf.Registrar{}
- }
- if bc.Server.Registrar.Namespace == "" {
- bc.Server.Registrar.Namespace = namespace
- }
- if bc.Server.Registrar.Group == "" {
- bc.Server.Registrar.Group = group
- }
- if bc.Server.Registrar.Endpoint == "" {
- bc.Server.Registrar.Endpoint = configSource
- }
- if bc.TraceConf == nil {
- bc.TraceConf = new(conf.TraceConf)
- }
- app, cleanup, err := initApp(ctx, bc, logger)
- if err != nil {
- panic(err)
- }
- defer cleanup()
- // start and wait for stop signal
- if err = app.Run(); err != nil {
- panic(err)
- }
- }
- // postInitService 在data和service初始化的之后的执行的方法
- func postInitService() error {
- return nil
- }
|