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@LoadBalancedpublic RestTemplate initRestTemplate(){return new RestTemplate();}

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

    @Autowiredprivate 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

springCloud——ribbon和zuul相关推荐

  1. springcloud+springboot+Eureka+Feign+Ribbon+Hystrix+Zuul

    Springcloud集成Eureka Eureka服务端和客户端 本实例采用springboot,eureka和feign/ribbon,hystrix,zuul,mybatis,redis 1. ...

  2. SpringCloud微服务Zuul网关动态路由

    SpringCloud微服务Zuul网关动态路由 zuul动态路由 1. 网关层动态配置路由映射规则 2. 将同一个请求根据自定义的规则,路由到不同服务中 FeignClient动态请求 实现功能 实 ...

  3. SpringCloud微服务基础 Eureka、Feign、Ribbon、Zuul、Hystrix、配置中心的基础使用

    1.单点系统架构 传统项目架构 传统项目分为三层架构,将业务逻辑层.数据库访问层.控制层放入在一个项目中. 优点:适合于个人或者小团队开发,不适合大团队开发. 分布式项目架构 根据业务需求进行拆分成N ...

  4. 【Java从0到架构师】SpringCloud - Hystrix、Zuul

    SpringCloud 基本概念 熔断和降级 服务雪崩效应 服务熔断与降级 - Hystrix SpringBoot 集成 Hystrix 熔断降级服务异常报警通知 重点属性 - 熔断隔离策略.超时时 ...

  5. SpringCloud: 路由网关(zuul)

    在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统.一个简答的微服务系统如下图: ...

  6. springcloud ribbon @LoadBalance负载均衡源码流程分析

    一.编写示例 1.服务端 pom.xml <properties><java.version>1.8</java.version><spring-cloud. ...

  7. springcloud 中的zuul整合Elasticsearch报错availableProcessors is already set to [4], rejecting [4]...

    今天使用springboot整合springcloud zuul和elasticsearch时,报错. 仅仅使用springboot和elasticsearch没有问题,springboot和eure ...

  8. SpringCloud Ribbon(一)之自定义负载均衡器ILoadBalancer

    一.Ribbon负载均衡 一个服务对应一个LoadBalancer,一个LoadBalancer只有一个Rule,LoadBalancer记录服务的注册地址,提供更新服务的注册地址,Rule提供从服务 ...

  9. SpringCloud Ribbon(二)之自定义负载均衡策略IRule

    一.Ribbon负载均衡策略 一个服务对应一个LoadBalancer,一个LoadBalancer只有一个Rule,LoadBalancer记录服务的注册地址,Rule提供从服务的注册地址中找出一个 ...

最新文章

  1. React 项目--创建组件(7)
  2. 以太坊搭建联盟链详细教程
  3. 伺服电机要计算机控制,计控 - it610.com
  4. 平顶山学院java实验室_重点学科(实验室)建设规划
  5. nginx post请求超时_Nginx 的超时 timeout 配置详解
  6. 爱快--虚拟机单网卡(带机上网)
  7. 软件工程第一次作业程序开发历程
  8. Ajax核心:XMLHTTP组件相关技术资料
  9. redis数据类型之Hash
  10. C语言程序设计(第三版)何钦铭著 习题5-7
  11. matlab三点绘制三角形,matlab画三角形网格
  12. python3+selenium实现126邮箱登陆并发送邮件
  13. Forever young
  14. Windows主机加固
  15. Icarus Verilog
  16. 安庆集团-冲刺日志(第三天)
  17. 【RPG黑暗之光】第四章· 物品模块
  18. Addon SuperEdge 让原生 K8s 集群可管理边缘应用和节点
  19. 二叉树算法--数据结构课程设计
  20. 【单细胞高级绘图】10.KEGG富集结果的圆圈图

热门文章

  1. cf端游界面更新显示服务器繁忙,电脑登录cf老是显示更新失败怎么办
  2. logisim 快速加法器设计实验报告_华中科技大学数字逻辑实验
  3. Java 数字转汉字工具类
  4. 谷歌tts android手机自带引擎,自动下载android TTS引擎
  5. win10自带Groove音乐不能播放CUE和APE文件的一种曲线救国办法,自己创建aimppack插件包,AIMP安装DSP插件
  6. 最近在做一些改变,想听听你的意见
  7. OpenFoam编程笔记——starccm网格转openfoam格式
  8. 图书信息管理系统(一)
  9. 团队作业10——事后诸葛亮分析
  10. 使用VSCode插件CodeRunner一键编译运行Java