springCloud入门实战
笔记
记一半后面补
1.SpringCloud模块介绍
- Euraka:服务注册中心,用于服务管理
- Ribbon:基于客户端的负载均衡组件
- Hystrix:容错框架,能够防止服务的雪崩效应
- Feign:Web服务客户端,能够简化HTTP接口的调用
- Zuul:API网关,提供路由转发,请求过滤等功能
- Config:分布式配置管理
- Sleuth:服务跟踪
- Stream:构建消息驱动的微服务应用程序的框架
- Bus:消息代理的集群消息总线
使用的spring-boot与spring-cloud版本:
spring-boot:2.0.6
spring-cloud:Finchley.SR2
实战
(一)注册中心
1.1 Eureka注册中心
一句话总结:eureka是分布式系统中基于AP原则实现的服务注册中心
1.2 创建一个maven项目eureka-server,导入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
1.3 在resources中添加配置文件application.properties
spring.application.name=eureka-server server.port=8761 # 不向注册中心注册自己 eureka.client.register-with-eureka=false # 不去检索服务 eureka.client.fetch-registry=false
1.4 创建一个包添加启动类
@EnableEurekaServer @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class,args); } }
1.5 开启EurekaServerApplication主类,访问8761端口

eureka.client.register-with-eureka=false一定要配成false,否则会报错
(二)编写服务提供者
2.1 创建maven项目eureka-client-user-service,导入依赖,提供一个接口给其他服务调用
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.2 创建一个启动类
@SpringBootApplication @EnableDiscoveryClient public class ArticleApp { public static void main(String[] args) { SpringApplication.run(ArticleApp.class,args); } }
2.3 在resources新建配置文件application.properties
spring.application.name=eureka-client-user-service
server.port=8081
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
# 采用IP注册
eureka.instance.prefer-ip-address=true
# 定义实例ID格式
eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
2.4 新建一个controller包提供接口
@RestController public class UserController { @GetMapping("/user/hello") public String hello(){ return "hello"; } }
(三)编写服务消费者
3.1 创建maven项目eureka-client-artile-service,添加依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
3.2 在resources下编写配置文件application.properties
spring.application.name=eureka-client-article-service
server.port=8088
# 采用IP注册
eureka.instance.prefer-ip-address=true
# 定义实例ID格式
eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
3.3 配置RestTemplate来调用接口,添加配置类
@Configuration public class BeanConfiguration { @Bean @LoadBalanced public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
3.4 编写调用接口的controller
@RestController public class ArticleController { @Autowired private RestTemplate restTemplate; @GetMapping("/article/callHello") public String callHello(){ return restTemplate.getForObject("http://eureka-client-user-service/user/hello",String.class); } }
3.5 添加启动类
@SpringBootApplication @EnableDiscoveryClient public class ArticleApp { public static void main(String[] args) { SpringApplication.run(ArticleApp.class,args); } }
3.6 开启eureka-server,eureka-client-user-service,eureka-client-article-service三个项目的启动类
效果展示:
1) 访问http://localhost:8761/,eureka注册中心中有两个服务以及注册

2) 访问http://localhost:8081/user/hello 返回hello,说明接口提供成功

3) 访问http://localhost:8088/article/callHello 返回hello,说明跨服务访问接口成功!

