springcloud gateway网关 nacos注册中心,随便写写
又回来使用springcloud的,这次用nacos作为系统的注册中心,和配置中心,集成gateway,作为api网关,实现统一技术,登陆,鉴权等功能;项目目录:gateway网关提供有很多filter,也可以自定一些filter,完成一些日志手机,鉴权等工作然后继续具体代码,和工程结构pom依赖<dependencies><!--//用户服务--><dependen
又回来使用springcloud的,这次用nacos作为系统的注册中心,和配置中心,集成gateway,作为api网关,实现统一技术,登陆,鉴权等功能;
项目目录:
gateway网关提供有很多filter,也可以自定一些filter,完成一些日志手机,鉴权等工作
然后继续具体代码,和工程结构
pom依赖
<dependencies> <!--//用户服务--> <dependency> <groupId>com.lianzhong</groupId> <artifactId>interface</artifactId> <version>1.0-SNAPSHOT</version> <exclusions> <exclusion> <artifactId>spring-boot-starter-web</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </exclusion> </exclusions> </dependency> <!--<dependency>--> <!--<groupId>org.springframework.boot</groupId>--> <!--<artifactId>spring-boot-starter-web</artifactId>--> <!--<scope>provided</scope>--> <!--</dependency>--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis-reactive</artifactId> </dependency> <!--springboot2.X默认使用lettuce连接池,需要引入commons-pool2 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-nacos-config</artifactId> <version>2.1.1.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> </dependencies>
有点长,基本就是那几个starter基本依赖
然后这是启动类
@SpringBootApplication @EnableFeignClients(basePackages = {"com.lianzhong"}) @EnableDiscoveryClient public class App { public static void main(String[] args) { ApplicationContext ap = SpringApplication.run(App.class, args); RouteLocator routeLocator = ap.getBean(RouteLocator.class); Flux<Route> routeFlux = routeLocator.getRoutes(); Route route = routeFlux.blockFirst(); System.out.println(route.getUri()); } @Bean public AppVersionRoutePredicateFactory appVersionRoutePredicateFactory() { return new AppVersionRoutePredicateFactory(); } @Bean public TimeConsumingGlobalFilter timeConsumingGlobalFilter() { return new TimeConsumingGlobalFilter(); } @Bean public CheckTokenGlobalFilter checkTokenGlobalFilter() { return new CheckTokenGlobalFilter(); } }
自定义的这些几个谓词filter,和全局filter,都得生成bean
然后是配置文件 boostrap.properties
spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 spring.cloud.nacos.discovery.group = dev spring.cloud.nacos.config.namespace = e9c4fced-010c-464c-9024-d672e1fecbce spring.cloud.nacos.config.group = dev spring.cloud.nacos.config.gateway_server.yaml.group = dev spring.cloud.nacos.config.shared-dataids=gateway_server.yaml,app_base.yaml spring.cloud.nacos.config.refreshable-dataids=gateway_server.yaml,app_base.yaml spring.application.name = gateway_server spring.cloud.nacos.config.file-extension = yaml spring.cloud.nacos.config.ext-config[0].data-id=app_base.yaml spring.cloud.nacos.config.ext-config[0].group=dev spring.cloud.nacos.config.ext-config[0].refresh=true spring.cloud.nacos.config.ext-config[1].data-id=app_service1.yaml spring.cloud.nacos.config.ext-config[1].group=dev spring.cloud.nacos.config.ext-config[1].refresh=true
基本也是定义,nacos上的配置文件id,建议将日志级别调成debug,这样在控制台能看见具体配置文件内容,
注意下前边的配置,将配置路由配置文件属性配置成refreshable, 这样能动态刷新路由规则
nacos上编辑了路由文件后,直接发布,路由路径能直接修改,服务重启网关。
图上是直接配置url地址,也可以用lb://xxx, 配置服务名称,负责均衡到目标服务实例,(url的话利用nginx,也有有个负载均衡功能)
这个结果图,有走到根据appversion转发谓词filter,校验token,globalfiler,重复请求filter,version负载均衡选取等filer;
这个可以根据自己的业务要求自己去实现,基本也就是去继承个字的接口,生成bean替换掉默认的实现的方式就ok了
@ConditionalOnMissingBean这个注解很实用
更多推荐
所有评论(0)