## url方式
~~~
zuul:
routes:
haha: #key可以随便写
path: /user-service/** #匹配user-service为前缀的所有路径,并且把**部分的路径转发到下面的url
url: http://127.0.0.1:8082 #匹配user为前缀的所有路径转发到此地址
~~~
测试:
![](https://box.kancloud.cn/cfc53a6f538a7db2b385202c2bcfef58_2148x632.png)
## 面向服务的路由
在上面的路由规则中,我们把路径对应的服务地址写死了!如果同一服务有多个实例的话,这样做显然就不合理了。
我们应该根据服务的名称,去Eureka注册中心查找 服务对应的所有实例列表,然后进行动态路由才对!
因为Zuul已经引入了ribbon,所以使用面向服务的路由已经自动完成了负载均衡.
引入eureka依赖:
~~~
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
</dependencies>
~~~
**启动类加上@EnableDiscoveryClient注解用来发现服务.**
配置:
~~~
server:
port: 10010
spring:
application:
name: api-gateway
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka #将当前服务注册到eureka
zuul:
routes:
haha: #key可以随便写
path: /user-service/** #匹配user-service为前缀的所有路径,并且把**部分的路径转发到下面的服务
serviceId: consumer-server #这里是服务的ID
~~~
测试:
![](https://box.kancloud.cn/af5735b92accbe88a825c51f4e48e93e_2100x626.png)
## 简化路由配置
~~~
zuul:
routes:
consumer-server: /user-service/** #key是服务的ID,值是服务的映射路径
~~~
**我们并没有配置consumer-server,但是也可以访问.因为这种配置方法太常见了,服务的ID配置为映射的路径,所以zuul将eureka的服务列表全部拉取下来,自动默认实现了将服务ID作为映射的前缀.也就是说我们可以什么都不用配置了,也可以实现请求转发.**
![](https://box.kancloud.cn/a8d161be475eeb696a6a61da1d23108e_2170x666.png)
## 去掉url中的服务ID
通过下面的方式去访问显得url太长了,并且也暴露了服务的ID.通过配置可以简化URL.
```
http://localhost:10010/api/user-server/user/1
```
~~~
zuul:
prefix: /api #路由前缀
routes:
user-server:
path: /user/**
serviceId: user-server
strip-prefix: false #默认是true,我们改成false,这样就不会将映射的前缀修剪掉(保留下来).配置在服务下面是局部的.
~~~
测试:达到了我们需要的效果.
![](https://box.kancloud.cn/255be8881e8e9fb3905449a4458a7475_1698x974.png)
## 全局strip-prefix: false
~~~
zuul:
prefix: /api #全局的只对这一项起作用,默认为true,我们基本不需要配置,因为没什么用.
strip-prefix: false
~~~
## 隐藏服务不对外暴露
有些服务比较敏感,我们不希望对外暴露,只希望服务间的内部访问.
~~~
zuul:
routes:
consumer-server: /user-service/** #key是服务的ID,值是服务的映射路径
ignored-services:
- yyy-server #将不需要对外暴露的服务写在此处,注意是一个集合
- xxx-server
~~~
## 路由前缀
这样所有的访问都要加上api前缀,因为Java现在一般都是只提供接口了,所以加上此前缀比较好.
~~~
zuul:
prefix: /api #路由前缀
~~~
- Maven
- 概述
- 常用命令
- 生命周期
- scope详解
- maven概念模型图
- IDEA创建maven工程
- 创建maven web项目
- 冲突解决
- pom文件标签详解
- maven工程拆分与聚合的思想
- 父子工程的创建
- 工程和模块的关系以及集成和依赖的概念
- 父子工程添加依赖
- 父子工程的三种启动方式
- Struts2
- 执行流程
- 配置
- action的使用
- 获取Servlet的API
- result标签的视图配置
- struts2属性封装
- struts2模型封装
- OGNL
- 值栈(ValueStack)
- 值栈context区存数据
- 值栈root区
- struts2对el的增强
- #,%,$符号使用
- 值栈扩展
- 拦截器
- 自定义拦截器
- 方法拦截器
- 注解方式
- Hibernate
- 配置
- 简单crud
- 持久化类编写规范
- OID
- 持久化类三种状态
- 一级缓存
- 查询
- session与当前线程绑定
- hibernate一对多配置
- 冗余SQL语句的原因
- hibernate多对多配置
- 级联操作
- 对象导航查询
- JPA
- JPA单表CRUD
- JPA多种查询
- JPA一对多关系映射
- JPA一对多操作
- JPA多对多关系映射
- JPA多对多操作
- QBC查询
- 离线条件查询(DetachedCriteria)
- SpringMVC
- 环境搭建
- 常用注解
- 请求参数绑定
- 绑定基本类型和字符串
- 绑定实体类型
- 解决中文乱码
- 绑定集合类型
- 自定义类型转换器
- 获取Servlet的API
- 响应字符串
- 响应void
- 响应ModelAndView
- 响应forward和redirect
- 响应过滤静态资源
- 响应json
- 文件上传基础
- SpringMVC上传文件
- 跨服务器文件上传
- 拦截器
- SpringMVC异常
- ControllerAdvice
- SpringMVC默认处理方式
- 概述
- @ExceptionHandler
- 消息转换器
- SpringMVC跨域
- Spring
- 概述
- IoC快速入门
- ApplicationContext三个常用实现类
- beanFactory和ApplicationContext区别
- bean创建三种方式
- POJO和Javabean的区别
- bean作用范围
- bean对象生命周期
- spring的依赖注入
- DI的属性注入方式
- 常用注解
- Spring新注解
- Spring整合连接池
- Spring的IOC注解配置
- Spring完全使用注解
- Spring整合junit
- AOP
- AOP配置
- JDBCTemplate
- JDBCTemplate在IOC中使用
- JDBCTemplate的CRUD
- JDBCTemplate在dao中使用
- 声明式事务
- spring事务API
- 事务XML配置
- 事务注解配置
- 全注解事务
- Spring编程式事务
- 整合SSH(XML版本)
- 整合SSH(半XML半注解)
- Spring5新特性
- MyBatis
- 概述
- 用maven创建MyBatis
- 将数据库配置单独文件
- typeAliases标签
- MyBatis的CRUD
- MyBatis实现Dao层开发
- 使用dao和代理类的区别
- MyBatis连接池
- MyBatis事务
- MyBatis动态SQL
- 多表操作
- 多表一对一
- 多表一对多
- 多表多对多
- JNDI
- 延迟加载和立即加载
- 延迟加载
- 一级缓存
- 二级缓存
- MyBatis注解
- MyBatis注解CRUD
- 注解实体类属性和字段对应关系
- MyBatis注解一对一和一对多
- MyBatis注解二级缓存
- SSM整合
- 搭建环境
- SpringBoot
- SpringBoot核心功能
- 快速入门
- SpringBoot配置文件
- yml配置文件语法
- 配置文件与配置类的属性映射方式
- 端口和映射路径
- 日志级别
- 访问静态资源
- SpringBoot注入方式一
- SpringBoot注入方式二
- 拦截器
- HikariCP连接池
- SpringBoot集成MyBatis
- 通用mapper
- SpringBoot事务
- SpringBoot集成Junit
- SpringBoot集成DataJPA
- SpringBoot集成Redis
- 使用SpringBoot提供的测试启动类
- 使用MockMvc
- SpringCloud
- RestTemplate
- Eureka概述
- Eureka快速入门
- Eureka集群
- Eureka客户端
- Eureka失效剔除和自我保护
- 负载均衡Ribbon
- Hystrix
- Hystrix服务降级
- Hystrix服务熔断
- Feign
- Feign的熔断机制
- Feign的请求压缩和日志级别
- Zuul网关
- Zuul快速入门
- Zuul路由规则
- Zuul过滤器
- Zuul自定义过滤器
- Zuul负载均衡和熔断
- Zuul高可用
- Zuul网关缓存
- SpringSecurity
- 快速入门
- SpringSecurity使用数据库认证