小结:
注册中心,服务提供者,服务消费者之间的关系:
三者都可以独立存在,互不影响
拓展:
开启eureka认证
1.改造eureka-server项目,添加Spring-Security依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!--pom添加依赖,然后添加一个security配置类(config包下)-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.修改配置文件
spring.application.name=eureka-server server.port=8761 # 不向注册中心注册自己 eureka.client.register-with-eureka=false # 不去检索服务 eureka.client.fetch-registry=false # ===============改造eureka============== # 用户名 spring.security.user.name=gg # 密码 spring.security.user.password=123456
3.新建一个security配置类
@Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { // 关闭csrf http.csrf().disable(); // 支持httBasic http.authorizeRequests() .anyRequest() .authenticated() .and() .httpBasic(); } }
4.开启eureka-server的启动类,访问http://localhost:8761/

此时,我们需要访问注册中心需要输入用户名和密码认证才能访问
那么服务如何注册到注册中心呢?
修改eureka-client-user-service项目的配置文件即可
spring.application.name=eureka-client-user-service server.port=8081 eureka.client.service-url.defaultZone=http://gg:123456@localhost:8761/eureka/ # 采用IP注册 eureka.instance.prefer-ip-address=true # 定义实例ID格式 eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
然后开启eureka-client-user-service的启动类,进入eureka注册中心就可以看到服务注册了
![]()
(二)Ribbon
1.1 一句话总结:开源的一款用于客户端负载均衡的工具
可以先把上面的eureka认证去掉
1.2 首先在eureka-client-user-service中添加一个实体类
public class HouseInfo { private Long id; private String AreaOne; private String AreaTwo; private String AreaThree; // 以下方法省略
再提供一个接口controller(提供水果给消费者拿)
@RestController public class HouseController { @GetMapping("/house/data") public HouseInfo getData(@RequestParam("name") String name){ return new HouseInfo(1L,"1","2","3"); } @GetMapping("/house/data/{name}") public String getData2(@PathVariable("name") String name){ return name; } @PostMapping("/house/save") public Long add(@RequestBody HouseInfo houseInfo){ System.out.println(houseInfo.getAreaTwo()); return 1001L; } }
1.3 创建maven项目spring-rest-template,导入依赖,把eureka-client-user-service中添加的实体类引入
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>com.gg</groupId>
<artifactId>eureka-client-user-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
1.4 在spring-rest-template项目中调用接口(方式1:通过访问: ip地址 + 端口 + 接口地址)
添加配置类
@Configuration public class BeanConfiguration { @Bean // 原始的微服务调用接口方式 public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
编写controller调用接口(getForObject,getForEntity postForObject,postForEntity 用法相同)
@RestController public class HouseClientController { @Autowired @Qualifier("getRestTemplate") private RestTemplate restTemplate; @GetMapping("/call/data") public HouseInfo getData(@RequestParam("name") String name){ return restTemplate.getForObject("http://localhost:8081/house/data?name=" + name,HouseInfo.class); } @GetMapping("/call/data/{name}") public String getData2(@PathVariable("name") String name){ return restTemplate.getForObject("http://localhost:8081/house/data/{name}",String.class,name); } @GetMapping("/call/dataEntity") public HouseInfo getData3(@RequestParam("name") String name){ ResponseEntity<HouseInfo> responseEntity = restTemplate.getForEntity("http://localhost:8081/house/data?name=" + name, HouseInfo.class); System.out.println(responseEntity.getHeaders()); System.out.println(responseEntity.getStatusCode()); return responseEntity.getBody(); } @PostMapping("/call/save") public Long add(@RequestBody HouseInfo houseInfo){ Long id = restTemplate.postForObject("http://localhost:8081/house/save",houseInfo,Long.class); // ResponseEntity<Long> responseEntity = restTemplate.postForEntity("http://localhost:8081/house/save", houseInfo, Long.class); return 2L; } }
1.5 启动eureka-server,eurela-client-user-service,spring-rest-trmplate三个项目的启动类
(1)访问 http://localhost:8761/,注册中心显示注册了两个服务

(2) 查看接口提供是否成功
访问 http://localhost:8081/house/data?name=4

访问 http://localhost:8081/house/data/2

post请求我们需要用到api接口工具

接口提供没问题
(3)消费者消费接口(8001端口)




1.6 调用接口方式2,通过服务名调用
在spring-rest-template项目的配置类中添加 @LoadBalanced直接
@Configuration public class BeanConfiguration { @Bean @LoadBalanced // 加上这个注解可以通过服务名调用接口 public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
通过服务名调用接口

新建一个Controller测试
@RestController public class LoadBalancedTestController { @Autowired @Qualifier("getRestTemplate") private RestTemplate restTemplate; @GetMapping("/call/load") public HouseInfo getData(@RequestParam("name") String name){ return restTemplate.getForObject("http://EUREKA-CLIENT-USER-SERVICE/house/data?name="+name,HouseInfo.class); } }
重启spring-rest-template项目访问接口

@Configuration public class BeanConfiguration { @Bean // 原始的微服务调用接口方式 // return restTemplate.getForObject("http://localhost:8081/house/data?name=" + name,HouseInfo.class); public RestTemplate getRestTemplate(){ return new RestTemplate(); } @Bean @LoadBalanced // 加上这个注解可以通过服务名调用接口 // return restTemplate.getForObject("http://EUREKA-CLIENT-USER-SERVICE/house/data?name="+name,HouseInfo.class); public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
(三) Feign
1.1 一句话总结:Feign是对代理HTTP调用接口的封装
为了简化接口出现的
1.2 创建一个feign-api接口,导入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>com.gg</groupId>
<artifactId>eureka-client-user-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
1.3 设置端口
server.port=8003
1.4 添加feign启动类
@SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class FeignAppClient { public static void main(String[] args) { SpringApplication.run(FeignAppClient.class,args); } }
1.5 定义feign接口
/** * 定义接口 */ @FeignClient(value = "EUREKA-CLIENT-USER-SERVICE") public interface UserRemoteClient { @GetMapping("/user/hello") String hello(); @GetMapping("/house/data") HouseInfo getData(@RequestParam("name") String name); @GetMapping("/house/data/{name}") String getData2(@PathVariable("name") String name); @PostMapping("/house/save") Long add(@RequestBody HouseInfo houseInfo); }
1.6 feign调用接口
/** * feign调用接口 */ @RestController public class FeignTestController { @Autowired private UserRemoteClient userRemoteClient; // 注入feign接口 @GetMapping("/user/hello") public String hello() { return userRemoteClient.hello(); } @GetMapping("/house/data") public HouseInfo getData(@RequestParam("name") String name){ return userRemoteClient.getData(name); } @GetMapping("/house/data/{name}") public String getData2(@PathVariable("name") String name){ return userRemoteClient.getData2(name); } @PostMapping("/house/save") public Long add(@RequestBody HouseInfo houseInfo){ return userRemoteClient.add(houseInfo); } }
1.7 开启feign启动类测试




小结:
ribbon通过访问服务地址或服务名来调用接口
feign简化了接口调用的方式,更方便,更符合面向对象的编程思想
(四)Hystrix
1.1 一句话总结:Hystrix是微服务分布式系统采用的熔断保护中间件
1.2 创建项目导入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
1.3 主类添加注解
@EnableHystrix @SpringBootApplication public class HystrixApp { public static void main(String[] args) { SpringApplication.run(HystrixApp.class,args); } } 配置文件 server.port=8007
1.4 配置类
@Configuration public class HystrixConfig { @Bean public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
1.5 简单使用
@RestController public class HystrixController { @Autowired @Qualifier("getRestTemplate") private RestTemplate restTemplate; @GetMapping("/callHello") @HystrixCommand(fallbackMethod = "defaultCallHello") public String callHell(){ return restTemplate.getForObject("http://localhost:8081/user/hello",String.class); } public String defaultCallHello(){ return "fail"; } }
1.6 测试
当没有开启eureka-client-user-service项目时,访问/callHello将返回失败回调defaultCallHello方法

当开启了eureka-client-user-service项目时,会返回成功回调

(五)Feign整合Hystrix服务容错
1.1 创建maven项目hystrix-feign-service,导入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
1.2 开启Feign对hystrix的支持
server.port=8004 feign.hystrix.enabled=true
1.3 添加主类
@EnableHystrix @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class HystrixServiceApp { public static void main(String[] args) { SpringApplication.run(HystrixServiceApp.class, args); } }
1.4 方式一:Fallback方式
(1)定义feign接口
// Fallback方式 @FeignClient(value = "EUREKA-CLIENT-USER-SERVICE", fallback = UserRemoteClientFallback.class) @Component public interface UserRemoteService { @GetMapping("/user/hello") String hello(); @GetMapping("/user/hello2") String hello2(); }
(2)实现接口
@Component public class UserRemoteClientFallback implements UserRemoteService { @Override public String hello() { return "Fallback->fail"; } @Override public String hello2() { return "Fallback->fail2"; } }
1.5 web 层
@RestController public class HystrixController { @Autowired private UserRemoteService UserRemoteService; @Autowired @Qualifier("getRestTemplate") private RestTemplate restTemplate; @GetMapping("/callHello") @HystrixCommand(fallbackMethod = "defaultCallHello") public String callHell(){ return restTemplate.getForObject("http://localhost:8081/user/hello",String.class); } public String defaultCallHello(){ return "fail"; } @GetMapping("/user/hello") public String hello(){ return UserRemoteService.hello(); } @GetMapping("/user/hello2") public String hello2(){ return UserRemoteService.hello2(); } }
1.6 测试
开启eureka-server,eureka-client-user-service,hystrix-feign-service
注册中心注册两个服务

eureka-client-user-service提供hello接口成功

未提供hello2接口

hystrix-feign-service项目调用hello成功,调用hello2返回失败回调


1.7 方式二:FallbackFactory
(1)添加回退工厂类
@Component public class UserRemoteServiceFallbackFactory implements FallbackFactory<UserRemoteService> { @Override public UserRemoteService create(Throwable throwable) { return new UserRemoteService() { @Override public String hello() { return "FallbackFactory1"; } @Override public String hello2() { return "FallbackFactory2"; } }; } }
(2)修改Feign接口
@FeignClient(value = "EUREKA-CLIENT-USER-SERVICE",fallbackFactory = UserRemoteServiceFallbackFactory.class) @Component public interface UserRemoteService { @GetMapping("/user/hello") String hello(); @GetMapping("/user/hello2") String hello2(); }
1.8 重启服务测试
hystrix-feign-service项目调用hello成功,调用hello2返回失败回调


(六) Zuul
1.1 一句话总结:Zuul是一个基于JVM路由和服务端的负载均衡器
1.2 简单使用,创建项目导入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
1.3 配置zuul路由转发
spring.application.name=zuul-demo server.port=2103 # 配置路由转发 zuul.routes.user-server.path=/user/** # 配置跳转路径 zuul.routes.user-server.service-id=eureka-client-user-service eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
则所有访问/user/路径都会转发到: http://eureka-client-user-service/
1.4 添加主类
@EnableZuulProxy @SpringBootApplication public class ZuulApp { public static void main(String[] args) { SpringApplication.run(ZuulApp.class,args); } }
1.5 测试
测试接口是否提供成功

利用zuul路由转发

1.6 zuul前缀
添加配置
zuul.prefix=/gg

(七)Gateway
1.1依赖spring-boot和spring webFlux,基于netty运行的网关.
1.2 简单使用,创建cloudgateway项目导入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
1.3 配置路由转发
server.port=2001 spring.application.name=cloud-gateway #spring.cloud.gateway.discovery.locator.enabled=true # 服务名小写 spring.cloud.gateway.discovery.locator.lower-case-service-id=true eureka.client.register-with-eureka=true eureka.instance.prefer-ip-address=true eureka-cloud-gateway eureka.client.service-url.defaultZone=http://localhost:8761/eureka/ # id唯一 spring.cloud.gateway.routes[0].id=gateway-api # 转发路由(lb://代表从注册中心获取服务) spring.cloud.gateway.routes[0].uri=lb://eureka-client-user-service # Path路由断言工厂 spring.cloud.gateway.routes[0].predicates[0]=Path=/house/** # Query路由断言工厂(可用正则表达式) 断言 spring.cloud.gateway.routes[0].predicates[1]=Query=name, \\d+ #spring.cloud.gateway.routes[0].predicates[2]=Query=name1, \\w+ # Method路由断言工厂(忽略大小写) spring.cloud.gateway.routes[0].predicates[2]=Method=get
1.4 添加主类
@SpringBootApplication @EnableDiscoveryClient public class gatewayApp { public static void main(String[] args) { SpringApplication.run(gatewayApp.class,args); } }
1.5 测试
开启eureka-server,eureka-client-user-service
访问8761端口

访问localhost:8081/house/data?name=3

接口提供成功
访问localhost:2001/house/data?name=3



浙公网安备 33010602011771号