in pkg/config/xds/xds.go [80:109]
func (a *Xds) readDubboServiceFromListener() ([]string, error) {
dubboServices := make([]string, 0)
listeners, err := a.listenerMg.CloneXdsControlListener()
if err != nil {
return nil, err
}
for _, l := range listeners {
for _, filter := range l.FilterChain.Filters {
if filter.Name != constant.HTTPConnectManagerFilter {
continue
}
var cfg *model.HttpConnectionManagerConfig
if filter.Config != nil {
if err := mapstructure.Decode(filter.Config, &cfg); err != nil {
logger.Error("read listener config error when init xds", err)
continue
}
}
for _, httpFilter := range cfg.HTTPFilters {
if httpFilter.Name == constant.HTTPDirectDubboProxyFilter {
for _, route := range cfg.RouteConfig.Routes {
dubboServices = append(dubboServices, route.Route.Cluster)
}
}
}
}
}
return dubboServices, nil
}