上一讲中,我对进入soul的dubbo应用的请求链路进行了分析,从这一讲开始,准备对springCloud应用接入soul的请求转发处理进行分析。
在进行源码分析前,先捋清楚运行一个springCloud应用需要哪些东西,Eureka作为springCloud推荐使用的注册中心,我们先简单了解一下Eureka 到底是什么,Eureka 是 Netflix 开源的注册中心组件,分成 Eureka Client 和 Eureka Server 两个角色。整体架构如下图所示:
Eureka-Server :通过 REST 协议暴露服务,提供应用服务的注册和发现的功能。
Application Server :应用服务提供者,内嵌 Eureka-Client ,通过它向 Eureka-Server 注册自身服务。
Application Client :应用服务消费者,内嵌 Eureka-Client ,通过它从 Eureka-Server 获取服务列表。
OK,既然已经了解了Eureka的作用,那么要想运行一个springCloud应用,需要先启用一个Eureka注册中心,要先达到这个目的,将soul-examples-eureka应用启动起来即可,是因为这个应用中的pom依赖已经添加了Eureka的支持,如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
启动完成后,访问http://localhost:8761/这个地址可以看到Eureka管理控制台,如下图所示:
接着再运行soul-examples-springcloud,将springCloud应用启动起来,可以看到,在启动后,会往soul-admin中注册元数据信息,如下:
2021-01-22 01:31:44.516 INFO 28600 --- [pool-1-thread-1] o.d.s.client.common.utils.RegisterUtils : springCloud client register success: {"appName":"springCloud-test","context":"/springcloud","path":"/springcloud/order/save","pathDesc":"","rpcType":"springCloud","ruleName":"/springcloud/order/save","enabled":true}
2021-01-22 01:31:44.528 INFO 28600 --- [pool-1-thread-1] o.d.s.client.common.utils.RegisterUtils : springCloud client register success: {"appName":"springCloud-test","context":"/springcloud","path":"/springcloud/order/findById","pathDesc":"","rpcType":"springCloud","ruleName":"/springcloud/order/findById","enabled":true}
2021-01-22 01:31:44.538 INFO 28600 --- [pool-1-thread-1] o.d.s.client.common.utils.RegisterUtils : springCloud client register success: {"appName":"springCloud-test","context":"/springcloud","path":"/springcloud/order/path/**/name","pathDesc":"","rpcType":"springCloud","ruleName":"/springcloud/order/path/**/name","enabled":true}
2021-01-22 01:31:44.549 INFO 28600 --- [pool-1-thread-1] o.d.s.client.common.utils.RegisterUtils : springCloud client register success: {"appName":"springCloud-test","context":"/springcloud","path":"/springcloud/order/path/**","pathDesc":"","rpcType":"springCloud","ruleName":"/springcloud/order/path/**","enabled":true}
2021-01-22 01:31:44.560 INFO 28600 --- [pool-1-thread-1] o.d.s.client.common.utils.RegisterUtils : springCloud client register success: {"appName":"springCloud-test","context":"/springcloud","path":"/springcloud/test/**","pathDesc":"","rpcType":"springCloud","ruleName":"/springcloud/test/**","enabled":true}
从日志信息可以看出,springCloud中的服务已经被成功注册到soul-admin中,然后再访问Eureka的管理控制台,可以看到多了springCloud应用,如下图所示:
接着我们来看看接入了soul之后,http请求预期应该经过什么处理到达springCloud应用后台,如下图:
下面通过postman发起请求测试一下,结果发现报错了,如下图所示:
根据之前分析请求链路的经验,这个报错肯定是走到AbstractSoulPlugin插件获取选择器时报错了,至于报错的具体原因,明天再继续分析。
总结:
虽然同样是http请求,但是springCloud和springBoot应用相比,多了一个注册中心,所以请求的处理会比较复杂一些,但是相信有之前的分析经验,最终可以将这个报错定位出来。