总系列目录地址
上篇dubbo/sofa插件
spring-cloud 插件
- 打开soul-bootstrap,加入maven依赖,并重新启动。
<!--soul springCloud plugin start--> <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 springCloud plugin start end-->
- 启动soul-example-springcloud, 不需要启动eureka也可以正常使用。
直接访问springcloud url - 查看soul-admin,并打开组件
查看注册的springcloud组件
打开组件开关
通过soul网管访问
- 第一次调用访问错误并解决
- 通过返回信息得知,rule 没有找到。查看soul-bootstrap后台在 checkUtils 类中抛出错误。猜测是uri有问题,果然发现我的请求是 http://localhost:9195//springcloud/order/findById?id=de
- 修改正确的url后再抛异常。
通过debug发现loadBalancer在调用choose方法是返回null,继续通过debug发现,指定了从一个注册中心里面获取服务{"code":-109,"message":"springCloud serviceId does not exist or is configured incorrectly!","data":null}
- 启动soul-examples-eureka(http://localhost:8761/eureka/), 重启soul-examples-springcloud
- 修改soul-bootstrap配置
maven添加依赖,打开配置
application-local.yml修改配置<!-- springCloud if you config register center is eureka please dependency end--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>2.2.0.RELEASE</version> </dependency>
eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ instance: prefer-ip-address: true
- 重新调http://localhost:9195/springcloud/order/findById?id=xx,成功!
总结
- spring-cloud 跟其他组件不一样,是通过一个注册中心来访问spring-cloud应用。注册中心可以是eureka或者nacos, 负载均衡算法可以在 具体的应用里面指定,如
springCloud-test: ribbon.NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
- 测试发现,停止eureka后,也可以正常访问spring-cloud服务,应该是把访问结果缓存下来了,不用每次都去注册中心。后续debug。