任务

  1. 运行examples下面的 springcloud服务
  2. 学习文档,结合springcloud插件,发起http请求soul网关,体验springcloud代理

spring cloud 插件初体验

soul-admin & soul-bootstrap

admin 打开对 springcloud 插件的支持。bootstrap 加入 springcloud 的 pom 依赖,重启网关。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-plugin-springcloud</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>

soul-examples-springcloud

主要是 soul-springcloud 的 pom 依赖。

1
2
3
4
5
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-client-springcloud</artifactId>
<version>${soul.version}</version>
</dependency>

成功启动后,请求接口 http://localhost:9195/springcloud/order/findById,返回结果为:

1
{"code":-109,"message":"springCloud serviceId does not exist or is configured incorrectly!","data":null}

通过 SpringCloudPlugin 的 doExecute 的方法断点调试,发现大致的原因是 loadBalancer 选择 serviceId 时无法找到对应的服务实例。

1
2
//selectorHandle.getServiceId() 为 springCloud-test
final ServiceInstance serviceInstance = loadBalancer.choose(selectorHandle.getServiceId());

猜测是由于没有使用注册中心,无法发现服务。启动注册中心 eureka,端口为1001。在网关和springcloud的示例工程中均加入 eureka 的配置项。然后重启网关和示例工程,发现注册中心已经发现服务。

1
2
3
4
5
6
eureka:
client:
serviceUrl:
defaultZone: http://localhost:1001/eureka/
instance:
prefer-ip-address: true

image.png

再次请求http://localhost:9195/springcloud/order/findById,返回结果为,大概意思是处理信号超时。

1
{"code":500,"message":"Internal Server Error","data":"Did not observe any item or terminal signal within 3000ms in 'peekTerminal' (and no fallback has been configured)"}

刚想检查下为什么超时时,再请求一次,发现可以成功调用。。。具体细节后面再深究。。。

image.png

Link