Java 版SpringCloud分布式微服务b2b2c电子商务- Zuul基于Consul配置及详

一.构建工程

  1.引入依赖

  <!--SpringBoot2.0以上版本需引入该依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

2.创建主类

@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy
@RestController
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }  

}  

3.配置application.properties

zuul.routes.api-a.path=/api-a/**
zuul.routes.api-a.service-id=api-a
zuul.routes.api-b.path=/api-b/**
zuul.routes.api-b.service-id=api-b  

这里存在 api-a 和 api-b 两个微服务应用, 当请求http://localhost:port/api-a/helloWorld, 会被路由转发至 api-a 服务的 /helloWorld 接口, 当请求http://localhost:port/api-b/helloWorld, 会被路由转发至 api-b 服务的 /helloWorld 接口. 当请求 URL 符合配置规则时, 了解springcloud架构可以加求求:三五三六二四七二五九,就会被转发至 service-id 对应的微服务应用接口.

5.4.配置请求过滤

SpringCloud Zuul 还有另一个和核心功能: 请求过滤. Zuul 允许开发者在 API 网关上通过定义过滤器来实现对请求的拦截与过滤, 实现方法非常简单, 只需继承 ZuulFilter 抽象类并实现它定义的4个抽象函数就可以完成对请求的拦截和过滤.

public class MyGatewayFilter extends ZuulFilter {  

  /*4种过滤器类型,
  pre:可以在请求被路由之前调用,
  route:在路由请求时候被调用,
  post:在route和error过滤器之后被调用,
  error:处理请求时发生错误时被调用*/
  @Override
  public String filterType() {
    return "pre";
  }
    @Override
    public int filterOrder() {
        return 0;  //优先级为0,数字越大,优先级越低
    }  

    @Override
    public boolean shouldFilter() {
        return true;  // 是否执行该过滤器,此处为true,说明需要过滤
    }  

    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();  

        log.info(String.format("%s request to %s", request.getMethod(), request.getRequestURL().toString()));  

        Object accessToken = request.getParameter("token");  //获取token参数
        if (accessToken == null) {
            log.warn("token is empty");
            ctx.setSendZuulResponse(false);  //过滤该请求, 不对其进行路由
            ctx.setResponseStatusCode(401);  //返回错误码
            ctx.setResponseBody("token is null!");  //返回错误内容
            return null;   //Zuul还未对返回数据做处理
        }
    return null;
    }  

创建过滤器后,它并不会直接生效, 我们还需为其创建具体的 Bean 才能启动该过滤器.

@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy
@RestController
public class LixjApplication {  

    public static void main(String[] args) {
        SpringApplication.run(LixjApplication.class, args);
    }  

    @Bean
    public MyGatewayFilter myGatewayFilter(){
        return new MyGatewayFilter();
    }
}  

二. 路由详解

  1.路径匹配规则
