赞
踩
tar -zxvf jdk-8u261-linux-x64.tar.gz -C /usr/local/java
./java -version
/usr/local/java/jdk1.8.0_261/bin
vim /etc/profile
,移动到最后,配置环境变量export JAVA_HOME=/usr/local/java/jdk1.8.0_261
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile
echo $PATH
cd /usr/local
mkdir nacos
cd /www/nacos1.1.3/
tar -zxvf nacos-server-1.1.3.tar.gz -C /usr/local/nacos/
cp cluster.conf.example cluster.conf
vim cluster.conf
./startup.sh
./startup.sh -m standalone
<!-- 对本模块以及子模块进行版本仲裁 -->
<dependencyManagement>
<dependencies>
<!-- 指定spring-cloud-alibaba-dependencies的版本为2.1.0,对本模块以及子模块进行版本仲裁 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version> <!-- 确保这里的版本号是正确的 -->
<!-- 这里的type是pom,scope是import,表示这个依赖是导入依赖,不会参与编译和打包,可以解决单继承问题 -->
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 引入nacos服务注册和发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!-- <version>2.1.0.RELEASE</version> 这里使用版本仲裁-->
</dependency>
<!-- 公共模块 -->
<dependency>
<groupId>com.sun.sunliving</groupId>
<artifactId>sunliving-common</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 添加描述信息 --> <description>sun(家居生活)-网关服务</description> <!-- 导入SpringBoot父工程 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.8.RELEASE</version> <relativePath/> <!-- 当parent的groupId没有指向父工程时就需要加 --> </parent> <properties> <java.version>1.8</java.version> <!-- SpringCloud版本 2020.0.5--> <spring-cloud.version>Greenwich.SR3</spring-cloud.version> <!-- 解决java: -source 1.5 中不支持 diamond 运算符 问题 --> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <!-- 这里直接获取properties里面的版本号 --> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- SpringCloud网关模块 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> <!-- <version>2.2.1.RELEASE</version> 使用版本仲裁--> </dependency> <!-- SpringBoot web模块必须拿掉,否则会报错!!! --> <!-- <dependency> --> <!-- <groupId>org.springframework.boot</groupId> --> <!-- <artifactId>spring-boot-starter-web</artifactId> --> <!-- </dependency> --> <!-- SpringBoot test模块 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- 公共模块 --> <dependency> <groupId>com.sun.sunliving</groupId> <artifactId>sunliving-common</artifactId> <version>1.0-SNAPSHOT</version> <!-- 排除mybatis-plus-boot-starter, 因为不使用,就不会配置application.yml的mybatis-plus的部分,不排除会报错 --> <exclusions> <exclusion> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <!-- maven打包常规配置 --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
server:
port: 5050
spring:
application:
name: sunliving-gateway # Name of the application
cloud:
nacos:
discovery:
server-addr: ip:8848 # nacos服务地址
package com.sun.sunliving.gateway; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; /** * Description: * * @Author sun * @Create 2024/4/14 20:40 * @Version 1.0 */ @SpringBootApplication @EnableDiscoveryClient // 开启服务注册与发现 public class SunlivingGateWayApplication { public static void main(String[] args) { SpringApplication.run(SunlivingGateWayApplication.class, args); } }
请求方式:服务发现 + 上下文路径 + 资源路径
这里要想通过GateWay请求到这个网址,请求方式为GateWay服务发现 + 目标的上下文路径 + 资源路径
所以请求方式=http://localhost:5050/commodity/brand/list
uri的编写就是目标的服务发现
断言的编写方式为目标的上下文路径+资源路径,
一旦断言成功,就会按照uri与断言的路径拼接也就是目标的服务发现 + 上下文路径 + 资源路径
gateway: # Gateway configuration
routes: # 可以有多个路由
- id: test_routes # Route ID 保证唯一即可
uri: lb://sunliving-commodity # Target service
predicates: # Predicates
- Path=/commodity/brand/**
- id: sunliving-order
uri: https://tieba.baidu.com
predicates:
- Path=/index.html
gateway: # Gateway configuration
routes: # 可以有多个路由
- id: renren-fast # Route ID 保证唯一即可
uri: lb://renren-fast # 服务发现
predicates: # Predicates
- Path=/api/renren-fast/** # 这里将得到的请求路径断言一下
filters: # 重写路径,将/api/renren-fast/xxx重写为/renren-fast/xxx,此时与上面的服务发现拼接,得到最终的请求路径,也就是把/api拿掉
- RewritePath=/api/(?<segment>.*), /$\{segment}
package com.sun.sunliving.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; /** * Description: * * @Author sun * @Create 2024/4/15 10:17 * @Version 1.0 */ @Configuration public class SunlivingGatewayCorsConfiguration { @Bean public CorsWebFilter corsWebFilter() { System.out.println("enter...."); 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); } }
gateway: # Gateway configuration
routes: # 可以有多个路由
- id: renren-fast # Route ID 保证唯一即可
uri: lb://renren-fast # 服务发现
predicates: # Predicates
- Path=/api/renren-fast/** # 这里将得到的请求路径断言一下
filters: # 重写路径,将/api/renren-fast/xxx重写为/renren-fast/xxx,此时与上面的服务发现拼接,得到最终的请求路径,也就是把/api拿掉
- RewritePath=/api/(?<segment>.*), /$\{segment}
gateway: # Gateway 配置
routes: # 可以有多个路由
- id: renren-fast # 保证唯一即可
uri: lb://目标资源的application名称 # 服务发现,lb:表示负载均衡
predicates: # 断言
- Path=/api/目标资源上下文路径/**
filters: # 重写路径,将/api/上下文路径/** 转换为 /上下文路径/**
- RewritePath=/api/(?<segment>.*), /$\{segment}
如果在配置中有一个更精确的路径断言应该放到前面否则会报错
- id: sunliving-commodity # 保证唯一即可
uri: lb://sunliving-commodity # 服务发现,lb:表示负载均衡
predicates: # 断言
- Path=/api/sunliving-commodity/**
filters: # 重写路径,将/api/上下文路径/** 转换为 /上下文路径/**
- RewritePath=/api/(?<segment>.*), /$\{segment}
- id: sunliving-service # 保证唯一即可
uri: lb://sunliving-service # 服务发现,lb:表示负载均衡
predicates: # 断言
- Path=/api/sunliving-service/**
filters: # 重写路径,将/api/上下文路径/** 转换为 /上下文路径/**
- RewritePath=/api/(?<segment>.*), /$\{segment}
gateway: # Gateway 配置
routes: # 可以有多个路由
- id: renren-fast # 保证唯一即可
uri: lb://目标资源的application名称 # 服务发现,lb:表示负载均衡
predicates: # 断言
- Path=/api/目标资源上下文路径/**
filters: # 重写路径,将/api/上下文路径/** 转换为 /上下文路径/**
- RewritePath=/api/(?<segment>.*), /$\{segment}
package com.sun.sunliving.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; /** * Description: * * @Author sun * @Create 2024/4/15 10:17 * @Version 1.0 */ @Configuration public class SunlivingGatewayCorsConfiguration { @Bean public CorsWebFilter corsWebFilter() { System.out.println("enter...."); 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); } }
<!-- 对本模块以及子模块进行版本仲裁 -->
<dependencyManagement>
<dependencies>
<!-- 指定spring-cloud-alibaba-dependencies的版本为2.1.0,对本模块以及子模块进行版本仲裁 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version> <!-- 确保这里的版本号是正确的 -->
<!-- 这里的type是pom,scope是import,表示这个依赖是导入依赖,不会参与编译和打包,可以解决单继承问题 -->
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 引入nacos的配置中心依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
#注册到 nacos 的名字
spring.application.name=sunliving-service
#指定 nacos 的发现注册地址
spring.cloud.nacos.discovery.server-addr=ip:8848
#指定 nacos 的配置地址
spring.cloud.nacos.config.server-addr=ip:8848
#要获取的配置文件所在的配置空间
spring.cloud.nacos.config.namespace=830a1d44-4c4a-d708a9548c1c
#配置空间的哪一个组, 这个组下可以有多个配置文件,通过 ext-config[?] 来指定要加载某空间下的某组的第几个文件
spring.cloud.nacos.config.group=dev
#通过 ext-config[?] 来指定要加载某空间下的某组的第几个文件
spring.cloud.nacos.config.ext-config[0].data-id=application.yml
spring.cloud.nacos.config.ext-config[0].group=dev
spring.cloud.nacos.config.ext-config[0].refresh=true
<!-- 引入nacos的配置中心依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
#注册到 nacos 的名字
spring.application.name=sunliving-gateway
#指定 nacos 的发现注册地址
spring.cloud.nacos.discovery.server-addr=ip:8848
#指定 nacos 的配置地址
spring.cloud.nacos.config.server-addr=ip:8848
#要获取的配置文件所在的配置空间
spring.cloud.nacos.config.namespace=10f6a704-5d7f82519ba4
#配置空间的哪一个组, 这个组下可以有多个配置文件,通过 ext-config[?] 来指定要加载某空间下的某组的第几个文件
spring.cloud.nacos.config.group=DEFAULT_GROUP
#通过 ext-config[?] 来指定要加载某空间下的某组的第几个文件
spring.cloud.nacos.config.ext-config[0].data-id=application.yml
spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[0].refresh=true
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。