学习尚硅谷老师的springcloud,摘抄和总结以及分类笔记!
只要学不死,就往死里学!
承接自上一篇博文:https://blog.csdn.net/konmor/article/details/101178491
一、概述
路由网关的介绍:https://blog.csdn.net/qq_27384769/article/details/82991261
Zuul包含了对请求的路由和过滤两个最主要的功能:
其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础.Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。
注意:Zuul服务最终还是会注册进Eureka
提供=代理+路由+过滤三大功能
二、路由基本配置
新建带有Zuul的工程,类似provider工程
2.1.修改pom文件
复制前面的provider工程的pom文件
主要添加以下依赖:
主要的修改内容:
<!-- zuul路由网关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
全部内容:
<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.atguigu.springcloud</groupId>
<artifactId>microservicecloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>microservicecloud-zuul-gateway-9527</artifactId>
<dependencies>
<!-- 引入自己定义的api通用包,可以使用Dept的Entity -->
<dependency>
<groupId>com.atguigu.springcloud</groupId>
<artifactId>my-microservicecloud-api</artifactId>
<version>${project.version}</version>
</dependency>
<!-- actuator开始:主管监控和信息配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- :actuator结束 -->
<!-- Eureka开始:将微服务provider注册进Eureka -->
<!-- 必须写成-netflix-eureka-client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- Euraka注册结束; -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 阿里巴巴的连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
<!--mybatis整合springboot -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<!-- 使用内嵌的jetty容器,,服务器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- test测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- 热加载 ,这里不知道为什么必须要指定版本<version>1.2.6.RELEASE</version> -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!-- zuul路由网关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<!-- hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
</dependencies>
</project>
2.2.添加yml文件
application.yml文件内容如下:
server:
port: 9527
spring:
application:
name: microservicecloud-zuul-gateway #对外暴露的服务名字
eureka:
instance:
instance-id: gateway-9527.com #起别名字,这句话要写在client之前才能生效(cloud版本魏2.0.3以上时),设定注册的名字
prefer-ip-address: true
client: #客户端注册进eureka服务列表内
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
info:
app.name: atguigu-microcloud
company.name: www.atguigu.com
build.artifactId: $project.artifactId$
build.version: $project.version$
2.3.配置主启动类
注意只需添加@EnableZuulProxy/类似代理/注解,
不用添加@EnableEurekaClient /本服务启动后会自动注册进入Euraka/
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableZuulProxy/*类似代理*/
public class Zuul_9527_StartSpringCloudApp {
public static void main(String[] args) {
SpringApplication.run(Zuul_9527_StartSpringCloudApp.class, args);
}
}
修改hosts文件
C:\Windows\System32\drivers\etc
里面的hosts文件
添加127.0.0.1 myzuul.com
测试
不用路由一般请求:http://localhost:8001/dept/get/2
用路由:http://myzuul.com:9527/microservicecloud-dept/dept/get/2
通过myzuul.com:9527获得微服务microservicecloud-dept请求dept/get/2
都出现结果
将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。
在测试时出现的问题
:If you want an embedded database please put a supported one on the classpath
解决办法:在SpringBootApplication内部添加
exclude = {DataSourceAutoConfiguration.class}
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
三、路由的映射规则
说在前面:
zuul: #配置zuul路由网关的映射规则
prefix: /atguigu #添加前缀
ignored-services: "*" #忽视所有的服务,忽视具体的用ignored-services: microservicecloud-dept
routes: #映射
mydept.serviceId: microservicecloud-dept #注意:mydept.serviceId:和mydept.path:的mydept必须相同,
mydept.path: /mydept/** #规则:用mydept代替microservicecloud-dept服务
3.1.初级映射
在要文件加入zuul的映射:
zuul: #配置zuul路由网关的映射规则
routes: #映射
mydept.serviceId: microservicecloud-dept #注意:mydept.serviceId:和mydept.path:的mydept必须相同,
mydept.path: /mydept/** #规则:用mydept代替microservicecloud-dept服务
结果:可以使用http://myzuul.com:9527/mydept/dept/get/1,来访问数据,但是原来的http://myzuul.com:9527/microservicecloud-dept/dept/get/2也可以访问数据
原来的也可以访问
3.2.映射升级
yml文件如下:
忽略指定的服务: microservicecloud-dept
单个具体,多个可以用""。如: ignored-services: ""
zuul: #配置zuul路由网关的映射规则
ignored-services: microservicecloud-dept #忽视所有的服务,忽视具体的用ignored-services: microservicecloud-dept
routes: #映射
mydept.serviceId: microservicecloud-dept #注意:mydept.serviceId:和mydept.path:的mydept必须相同,
mydept.path: /mydept/** #规则:用mydept代替microservicecloud-dept服务
3.3.zuul映射再升级
yml添加prefix前缀:
zuul: #配置zuul路由网关的映射规则
prefix: /atguigu #添加前缀
ignored-services: microservicecloud-dept #忽视所有的服务,忽视具体的用ignored-services: microservicecloud-dept
routes: #映射
mydept.serviceId: microservicecloud-dept #注意:mydept.serviceId:和mydept.path:的mydept必须相同,
mydept.path: /mydept/** #规则:用mydept代替microservicecloud-dept服务
结果:
http://myzuul.com:9527/microservicecloud-dept/dept/get/3
http://myzuul.com:9527/mydept/dept/get/3
http://myzuul.com:9527/atguigu/mydept/dept/get/3