spring cloud gateway nacos 网关设置
1、下载安装 Nacos 服务中心(下载地址 https://github.com/alibaba/nacos/releases)并启动 Nacos server(以Windows为例),下载后启动bin文件夹下“startup.cmd”,待出现“Nacos started successfully......”启动成功。
2、编写服务提供者(provider)
POM
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.1.RELEASE</version> </dependency>
启动类
@SpringBootApplication @EnableDiscoveryClient public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); } }
配置文件(application.yml)
server: port: 8083 spring: application: name: testprovider cloud: nacos: discovery: server-addr: localhost:8848
Controller
@RestController @RequestMapping("provider/") public class Test { //测试服务提供者接口 @RequestMapping("user/{fid}") public String getUser(@PathVariable long fid) { return "showFuser:"+fid; } }
网关开始:
相关术语:
-
Route(路由):网关的基本构建块。由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配。 Predicate(断言):这是一个 Java 8 的 Predicate。输入类型是一个 ServerWebExchange。我们可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。 Filter(过滤器):这是org.springframework.cloud.gateway.filter.GatewayFilter的实例,我们可以使用它修改请求和响应。
1、创建Gateway 网关 Module,添加POM
<!-- Spring cloud gateway网关 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> <version>2.2.1.RELEASE</version> </dependency> <!-- nacos服务发现 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.1.RELEASE</version> </dependency>
同时需要向nacos服务中心注册
2、配置文件
各字段含义:
-
id:路由 ID(不是网关ID),保持唯一 uri:目标服务地址 (加 lb 根据注册中心服务名匹配) predicates:路由条件,Predicate 接受一个输入参数,返回一个布尔值结果。该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非)。
Spring Cloud Gateway 网关路由有两种配置方式:
-
在配置文件 yml 中配置 通过@Bean自定义 RouteLocator,在启动主类 Application 中配置
两种方式是效果是一样的,这里使用 yml 方式进配置。
3、开启服务中心注册
@SpringBootApplication @EnableDiscoveryClient public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } }
4、测试
4.1、启动gateway(http://localhost:8088),启动服务提供者(http://localhost:8083)
直接访问服务提供者 http://localhost:8083/provider/user/2
通过网关访问 http://localhost:8088/provider/user/2,结果一样,证明网关设置成功!
4.2、在复制一个provider,测试网关分发,修改Controller返回值区分不同服务,修改application.yml端口8073。
//测试服务提供者接口 @RequestMapping("user/{fid}") public String getUser(@PathVariable long fid) { return "showFuser-T2:"+fid; //区分第2个provider服务 }
启动第二个provider,在nacos中心确认
访问“”,刷新页面,轮询输出,成功!
showFuser-T2:2 showFuser:2
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
说真的,不是我酸,富人真没啥好羡慕的