springcloud gateway网关 nacos注册中心,随便写写

又回来使用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这个注解很实用

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 258
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 258
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值