Spring Cloud快速开始
本文档演示如何将Spring Cloud服务接入到Apache ShenYu网关。您可以直接在工程下找到本文档的示例代码 。
环境准备#
请参考运维部署的内容,选择一种方式启动shenyu-admin。比如,通过 本地部署 启动Apache ShenYu后台管理系统。
启动网关,如果是通过源码的方式,直接运行shenyu-bootstrap中的ShenyuBootstrapApplication。
启动顺序#
- 启动
shenyu-admin - 启动
shenyu-bootstrap - 启动注册中心,例如
shenyu-examples下的eureka项目 - 配置
shenyu-examples-springcloud注册发现
shenyu: discovery: enable: true type: eureka serverList: ${eureka.client.serviceUrl.defaultZone} registerPath: ${spring.application.name} props: nacosNameSpace: ShenyuRegisterCenter运行 shenyu-examples-springcloud#
示例项目中我们使用 eureka 作为 Spring Cloud的注册中心。你可以使用本地的eureka,也可以使用示例中提供的应用。
下载 shenyu-examples-eureka 、shenyu-examples-springcloud .
启动eureka服务,运行org.apache.shenyu.examples.eureka.EurekaServerApplicationmain方法启动项目。
启动spring cloud服务,运行org.apache.shenyu.examples.springcloud.ShenyuTestSpringCloudApplicationmain方法启动项目。
成功启动会有如下日志:
2021-02-10 14:03:51.301 INFO 2860 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'2021-02-10 14:03:51.669 INFO 2860 --- [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-02-10 14:03:51.676 INFO 2860 --- [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-02-10 14:03:51.682 INFO 2860 --- [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-02-10 14:03:51.688 INFO 2860 --- [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-02-10 14:03:51.692 INFO 2860 --- [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} 2021-02-10 14:03:52.806 WARN 2860 --- [ main] ockingLoadBalancerClientRibbonWarnLogger : You already have RibbonLoadBalancerClient on your classpath. It will be used by default. As Spring Cloud Ribbon is in maintenance mode. We recommend switching to BlockingLoadBalancerClient instead. In order to use it, set the value of `spring.cloud.loadbalancer.ribbon.enabled` to `false` or remove spring-cloud-starter-netflix-ribbon from your project.2021-02-10 14:03:52.848 WARN 2860 --- [ main] iguration$LoadBalancerCaffeineWarnLogger : Spring Cloud LoadBalancer is currently working with default default cache. You can switch to using Caffeine cache, by adding it to the classpath.2021-02-10 14:03:52.921 INFO 2860 --- [ main] o.s.c.n.eureka.InstanceInfoFactory : Setting initial instance status as: STARTING2021-02-10 14:03:52.949 INFO 2860 --- [ main] com.netflix.discovery.DiscoveryClient : Initializing Eureka in region us-east-12021-02-10 14:03:53.006 INFO 2860 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using JSON encoding codec LegacyJacksonJson2021-02-10 14:03:53.006 INFO 2860 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using JSON decoding codec LegacyJacksonJson2021-02-10 14:03:53.110 INFO 2860 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using XML encoding codec XStreamXml2021-02-10 14:03:53.110 INFO 2860 --- [ main] c.n.d.provider.DiscoveryJerseyProvider : Using XML decoding codec XStreamXml2021-02-10 14:03:53.263 INFO 2860 --- [ main] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration2021-02-10 14:03:53.546 INFO 2860 --- [ main] com.netflix.discovery.DiscoveryClient : Disable delta property : false2021-02-10 14:03:53.546 INFO 2860 --- [ main] com.netflix.discovery.DiscoveryClient : Single vip registry refresh property : null2021-02-10 14:03:53.547 INFO 2860 --- [ main] com.netflix.discovery.DiscoveryClient : Force full registry fetch : false2021-02-10 14:03:53.547 INFO 2860 --- [ main] com.netflix.discovery.DiscoveryClient : Application is null : false2021-02-10 14:03:53.547 INFO 2860 --- [ main] com.netflix.discovery.DiscoveryClient : Registered Applications size is zero : true2021-02-10 14:03:53.547 INFO 2860 --- [ main] com.netflix.discovery.DiscoveryClient : Application version is -1: true2021-02-10 14:03:53.547 INFO 2860 --- [ main] com.netflix.discovery.DiscoveryClient : Getting all instance registry info from the eureka server2021-02-10 14:03:53.754 INFO 2860 --- [ main] com.netflix.discovery.DiscoveryClient : The response status is 2002021-02-10 14:03:53.756 INFO 2860 --- [ main] com.netflix.discovery.DiscoveryClient : Starting heartbeat executor: renew interval is: 302021-02-10 14:03:53.758 INFO 2860 --- [ main] c.n.discovery.InstanceInfoReplicator : InstanceInfoReplicator onDemand update allowed rate per min is 42021-02-10 14:03:53.761 INFO 2860 --- [ main] com.netflix.discovery.DiscoveryClient : Discovery Client initialized at timestamp 1612937033760 with initial instances count: 02021-02-10 14:03:53.762 INFO 2860 --- [ main] o.s.c.n.e.s.EurekaServiceRegistry : Registering application SPRINGCLOUD-TEST with eureka with status UP2021-02-10 14:03:53.763 INFO 2860 --- [ main] com.netflix.discovery.DiscoveryClient : Saw local status change event StatusChangeEvent [timestamp=1612937033763, current=UP, previous=STARTING]2021-02-10 14:03:53.765 INFO 2860 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_SPRINGCLOUD-TEST/host.docker.internal:springCloud-test:8884: registering service...2021-02-10 14:03:53.805 INFO 2860 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8884 (http) with context path ''2021-02-10 14:03:53.807 INFO 2860 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 88842021-02-10 14:03:53.837 INFO 2860 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_SPRINGCLOUD-TEST/host.docker.internal:springCloud-test:8884 - registration status: 2042021-02-10 14:03:54.231 INFO 2860 --- [ main] o.d.s.e.s.ShenyuTestSpringCloudApplication : Started ShenyuTestSpringCloudApplication in 6.338 seconds (JVM running for 7.361) - 启动
shenyu-examples-springcloud之后 - 在admin的系统的
divide插件上即可看到刚注册上来的数据
测试Http请求#
shenyu-examples-springcloud项目成功启动之后会自动把加 @ShenyuSpringMvcClient 注解的接口方法注册到网关。

下面使用postman模拟http的方式来请求你的SpringCloud服务:

使用 IDEA HTTP Client 插件模拟http的方式来请求你的SpringCloud服务[本地访问,不使用shenyu代理]:

使用 IDEA HTTP Client 插件模拟http的方式来请求你的SpringCloud服务[使用shenyu代理]:
