Spring Cloud 2.x系列之网关zuul入门(一)
基于Spring的微服务结点在能力上没有高低贵贱之分,但是在角色上会分为边缘服务和内部服务两部分。内部服务是为对内暴露服务的结点,供架构内部来调用;边缘服务是对外部网络暴露的服务结点,也就是对外API接口。
开发人员为了防止服务被黑客攻击,需要编写各种权限机制,这些机制在每个微服务结点都要实现一次。一旦鉴权上有什么bug,又要全部节点上推倒重来,噩梦;运维人员在边缘服务前段都会架一个F5或者Nginx等负载均衡的代理,需要手动维护一份服务列表和服务地址的路由信息,随着结点的扩展或地址调整这份列表要变来变去。
为了解决鉴权重复的问题,使业务结点本身只关心实现自己的业务,将对权限的处理抽离到上层。外部客户先请求到Zuul上,在Zuul服务上对权限进行统一实现和过滤,以实现微服务结点的过滤和验证;为了解决请求路由和安全过滤,Spring Cloud推出了一个API gateway组件:Spring Cloud Zuul。
Zuul对路由的配置有三种方式:
第一种(path-url):如果请求/sina这个地址,将会转发到http://www.sina.com.cn上去
第二种(path-serviceId):如果请求/user-consumer开头的地址,将会转发到eureka上serviceId为sc-user-provider这个服务上去。
第三种(给微服务名指定path):给sc-user-provider这个微服务指定了它的请求地址是/user-service/**
(其实这里还隐藏了第四种:什么都不配,默认给注册到eureka上的所有服务以第三种方式进行路由,path就是微服务自己的名字,但是此种方式又是不安全的,相当于将非边缘服务也暴露给外网,一般需要关闭这个默认配置zuul.ignored-services=*,或者至少将受保护的微服务列表维护到zuul.ignored-services中)
今天介绍一下第一种方式
1、新建项目sc-zuul,对应的pom.xml文件如下
<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.0http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>spring-cloud</groupId> <artifactId>sc-zuul</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>sc-zuul</name> <url>http://maven.apache.org</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> </dependencies> </project>
2、新建配置文件application.yml
server: port: 8070 spring: application: name: sc-zuul zuul: routes: sina: path: /sina/** url:http://www.sina.com.cn baidu: path: /baidu/** url:http://www.baidu.com
3、新建启动类ZuulApplication.java
package sc.zuul; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; @SpringBootApplication @EnableZuulProxy public classZuulApplication { public static void main(String[] args) { SpringApplication.run(ZuulApplication.class, args); } }
4、启动项目
5、验证
访问地址http://127.0.0.1:8070/baidu/跳转到百度
访问地址http://127.0.0.1:8070/sina/跳转到新浪
参考
https://blog.csdn.net/yejingtao703/article/details/77816555/ https://www.cnblogs.com/ityouknow/p/6944096.html
源码:
https://gitee.com/hjj520/spring-cloud-2.x/tree/master/sc-zuul
本文作者: java乐园
本文来自云栖社区合作伙伴“JAVA乐园”,了解相关信息可以关注“JAVA乐园”
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
RocketMQ概念详细之NameServer
在Apache RocketMQ,域名服务器 被设计为协调分布式系统的每个组件,协调主要通过管理主题路由信息来实现。 管理由两部分组成: Broker定期更新保存在每一个NameServer中的元数据 NameServer为客户端提供服务,包括生产者,消费者和带有最新路由信息的命令行客户端。 因此,在启动broker和客户端之前,我们需要告诉它们如何通过向NameServer提供域名服务地址列表访问name servers。 在Apache RocketMQ,可以通过四种方式完成。 编程方式 对于Broker,你可以在broker配置文件中指定namesrvAddr=name-server-ip1:port;name-server-ip2:port。对于生产者和消费者,我们可以像下面提供 NameServer地址列表: //生产者 DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name"); producer.setNamesrvAddr("name-server1-ip:p...
- 下一篇
解析 | 蚂蚁金服金融级容器引擎实践之路
小蚂蚁说: 在金融级分布式架构中使用容器,许多企业的开发者都面临许多挑战。在2018年ATEC蚂蚁金服技术探索大会上,蚂蚁金服高级技术专家盛延敏在演讲中分析了容器与云原生技术的本质,为容器在分布式架构上的使用带来了实用高效的解决方案。 关于蚂蚁金服科技开放其他的技术产品,你还可以参考阅读: 《独家 | 蚂蚁金服TRaaS技术风险防控平台解密》; 《深度|蚂蚁金服分布式金融核心套件:金融核心系统变革助推器》; 《2.0 解析系列 | 一文详解新一代OceanBase云平台》…… 关注“蚂蚁金服科技”,了解蚂蚁金服更多前沿暖科技! 容器与云原生技术 云原生技术由来已久,它包含五部分基础技术,包括容器(Containers)、服务网络(Service Meshes)、声明式API(Declarative APIs)、不可变基础设施(Immutable
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Mario游戏-低调大师作品
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装