这个标题有点儿绕,咋 还是服务路由的服务了?

首先,Zuul最后也会做成一个Eureka Client 服务,注册到 Eureka Server 上,所以,后一个服务说的是Zuul 项目本身也是一个 Eureka 服务。

前一个服务,说的是 在Eureka Server 上注册的所有的其他服务。

那个路由是咋回事? 在没有Zuul的时候,访问不同的服务,需要请求不同的 serivceId ,这个好理解吧,在 Eureka 页面上,我们可以看到一个Application 列表,如下:

这个,就是一系列的服务,每个服务都是一个 Eureka Client 应用。

这些主要都是服务提供者。

服务消费者需要调用哪个服务的时候,就访问不同的应用名称+ 其API路径。

这里有没有觉得有点麻烦,你需要记住每个不同的 服务提供者的 serviceId ,这多少有点儿麻烦。

Zuul 的一个工作就是实现所有这些服务提供者的路由,用来Zuul之后, 服务消费者再不需要记住那么多服务的名字了,而只需要知道 Zuul的服务名称即可, 从此只需要调用Zuul这一个服务。然后 Zuul服务会根据消费者请求的路径匹配到最终的服务提供者。

这样,Zuul就实现了路由的功能。

前期准备和说明

本文档依旧是之前文档的延续,项目依旧基于《SpringCloud Eureka测试项目--一个最简单的订单获取功能》。

创建项目

创建一个springboot项目,命名为  test-springcloud-zuul-server8766

pom.xml 文件

该文件增加了一个 spring-cloud-starter-netflix-zuul 依赖。

完整文档如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.pingbu</groupId><artifactId>test-springcloud</artifactId><version>1.0.0</version></parent><groupId>com.pingbu</groupId><artifactId>test-springcloud-zuul-server8766</artifactId><version>1.0.0</version><dependencies><!-- eureka client --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></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></dependency></dependencies><build><finalName>test-springcloud-provider-payment8001</finalName></build></project>

spring-boot main类

package com.wanshi.provider.order;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;// Eureka客户端
@EnableEurekaClient
@EnableZuulProxy
@SpringBootApplication
public class ZuulServerMain8766 {public static void main(String[] args) {SpringApplication.run(ZuulServerMain8766.class, args);}
}

可以看到,关键多了有一个 @EnableZuulProxy 的注解。

application.yml 文件

server:port: 8766spring:application:name: zuul-servereureka:serverInstance:hostname: 127.0.0.1client:# 表示将自己注册进Eureka Server默认为trueregister-with-eureka: true# 是否从Eureka Server抓去已有的注册信息,默认是truefetch-registry: true# 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址service-url:defaultZone: http://127.0.0.1:8761/eurekazuul:routes:provider-order-key:path: /provider1/**serviceId: provider-orderprovider-buy-key:path: /buy1/**serviceId: provider-buy

比较需要解释的是 zuul 节点

zuul.routes 定义了路由,本例子中定义了两个路由: 这两个路由的命名其实无所谓,自己起的,我这里写了 provider-order-key 和 provider-buy-key , 这个命名没关系。

path节点定义了在 zuul 服务下的地址 。

serviceId节点定义了访问那个地址后,将转发到的服务。

本例子中,zuul 的服务名是 zuul-server ,端口是 8766 

