1创建一个Maven项目(gateway作为父项目)
导入依赖
创建gateway-client作为客户端即为路由转向的服务4.0.0 com.chaoxing gateway 0.0.1-SNAPSHOT gateway gateway org.springframework.boot spring-boot-starter-parent 2.1.8.RELEASE gateway-client gateway-server org.springframework.boot spring-boot-starter-web org.projectlombok lombok 1.18.8 org.apache.httpcomponents httpcore 4.4.12 commons-lang commons-lang 2.6 javax.servlet servlet-api 2.5 provided com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config 2.1.1.RELEASE javax.validation validation-api 2.0.1.Final com.alibaba.cloud spring-cloud-alibaba-dependencies 2.1.0.RELEASE pom import
导入依赖
4.0.0 com.chaoxing gateway-client 0.0.1-SNAPSHOT gateway-client gateway-client org.springframework.boot spring-boot-starter-parent 2.1.8.RELEASE org.springframework.boot spring-boot-starter-web org.projectlombok lombok 1.18.8 org.apache.httpcomponents httpcore 4.4.12 commons-lang commons-lang 2.6 javax.servlet servlet-api 2.5 provided com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config 2.1.1.RELEASE javax.validation validation-api 2.0.1.Final com.alibaba.cloud spring-cloud-alibaba-dependencies 2.1.0.RELEASE pom import
建立controller
即为跳转到的服务
package com.chaoxing.GateWayClient.contorllerr;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("name")
public class GateWayClientController {
@RequestMapping("/getname")
public String test() {
return "my name is Zkun";
}
}
修改Application
package com.chaoxing.GateWayClient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class GateWayClientpplication {
public static void main(String[] args) {
SpringApplication.run(GateWayClientpplication.class, args);
}
}
添加并修改配置文件
application.properties
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 server.port=9090
boostrap.properties
spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.application.name=gatawaydemo spring.cloud.nacos.config.namespace=7d7e9d28-54b3-4bec-9312-0b310df601cb
注意:此处的是在nacos的命名规则里取名获得即
名字可不同,但后面的id需要一致,配置文件中的name在后来的服务绑定中有用
客户端配置完毕
服务端配置
依赖:
4.0.0 com.example gateway 0.0.1-SNAPSHOT gateway 网关的使用 1.8 Greenwich.SR3 org.springframework.boot spring-boot-starter-parent 2.1.8.RELEASE org.springframework.cloud spring-cloud-starter-gateway 2.1.3.RELEASE com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config 2.1.1.RELEASE com.alibaba.cloud spring-cloud-alibaba-dependencies 2.1.0.RELEASE pom import
建立服务端项目gateway-server
跨域问题:首先处理的即为跨域问题
建立configruation,代码如下,此为通用代码
package com.example.gateway.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
@Configuration
public class configruation {
@Bean
public CorsWebFilter corsWebFilter(){
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
//1、配置跨域
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.setAllowCredentials(true);
source.registerCorsConfiguration("/**",corsConfiguration);
return new CorsWebFilter(source);
}
}
添加并修改配置文件
applocation.properties
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 server.port=88
bootstrap.properties
此处也是nacos命名规则中绑定的内容
spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.application.name=gataway spring.cloud.nacos.config.namespace=c6d7cb62-65d4-41ce-b800-63a5266538f5
application.yml(重要)
id为自己取得名字,url中的即为前面客户端设置的name,path中的name为自己设置的方法
spring:
cloud:
gateway:
routes:
- id: gatawaydemo
uri: lb://gatawaydemo #这里的名字必须和项目配置文件 的项目名一致
predicates:
- Path=/api/name/** #访问 /api/thirdparty 这个路径就路由到
filters: #路径重写 成一下 这里中间逗号, 前面是截取的路径,后面是替换的路径
#也就是你看以为你实际访问是 /api/thirdparty/oss/policy,实际上它是吧 /api//api/thirdparty这一段给丢了,只要只要oss/policy
#
- RewritePath=/api/(?.*),/${segment}
给主方法添加注释
服务端完毕
运行
上面为自己设置的端口号+地址
下面即为自己设置的服务实现



