引入pom依赖,这里不要引入多余的依赖,尤其是 web依赖,会发生冲突
<!--Spring Cloud Gateway 是使用 netty+webflux 实现因此不需要再引入 web 模块-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</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>
yml配置文件
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 8767
spring:
application:
name: gateway
cloud:
gateway:
discovery:
locator:
enabled: true #开启将服务中心的服务端自动配置默认是按大写名字,下面是改成小写
lower-case-service-id: true
routes:
- id: index
uri: lb://service #lb:// 后面是注册服务的 serviceId 名
predicates:
- Path=/test/**
- Method=GET
filters:
- StripPrefix=1
- AddRequestParameter=name, Param #这个可以实现跳转并传值 name=“param”
- name: Hystrix #开启熔断,当跳转的服务不可用时会调用 Fallback 方法
args:
name: fallbackcmd
fallbackUri: forward:/Fallback
1,熔断
Fallback 方法
@Controller
public class FallbackController {
@RequestMapping("Fallback")
@ResponseBody
public String Fallback(){
return "服务不可用";
}
}
2,传参
这里是 服务端的方法
@Controller
public class ClientController {
@Value("${server.port}")
String port;
@RequestMapping("/hello")
@ResponseBody
public String home ( @RequestParam("name") String name){
return "hi 我是服务端,i am from port:" + port+"名字:"+name;
}
}
启动服务