精华内容
下载资源
问答
  • Sprint Boot1.5.10 运行所有应用程序: Discovery-service-eureka(排名第一!)(8761端口) 身份验证服务器(9090端口) 资源服务器(可以为不同的端口运行多个实例,将实现负载平衡) gateway-ui-container...
  • springCloud——ribbonzuul

    千次阅读 2020-05-26 21:46:36
    ribbon 引入: 作为springCloud的第二个核心技术,ribbon的作用是调用在注册中心注册好的服务,它又有两个使用方式,一是服务之间的调用会使用ribbon技术,二是前端的调用服务也会使用ribbon,接下来分别做解释。...

    ribbon

    引入:
    作为springCloud的第二个核心技术,ribbon的作用是调用在注册中心注册好的服务,它又有两个使用方式,一是服务之间的调用会使用ribbon技术,二是前端的调用服务也会使用ribbon,接下来分别做解释。还有一个作用,ribbon它在调用服务的时候,会做负载均衡。

    ribbon的调用逻辑:
    ribbon要调用服务,就需要去服务中心获取记录服务信息的双层map。ribbon因为需要抓取map信息,所以它也需要去注册中心注册。
    在这里插入图片描述
    ribbon之服务调用服务:
    1.首先在pom中引入依赖

     <!--eureka-client依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
    <!--ribbon-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-ribbon</artifactId>
            </dependency>
    

    2.在application文件中添加信息

    server.port=8094
    #给功能启一个服务名称 service-hi
    spring.application.name=service-ribbon
    #ip优先相互通信
    eureka.instance.prefer-ip-address=true
    #注册中心实现服务的注册
    eureka.client.service-url.defaultZone=http://127.0.0.1:8761/eureka
    

    3.在启动类中写一个写一个特殊的方法

        @Bean
        @LoadBalanced
        public RestTemplate initRestTemplate(){
            return new RestTemplate();
        }
    

    4.在需要调用其他服务的方法中写如下代码:

        @Autowired
        private RestTemplate template;
    
    String url="http://test-user/user/update/point?money="+order.getOrderMoney();
    Integer success=template.getForObject(url,Integer.class);
    

    这里url中的test-user是一个注册在注册中心的服务,当使用这种跳转方式的时候,ribbon会拿着这个服务名test-user,去map中寻找对应的服务信息,这里ribbon还会做负载均衡,找到之后把这个服务的地址替换掉test-user,并且和后面的路径拼接,这样就可以去访问了。

    ribbon之zuul的调用:
    zuul是什么后面会说,这个调用后面也会细说,这里先暂时看一下。
    所谓的zuul调用,就是zuul网关匹配url成功后,他会调用内部的ribbon去把注册的服务地址拼接到url上,实现服务的调用

    zuul:

    引入:
    zuul是一个网关,作用是整个微服务集群的唯一入口。

    功能:
    路由:根据nginx传递过来的不同请求地址,调用不同的微服务。
    过滤(拦截): 网关中实现请求的鉴权工作(符不符合参数要求,是否携带身份信息,是否合法)

    实现一个zuul网关:
    1.在pom文件中加入注解:下面可以看出我们不止依赖了zuul,还依赖了eureka,这是因为一但路由成功后,将会启动zuul内部的ribbon来进行微服务访问,既然要使用ribbon就需要抓取注册中心的map,所以这里需要依赖eureka。

        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zuul</artifactId>
            </dependency>
        </dependencies>
    

    2.书写启动类:

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

    3.书写application配置文件(这里很重要):

    server.port=8103
    #给功能启一个服务名称 service-hi
    spring.application.name=gate-way
    #ip优先相互通信
    eureka.instance.prefer-ip-address=true
    #访问的注册中心接口,eureka-cliet会使用服务名称service-hi到
    #注册中心实现服务的注册
    eureka.client.service-url.defaultZone=http://127.0.0.1:8761/eureka
            
    #test-user
    zuul.routes.t-user.path=/zuul-tuser/**
    zuul.routes.t-user.service-id=test-user
    #test-order
    zuul.routes.t-order.path=/zuul-torder/**
    zuul.routes.t-order.service-id=test-order
    

    上面的后面几行,就是网关的路由规则,zuul.routes是写死的,后面紧接的是自定义路由名称,最后的path是匹配规范,只有满足这个匹配规范的请求,才会去使用service-id中的微服务名称所对应的微服务地址去替换原来请求连接中的匹配规则,这样才可以访问到微服务(例如:/zuul-tuser/**表示只要请求到网关的uri地址是以/zuul-tuser/开始的就满足匹配)。

    匹配规则:

    ?: 表示匹配一级单个字符,例如:path=/zuul-a/?,可以匹配到/zuul-a/a,/zuul-a/b,不能匹配/zuul-a/abc,/zuul-a/a/b/c
     
    *: 表示匹配一级任意字符串,例如:path=/zuul-a/*,可以匹配到/zuul-a/a,/zuul-a/abc,不能匹配/zuul-a/a/b/c
     
    **:表示匹配任意多级任意字符串,例如:path=/zuul-a/**,可以匹配到/zuul-a/a,/zuul-a/abc,/zuul-a/a/b/c.没有不能匹配的
    

    整个微服务的项目结构:
    在这里插入图片描述
    解释:浏览器首先发送一个请求,这个请求会被nginx拦截,然后做地址匹配,如果匹配上了,就会调用nginx中写好的网关地址,在网关中如果新的地址满足网关的匹配规则,网关就就会把对应的服务地址拿去替换掉匹配规则,又生成了一个新的请求地址,这个地址就去访问微服务。
    这里面可以看出,在nginx上可以做负载均衡,zuul网关在进行微服务调用也有负载均衡,微服务之间的调用同样也有负载均衡。

    nginx中的地址书写:
    可以分为下面三块,从左向右:第一块是书写网关的地址,第二块是书写网关的匹配规则地址,第三块是微服务中的requestMapping
    在这里插入图片描述
    调用过程的地址变化:
    nginx:

    server {
            #配置www.ou.com 访问8091ou系统
            listen 80;
            server_name www.ou.com;
            location /{
                    root easymall;
            }
            location =/user/query/point {
                    #通过访问网关
                    proxy_pass http://localhost:8103/zuul-tuser/user/query/point;
            }
            #积分更新
            location =/user/update/point {
                    proxy_pass http://localhost:8103/zuul-tuser/user/update/point;
            }
            location =/order/pay {
                    proxy_pass http://localhost:8103/zuul-torder/order/pay;
            }
    }
    

    zuul:

    #test-user
    zuul.routes.t-user.path=/zuul-tuser/**
    zuul.routes.t-user.service-id=test-user
    
    #test-order
    zuul.routes.t-order.path=/zuul-torder/**
    zuul.routes.t-order.service-id=test-order
    

    在这里插入图片描述

    展开全文
  • Spring-Ribbon-Zuul-Nacos 基于Nacos + Ribbon + Zuul的微服务代码。 服务提供者:user、cms,采用Ribbon作为负载均衡。 消费者:zuul,它是网关,支持动态和静态路由。 静态路由配置在bootstrap.yml中。 动态路由则...
  • SpringBoot单独使用Zuul+ribbon实现负载均衡与网关功能 1.创建Zuul的服务 创建SpringBoot时勾选web+zuul+ribbon即可 在application.yml中加入如下代码 server: port: 9000 zuul: routes: api-1: path: /app/...

    SpringBoot单独使用Zuul+ribbon实现负载均衡与网关功能

    1.创建Zuul的服务

    • 创建SpringBoot时勾选web+zuul+ribbon即可

    • 在application.yml中加入如下代码

      server:
        port: 9000
      zuul:
        routes:
          api-1:
            path: /app/**
            #url: http://localhost:8081/   
          api-2:
            path: /tv/**
            url: http://localhost:8083/
      api-1:
        ribbon:
          listOfServers: http://localhost:8081,http://localhost:8082
      ribbon:
        eureka:
          enabled: false
      
    • 在@SpringBootApplication上加@EnableZuulProxy注解,代表开启zuul服务

    注:配置中的api-1和api-2可以随便起名,但注意要和下方的api-1: ribbon: listOfServers 对得上号

    如果不使用负载均衡ribbon的下两行配置可以去掉。

    2.创建并启动三个服务

    • 三台模拟机创建步骤一样,需要注意的是端口号不一样,我这里创建的是8081,8082,8083和上文对应。
    • 这里创建时只勾选web即可
    • 创建controller

    代码结构:

    在这里插入图片描述

    Controller:

    @RestController
    public class MAController {
    
        @RequestMapping("/method")
        public void methodA(){
            System.out.println("----->A");
        }
    }
    

    application.properties

    server.port=8081
    

    注:类似这样创建出ZuulMachine_B和C ,其中ZuulMaster为上文创建的。

    3.测试步骤

    分别启动A,B,C三台服务器,验证可单独访问

    访问http://localhost:9000/app/method,可以在A和B的控制台从打印结果看到输出字样,此时通过负载分发到了8081和8082上

    访问http://localhost:9000/tv/method 可以看到只发到8083上,这里可看出负载和非负载的对比。

    展开全文
  • 2.超时时间应该:zuul > hystrix > ribbon (否则重试完成之前会被熔断) 2.当服务中设置了hystrix,以每个服务的设置为准(好像不对???) 3.ribbon超时 = (ribbonReadTimeout + ribbonConnectTimeout) * ...

    0.需要引入:
        <!-- 重试机制 ,否则重试不生效 -->
        <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
        </dependency>
    1.需要配置:zuul.retryable=true  和  spring.cloud.loadbalancer.retry.enabled=true
    2.超时时间应该:zuul > hystrix > ribbon (否则重试完成之前会被熔断)
    2.当服务中设置了hystrix,以每个服务的设置为准(好像不对???)
    3.ribbon超时 = (ribbonReadTimeout + ribbonConnectTimeout) * (maxAutoRetries + 1) * (maxAutoRetriesNextServer + 1);(发现:重试失败之后,熔断超时之前,也会熔断)
    4.OKToRetryOnAllOperations无论请求超时或者socket read timeout都进行重试,(不建议开启,默认读取请求重试,新增修改不重试)
        为true时:
            post:重试
            get:重试
            put:重试
            delete重试
        为false时:(ReadTimeout之后直接熔断)
            post不
            get重试
            put不
            delete不
    5.httpClient默认重试策略DefaultHttpRequestRetryHandler针对连接超时和获取数据超时并不会重试,需要自定义重试策略。

    展开全文
  • ribbon是负载均衡,zuul也可以做到负载均衡,在消费者里面 通过zuul对应url去调服务效果一样吗
  • Zuul-Hystrix和Ribbon支持

    2019-03-25 23:09:37
    在添加Zuul依赖的时候,它本身就包含了对Hystrix和Ribbon模块的依赖,所以Zuul天生就拥有线程隔离和断路器的自我保护功能,以及对服务调用的客户端负载均衡的功能。但是需要注意的是,当使用path和url的映射关系来...

    在添加Zuul依赖的时候,它本身就包含了对Hystrix和Ribbon模块的依赖,所以Zuul天生就拥有线程隔离和断路器的自我保护功能,以及对服务调用的客户端负载均衡的功能。但是需要注意的是,当使用path和url的映射关系来配置路由规则的时候,对于路由转发的请求不会采用HystrixCommand来包装,所以这类路由请求没有线程隔离和断路器的保护,并且也不会有负载均衡的能力。因此,我们在使用Zuul的时候尽量使用path和serviceId的组合来进行配置,这样不仅可以保证API网关的健壮和稳定,也能用到Ribbon的客户端负载均衡功能。

    Hystrix

    之前我们是在Zuul项目中集成Hystrix的监控,那么我们启动该服务。然后在Hystrix Dashboard中输入: http://localhost:8280/hystrix.stream,然后进行监控,那么我们将看到如下界面:

            这说明,Zuul已经整合了Hystrix。

    spring-cloud-starter-zuul本身已经集成了hystrix和ribbon,所以Zuul天生就拥有线程隔离和断路器的自我保护能力,以及对服务调用的客户端负载均衡功能。但是,我们需要注意,当使用path与url的映射关系来配置路由规则时,对于路由转发的请求则不会采用HystrixCommand来包装,所以这类路由请求就没有线程隔离和断路器保护功能,并且也不会有负载均衡的能力。因此,我们在使用Zuul的时候尽量使用path和serviceId的组合进行配置,这样不仅可以保证API网关的健壮和稳定,也能用到Ribbon的客户端负载均衡功能。

            但Zuul的Hystrix监控的粒度是微服务,而不是某个API,也就是所有经过Zuul的请求都会被Hystrix保护起来。假如,我们现在把Product-Service服务关闭,再来访问会出现什么结果呢?结果可能不是我们所想那样,如下:

             在Zuul中实现熔断功能需要实现FallbackProvider接口。该接口有两个方法,一个是getRoute()方法,用于执定熔断器应用于哪些路由服务;另一个方法fallbackResponse()方法为进入熔断功能是执行的逻辑。FallbackProvider 源码如下:

    public interface FallbackProvider {
        String getRoute();
    
        ClientHttpResponse fallbackResponse(String route, Throwable cause);
    }
    

            实现一个针对eureka-client1服务的熔断器,当eureka-client1的服务组出现故障时,进入熔断逻辑,向浏览器输入一句错误的提示信息,代码如下:

    @Component
    public class NyZuulFallbackProvider implements FallbackProvider {
        protected Logger logger = LoggerFactory.getLogger(NyZuulFallbackProvider.class);
    
        @Override
        public String getRoute() {
            // 注意: 这里是route的名称,不是服务的名称,
            // 如果这里写成大写PRODUCT-SERVICE将无法起到回退作用
            return "eureka-client1";
        }
    
        @Override
        public ClientHttpResponse fallbackResponse() {
            return new ClientHttpResponse() {
                @Override
                public HttpStatus getStatusCode() throws IOException {
                    return HttpStatus.OK;
                }
    
                @Override
                public int getRawStatusCode() throws IOException {
                    return 200;
                }
    
                @Override
                public String getStatusText() throws IOException {
                    return "OK";
                }
    
                @Override
                public void close() {
    
                }
    
                @Override
                public InputStream getBody() throws IOException {
                    return new ByteArrayInputStream("error! I'm the fallback.".getBytes());
                }
    
                @Override
                public HttpHeaders getHeaders() {
                    HttpHeaders headers = new HttpHeaders();
                    headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
                    return headers;
                }
            };
        }
    }

    重新启动工程,关闭eureka-client1的所有实例,早浏览器上访问http://localhost:8777/hello/yang,浏览器显示:

    error! I'm the fallback.

    如果需要所有的路由服务都加熔断功能,只需要在getRoute()方法上返回“*”的匹配府,代码如下:

        @Override
        public String getRoute() {
            return "*";
        }

    Ribbon参数配置

    提供客户端的负载均衡功能,spring cloud的负载均衡都用到这个库。例如:fegin

    它提供了超时重试的功能,配置如下:

    ribbon:
        ReadTimeout: 2000
        ConnectTimeout: 1000
        MaxAutoRetries: 1
        MaxAutoRetriesNextServer: 1

    ribbon.ConnectTimeout:该参数用来设置路由转发请求的时候,创建请求连接的超时时间。若出现路由请求连接超时,会自动进行重试路由请求,如果重试依然失败,Zuul会抛出异常。

    ribbon.ReadTimeout:该参数用来设置路由转发请求的超时时间。它的处理与ribbon.ConnectTimeout相似,若出现路由请求连接超时,会自动进行重试路由请求,如果重试依然失败,Zuul会抛出异常。

    MaxAutoRetries:最大自动重试次数

    MaxAutoRetriesNextServer:最大自动重试下一个服务的次数

    注意:

    根据上面的介绍我们可以知道,在使用Zuul的服务路由的时候,如果路由转发请求发生了超时(连接超时或者处理超时),只要超时时间小于Hystrix的命令超时时间,那么它就会自动发起重试。但在这种情况下,我们可能需要关闭该重试机制,那么可以通过下面的两个参数来进行设置:

    zuul.retryable=false
    zuul.routes.<route>.retryable=false

    其中,zuul.retryable=false用来关闭全局重试机制,而zuul.routes.<route>.retryable=false则关闭指定路由的重试机制。

    展开全文
  • Eureka+Zull+Ribbon+Hystrix的一个简单使用 话不多说,直接切入主题。 一共需要4个项目,1->Eurke注册中心,2->zuul服务,3->服务提供者,4->消费者 直接上代码。 1.eureka服务端 pom引入依赖 yml配置...
  • zuul也有负载均衡的功能,它是针对外部请求做负载,那客户端ribbon的负载均衡又是怎么一回事? 客户端ribbon的负载均衡,解决的是服务发起方(在Eureka注册的服务,及客户端)对被调用的服务的负载,比如我们查询...
  • ##Spring Cloud使用ZuulRibbon实现灰度发布 公司产品线采用的是Spring Cloud(Dalston.SR1)、Spring Boot(1.5.x)、Spring MVC、Mybatis、Redis构建的微服务、服务数量60+,之前规定是每周二中午12点-2点发布,由于...
  • 关于zuulribbon和hystrix的配置和说明

    万次阅读 2018-09-11 16:16:50
    在使用spring cloud框架开发微服务时,会遇到zuulribbon,hystrix的配置,刚开始接触到时候会有些懵逼,下面我讲讲这三者的作用和区别。 zuul:是gateway的核心,叫做路由。在一个项目中,有很多微服务,它们之间...
  • 项目后台框架是使用的...就使用到了zuul,那么可以使用zuulRibbon来实现负载均衡。 这个是我们项目原先做了一个配置。主要是zuul实现转发(未使用Ribbon,未使用Eureka),其中routes下面的 platform-ser...
  • Spring Cloud Ribbon是基于Netflix Ribbon实现的一套 客户端 负载均衡 的工具。 1、简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。...
  • SpringBoot + Zuul + ribbon 中实现负载均衡
  • zuul集成ribbon/hytrix

    2021-10-20 09:16:48
    zuul集成ribbon 默认启用了负载均衡 默认没有启用重试(会影响故障的传播,所以不在前面启用重试)在末尾进行重试 在入口位置进行重试会造成后台大面积服务压力翻倍,可能造成故障传播。这里叫雪崩。 zuul启用重试 ...
  • 微服务:Eureka+Zuul+Ribbon+Feign+Hystrix构建微服务架构

    万次阅读 多人点赞 2016-11-22 13:51:19
    The patterns provided include Service Discovery (Eureka), Circuit Breaker (Hystrix), Intelligent Routing (Zuul) and Client Side Load Balancing (Ribbon).. 通过上述可以了解到: Eureka:服务...
  • Zuul配置Hystrix和Ribbon

    千次阅读 2019-01-04 11:54:12
    由于Spring Cloud Zuul包含了对Hystrix和Ribbon的依赖,所以Zuul拥有线程隔离和断路器的自我保护功能,以及对客户端的负载均衡能力。但是,需要注意在使用path和url的映射关系来配置路由规则时,对于路由转发的请求...
  • zuul2的通信是集成Ribbon实现的,在Origin中集成Ribbon基本配置(例如IClientConfig)以完成功能接入,在loadbanace层将ribbion与netty结合用来抉择下层客户端服务器。 zuul2集成ribbon core结构图: zuul2集成 ...
  • 通过Zuul网关实现灰度发布
  • spring zuul Ribbon 配置

    2017-12-30 01:18:00
    spring zuul Ribbon 配置 博客分类: java 微服务 #ribbon 配置 #https://github.com/Netflix/ribbon/blob/master/ribbon-examples/src/main/resources/sample-client.properties # Max number of retries ...
  • Zuul 使用的是@HystrixCommand注解,其实就是一个api 针对一个类,使用的是fallback属性 针对一个或多个微服务 Ribbon的Fallback机制 ==使用的是@HystrixCommand注解,其实就是一个api ;== 如下: @Hystrix...
  • Hystrix:熔断器,当调用 zuul网关 具体业务的时候可能受到网络,代码执行时间等影响长时间无响应,这个时候就需要配置hystrix,避免线程长时间占用内存,造成内存泄露,服务挂掉等。负责当 ribbon 出现问题时保证...
  • 理解zuul和ribon

    2021-04-29 10:51:36
    理解zuul和ribon 你去开着车去酒店入住,zuul就是个大门的门卫,理解为网关,问您是停车啊 还是办理入住 1你说停车,停车场的老头ribbon来安排你停在哪里(停车位都是几乎一样的),起到个负载均衡的作用 2你说你...
  • 搭建SpringCloud微服务一整套完整项目(Eureka+Zuul+Hystrix+Feign+Ribbon) 首先我的项目结构是一个父工程的pom文件中定义springboot和springcloud的依赖管理,其次让子工程聚合和继承父工程,这样不用每个子工程去...
  • 我们在使用Spring Cloud Ribbon的时候,不论是与Eureka还是Consul结合,都会在引入Spring Cloud Eureka或Spring Cloud Consul依赖的时候通过自动化配置来加载上述所说的配置内容,所以我们可以快速在Spring Cloud中...
  • 由于Spring Cloud Zuul包含了对Hystrix和Ribbon的依赖,所以Zuul拥有线程隔离和断路器的自我保护功能,以及对客户端的负载均衡能力。但是,需要注意在使用path和url的映射关系来配置路由规则时,对于路由转发的请求...
  • ZUULRibbon 实现服务重试机制 前言 版本简介:SpringCloud 采用Hoxton.SR8 版本,采用集群方式部署项目 zuul 是什么? Zuul 是 Netflix 开源的一个网关组件 API Gateway 服务器,在云平台上提供动态路由,监控,...
  • 今天给各位同学带来的是...Zuul是Netflix开源的微服务网关,他可以和Eureka,Ribbon,Hystrix等组件配合使用。Zuul组件的核心是一系列的过滤器 二、Zuul带来什么好处 1.统一请求url 在微服务中,我们是将业务以...
  • 文章目录写在前面注意!... 不同实例分别配置Ribbon + Hystrix0. 默认基本配置1. 不同实例分别配置Zuul0. 默认基本配置1. 不同实例分别配置总结 写在前面 因为测试 Feign + Hystrix 搭配模式下的降级(fallback...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,501
精华内容 8,200
关键字:

ribbonzuul