Soul网关总结01
1 插件调用链
总结:
每一个插件都自定了一个 spring boot starter。soul-bootstrap 中引入 starter 即可添加插件。
soul-bootstrap 启动时就会通过这些 starter 将插件 bean 初始化,并装载到上下文。
soul-bootstrap
通过soul-spring-boot-starter-gateway
这个starter来启动网关,soul-spring-boot-starter-gateway
依赖soul-web
,soul-web
的自动配置类:SoulConfiguration
中初始化了 webHandler
, dispatcherHandler
, pluginDataSubscriber
。
soul-bootstrap 引入了 webflux 依赖来实现反应式编程,初始化了一个 反应式 web 服务器:
/**
* 反应式web 服务器
* @return the netty reactive web server factory
*/
@Bean
public NettyReactiveWebServerFactory nettyReactiveWebServerFactory() {
NettyReactiveWebServerFactory webServerFactory = new NettyReactiveWebServerFactory();
webServerFactory.addServerCustomizers(new EventLoopNettyCustomizer());
return webServerFactory;
}
soul-web 从bean工厂加载所有插件并初始化 SoulWebHandler:
/**
* 从bean工厂加载插件并初始化 SoulWebHandler.
*/
@Bean("webHandler")
public SoulWebHandler soulWebHandler(final ObjectProvider<List<SoulPlugin>> plugins) {
List<SoulPlugin> pluginList = plugins.getIfAvailable(Collections::emptyList);
final List<SoulPlugin> soulPlugins = pluginList.stream()
.sorted(Comparator.comparingInt(SoulPlugin::getOrder)).collect(Collectors.toList());
soulPlugins.forEach(soulPlugin -> log.info("load plugin:[{}] [{}]", soulPlugin.named(), soulPlugin.getClass().getName()));
// 初始化