/api-a/?    可以匹配 /api-a/ 之后拼接一个任务字符的路径 , 比如 /api-a/a , /api-a/b , /api-a/c
/api-a/    可以匹配 /api-a/ 之后拼接任意字符的路径, 比如 /api-a/a, /api-a/aaa, /api-a/bbb . 但它无法匹配 /api-a/a/b 这种多级目录路径
/api-a/   可以匹配 /api-a/* 包含的内容之外, 还可以匹配形如 /api-a/a/b 的多级目录路径
**

  2.路由匹配顺序

    随着版本的迭代, 我们需要对一个服务做一些功能拆分, 将原属于 api-a 服务的某些功能拆分到另一个全新的服务 api-a-part 中, 而这些拆分的外部调用 URL 路径希望能够符合规则 /api-a/part/ .*

zuul.routes.api-a.path=/api-a/**
   zuul.routes.api-a.service-id=api-a

   zuul.routes.api-a-part.path=/api-a/part/**
   zuul.routes.api-a-part.service-id=api-a-part

在源码中, 路由规则是通过 LinkedHashMap 保存的, 也就是说, 路由规则的保存时有序的, 而内容的加载是通过遍历配置文件中路由规则依次加入的, 所以导致问题的根本原因是对配置文件中内容的读取, 但上述properties配置无法保证路由规则加载顺序, 我们需要使用 YML 文件来配置, 以实现有序的路由规则. 
  zuul:  

routes:
api-a-part:
path=/api-a/part/
service-id=api-a-part 
api-a:
path=/api-a/

service-id=api-a

原文地址:https://blog.51cto.com/14622290/2467102

时间: 2024-08-30 14:43:58

Java 版SpringCloud分布式微服务b2b2c电子商务- Zuul基于Consul配置及详的相关文章

SpringCloud分布式微服务b2b2c电子商务(二)Eureka(服务注册和服务发现基础篇)

一:Eureka简介 Eureka是Spring Cloud Netflix的一个子模块,也是核心模块之一.用于云端服务发现,一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移.了解springcloud架构可以加求求:三五三六二四七二五九,服务注册与发现对于微服务系统来说非常重要.有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只需要使用服务的标识符,就可以访问到服务.他的功能类似于dubbo的注册中心(register).服务发现:服务发现是微服务基础架构的

SpringCloud分布式微服务b2b2c电子商务(一)构建第一个SpringBoot工程

spring boot 它的设计目的就是为例简化开发,开启了各种自动装配,你不想写各种配置文件,引入相关的依赖就能迅速搭建起一个web工程.它采用的是建立生产就绪的应用程序观点,优先于配置的惯例. 可能你有很多理由不放弃SSM,SSH,但是当你一旦使用了springboot ,你会觉得一切变得简单了,配置变的简单了.编码变的简单了,部署变的简单了,感觉自己健步如飞,开发速度大大提高了.了解springcloud架构可以加求求:三五三六二四七二五九,就好比,当你用了IDEA,你会觉得再也回不到Ec

SpringCloud分布式微服务b2b2c电子商务(三)注册中心集群篇

集群环境搭建第一步:我们新建两个注册中心工程一个叫eureka_register_service_master.另外一个叫eureka_register_service_backup eureka_register_service_master的application.properties配置如下 server.port=7998 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false spring.

SpringCloud分布式微服务b2b2c电子商务分布式微服务-docker-feign-hyst

上一节我们讨论feign的配置,这节我们讨论一下,feign+hystrix调用生产者时,进行容错处理.一.创建模块(microservice-consumer-movie-feign-with-hystrix) 二.pom.xml文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi=

SpringCloud分布式微服务b2b2c电子商务-在springboot中用redis实现消息队

准备阶段安装redis,可参考我的另一篇文章java 1.8maven 3.0idea环境依赖创建一个新的springboot工程,了解springcloud架构可以加求求:三五三六二四七二五九.在其pom文件,加入spring-boot-starter-data-redis依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-

SpringCloud分布式微服务b2b2c电子商务docker-feign-hystrix-rib

在上一节中,我们讨论了feign+hystrix在项目开发中,除了考虑正常的调用之外,负载均衡和故障转移也是关注的重点,这也是feign + ribbon+hystrix的优势所在,本节我们就讨论一下在feign中使用ribbon,有两种方式 一.通过在配置文件application.yml配置,开启ribbon,并指定调用生产者相对上一节可以不做任何更改,可以看项目(microservice-consumer-movie-feign-with-hystrix-hystrix-factory)

SpringCloud分布式微服务云架构 第五篇: 路由网关(zuul)(Finchley版本)

SpringCloud分布式微服务云架构 第五篇: 路由网关(zuul)(Finchley版本)在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,了解springcloud架构可以加求求:三五三六二四七二五九,由这几个基础组件相互协作,共同组建了一个简单的微服务系统.一个简答的微服务系统如下图: 注意:A服务和B服务是可以相互调用的,并且配置服务也是注册到服务注册中心的. 在Spring Cloud微服务系统中,一种常见的负载均衡方

java版电子商务spring cloud分布式微服务b2b2c社交电商-docker-hystrix-dashboard-turbine(九)

简介 b2b2c电子商务社交平台源码请加企鹅求求:一零三八七七四六二六.Hystrix的主要优点之一是它收集关于每个HystrixCommand的一套指标.Hystrix仪表板以有效的方式显示每个断路器的运行状况,通过Hystrix Dashboard我们可以在直观地看到各Hystrix Command的断路器是否打开,请求响应时间, 请求失败率,请求超时个数等等数据.但是只使用Hystrix Dashboard的话, 你只能看到单个应用内的服务信息, 这明显不够. 我们需要一个工具能让我们汇总

Springcloud分布式微服务多用户商城系统b2b2c-Spring Cloud常见问题

在使用Spring Cloud的过程中,难免会遇到一些问题.所以对Spring Cloud的常用问题做一些总结.需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码:三五三六二四七二五九 一.Eureka常见问题 Eureka 注册服务慢 默认情况下,服务注册到Eureka Server的过程较慢.在开发或测试时,常常希望能够加速这一过程,从而提升工作效率. 该问题的原因及解决方案: 服务的注册涉及周期性心跳,默认30秒一次(通过客户端配置的service