micro.newService()中newOptions

func newOptions(opts ...Option) Options {    opt := Options{        Auth:      auth.DefaultAuth,        Broker:    broker.DefaultBroker,        Cmd:       cmd.DefaultCmd,        Config:    config.DefaultConfig,        Client:    client.DefaultClient,        Server:    server.DefaultServer,        Store:     store.DefaultStore,        Registry:  registry.DefaultRegistry,        Router:    router.DefaultRouter,        Runtime:   runtime.DefaultRuntime,        Transport: transport.DefaultTransport,        Context:   context.Background(),        Signal:    true,    }        for _, o := range opts {        o(&opt)    }    return opt}

初始化了一堆根底设置,来看看Router
router.DefaultRouter,
在router/router.go中的
DefaultRouter = NewRouter()

// NewRouter creates new Router and returns itfunc NewRouter(opts ...Option) Router {    return newRouter(opts...)}// newRouter creates new router and returns itfunc newRouter(opts ...Option) Router {    // get default options    options := DefaultOptions()    // apply requested options    for _, o := range opts {        o(&options)    }    // construct the router    r := &router{        options:     options,        subscribers: make(map[string]chan *Advert),    }    // create the new table, passing the fetchRoute method in as a fallback if    // the table doesn't contain the result for a query.    r.table = newTable(r.fetchRoutes)    // start the router and return    r.start()    return r}

这里做了以下事件:

  1. 初始化并设置Options
  2. 初始化router{}
  3. fetchRoutes()检索给定服务的所有路由,并在路由表中创立它们

    1. r.options.Registry.GetService{}获取所有服务
    2. r.manageRoutes(srv, "create", domain)

      1. 每个节点初始化Route{}
      2. r.manageRoute(route, action)

        1. r.table.Create(route)在路由表中创立新的路由
  4. 调用newTable()创立新table,返回table{}
  5. r.start(),启动路由

    1. r.options.Prewarm是否预热路由表,须要就调用r.manageRegistryRoutes(r.options.Registry, "create")创立所有路由
    2. 增加默认网关到路由表
    3. registry watcher监听服务注册变动
    4. 启动协程,监听退出信号,服务注册变动信号,watchRegistry监督注册表并依据接管到的事件更新路由表。

如果注册表监督程序失败或路由表更新失败,则返回谬误。

执行到到router的时候,服务都曾经在注册核心注册好了,这里router会获取所有服务,建好路由表了