本例子中 定义了一个path 命名为 provider-order-key, 这个命名没关系,关键是看path 和 serviceId 。 我们看到这个 path 定义为 /provider1/** ,serviceId 为 provider-order 。

访问流程说明

  1. 在浏览器输入 http://127.0.0.1:8766/provider1/provider/order/get/1 后,zuul-server 服务将被请求。
  2. 由于端口指向的是 zuul server 应用,所以 zuul server 收到请求
  3. zuul server 判断路径为 /provider1/ 开头的,因此根据路由配置,将转发给 provider-order 服务,访问的路径为 /provider/order/get/1

zuul在注册中心

查看 Eureka 注册中心,可以看到该 zuul-server 服务,因此,消费者可以使用 zuul-server 服务。

这样,我们就可以只使用 zuul-server 这一个服务,将所有的服务整合成一个服务了。使用起来就简单多了。

zuul的负载均衡

zuul本身支持 robbin 负载均衡,如果 一个服务有多个点的话,请求zuul 可以看到每次都访问不同点的服务。

SpringBoot+Euraka+Zuul实现服务路由的服务相关推荐

  1. Spring Cloud构建微服务架构:服务网关(路由配置)【Dalston版】

    在上一篇<Spring Cloud构建微服务架构:服务网关(基础)>一文中,我们通过使用Spring Cloud Zuul构建了一个基础的API网关服务,同时也演示了Spring Clou ...

  2. 多租户个性化服务路由

    1.场景描述 1)不同租户访问同一个地址,tenant100租户有一个个性化服务service-b-100,在API层需要将其路由到service-b-100服务,其它租户则路由到service-b, ...

  3. Dubbo学习总结(5)——Dubbo服务架构及服务治理过程演进

    单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.  此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键.  垂直应用架构  当访问量逐渐增大,单 ...

  4. 企业分布式微服务云SpringCloud SpringBoot mybatis (五)路由网关(zuul)

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

  5. eureka组件服务集群,feign远程调用,生产者服务集群,ribbon组件(负载均衡),hystrix组件(断路器),zuul(网关路由)

    一.搭建Eureka服务集群 1.创建和一个父module(用于依赖管理) a. 配置pom文件 <?xml version="1.0" encoding="UTF ...

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

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

  7. 遗留非springboot传统项目接入eureka注册与服务发现

    2019独角兽企业重金招聘Python工程师标准>>> 推荐: jeesuite开发框架,免费开源.一站式解决方案. 最近规划自动化运维以及统一监控需求,鉴于目前公司内部大部分项目采 ...

  8. 开发者说:基于 Nacos 的网关灰度路由和服务权重灰度

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! icon designed | 阿猫阿箫 文 | 任浩军 Nepxion Discovery G ...

  9. TSF微服务治理实战系列(二)——服务路由

    一.导语 在服务实例数量和规模较大的业务场景下,服务路由是系统比较常见的诉求,比如针对业务属性的全链路灰度.测试环境多分支路由.多Region多AZ时的就近路由等.TSF基于标签化能力完成流量染色和标 ...

最新文章

  1. win7 php mysql扩展名_win7下MySQL 5.1.73安装过程(图解)并在php.ini中启用相关扩展。...
  2. 后台开发人员面试内容——操作系统(一)
  3. 用yum源配合源码包安装openresty、mariadb、php7服务
  4. 爱特php文件管理器2.8_查找「超级蜘蛛池开发者中心 抠:44564876易」安卓应用 - 豌豆荚...
  5. iframe嵌套微信网页,图片无法显示问题
  6. linux模拟进程调度,Linux进程调度模拟3
  7. 面向对象第一单元(表达式求导)总结体会
  8. 免费下载百度文库文档
  9. 2021-12-11 根据单词首字母查找单词
  10. STM32F7-->USART串口通信
  11. KEIL软件错误代码及错误信息
  12. Apifox 生成接口文档 教程与操作步骤
  13. ubuntu换阿里源
  14. 海量微博数据舆情热点挖掘项目难点总结
  15. 大数据云平台数据治理规划方案(PPT)
  16. 0032-PAT满分行动第二天:简单模拟1046、1008、1012
  17. 4.EMC整改案案例解析及分析(静电辐射发射)。
  18. 关于身份证有效期的那些事儿
  19. python基于django的同学校友录网站
  20. 网络笔记(7) ICMP与ping:投石问路的侦察兵

热门文章

  1. 边缘计算应用场景_泛在电力物联网:被严重忽视的边缘计算应用场景
  2. 【教程】去水印开源工具Lama Cleaner在Windows的安装和使用
  3. python隔行_python多行换行
  4. ImportError: cannot import name ‘int_classes‘ from ‘torch._six‘
  5. 《Principle of Communications》学习笔记
  6. 基于神经网络(RBF)补偿的双关节机械手臂自适应控制
  7. GPT-4推理提升1750%!清华姚班校友提出全新ToT框架,让LLM反复思考
  8. ORB-SLAM2运行EuRoC数据集EVO评估
  9. ```这个符号怎么打出来
  10. Activity-过渡动画-—-让切换更加炫酷,网易严选Android开发三面面经