envoy源代码分析(六)--listener与endpoint
工厂
有一批工厂类,都是静态的,可以通过名字获取它们,如:
Factory* factory = Registry::FactoryRegistry<Factory>::getFactory(name);
它们的定义,是通过宏完成的:
REGISTER_FACTORY(DefaultListenerManagerFactoryImpl, ListenerManagerFactory);
宏展开之后类似:
static ::Envoy::Registry::RegisterFactory<MyFilterFactory, NamedHttpFilterConfigFactory> MyFilterFactory_NamedHttpFilterConfigFactory_registered_;
既然可以用名字获取,也自然能在配置中反射。其方法叫做typed_config
https://www.envoyproxy.io/docs/envoy/v1.34.1/configuration/overview/extension.html
具体的代码实现:
类型字符串是注册工厂类时候的名字, 见函数

见父类的定义,有个名字name和类型category

定义工厂的时候,进行赋值


又比如,default_local_address_selector的名字

Listener
listener可以对应配置中的LDs,用于接收配置并更新至转发流程中。

EndPoint
endpoint是实现在upstream包里的,挂在cluster数据结构下,它的实体类是HostImpl
关键函数是createConnection()

浙公网安备 33010602011771号