扯淡:
在微服务架构的项目中,每一个微服务都有一个网络地址,若客户端直接与微服务通讯,需要调用多个服务地址才可以完成一个业务,增加了客户端的复杂性,涉及到权限认证的应用需要在每一个微服务模块中独立认证。网关,可以解决以上问题。
个人学习总结:
链接:【springboot、springcloud、docker 等,学习目录】
网关:
一个词解释网关:媒婆
Zuul 简介:
Netiflix 公司开源的微服务网关,实现网关的一种组件,Spring cloud geteway 为springcloud 自己开发的网关。本章将使用 zuul 实现网关。
使用Zuul:
1、新建springcloud_zuul模块:
2、官网基本使用:
2.1、引入到工程:
2.2、相关配置注解:
Zuul的starter没有包含discovery client,需要自己提供一个,Eureka是其中一个选择。
3、pom依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<!-- 服务网关为单独的一个项目 需要注册到 服务注册中心 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
4、启动类:
/**
* @Auther: xf
* @Date: 2018/12/25 22:43
* @Description: zuul 服务网关
*/
//@EnableDiscoveryClient
@EnableZuulProxy
@SpringBootApplication
public class ZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication.class);
}
}
5、application.yml:
server:
port: 8050
spring:
application:
name: springcloud-zuul
eureka:
client:
# 指定服务注册中心的位置
serviceUrl:
defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/
这里Eureka我配置的是两台集群,也可是一个、单体。
经过以上配置,Eureka中的应用会被自动添加到zuul中。
6、测试:
6.1、启动Eureka、zuul、用户微服务(springcloud-user)、文章微服务(springcloud-article)。
6.2、通过网关请求微服务:
文章微服务测试:http://127.0.0.1:8050/springcloud-article/article/list
用户微服务测试:http://127.0.0.1:8050/springcloud-user/user/list
8085:网关服务端口
springcloud-article:文章微服务spring.application.name
7、网关路由规则的配置:
application.yml 中配置:
############################## 网关的几种配置 ###########################
########### 方式一:不配置 即默认注册Eureka 上的所有 ############
### 可访问路径 ###
# http://127.0.0.1:8050/springcloud-user/user/list
# http://127.0.0.1:8050/springcloud-article/article/list
########### 方式二:排除所有之后引入指定微服务 ##########
### 可访问路径 ###
# http://127.0.0.1:8050/user/user/list
##### zuul 配置 ####
#zuul:
# ignoredServices: '*'
# routes:
# springcloud-user: /user/**
########### 方式三:排除指定微服务、配置指定微服务 ##########
### 可访问路径 ###
# http://127.0.0.1:8050/springcloud-user/user/list
# http://127.0.0.1:8050/user/user/list
##### zuul 配置 ####
#zuul:
# # 排除 springcloud-article
# ignoredServices: 'springcloud-article'
# routes:
# springcloud-user: /user/**
################ 方式四:细粒度配置指定微服务 建议使用 ################
### 可访问路径 ###
# http://127.0.0.1:8050/springcloud-article/article/list
# http://127.0.0.1:8050/springcloud-user/user/list
# http://127.0.0.1:8050/user/user/list
##### zuul 配置 ####
#zuul:
# routes:
# # 名称随便取 保证唯一即可
# abc:
# path: /user/**
# serviceId: springcloud-user
################ 方式五:指定微服务URL 此方式负载均衡较繁琐 不建议使用 ################
### 可访问路径 ###
# http://127.0.0.1:8050/springcloud-article/article/list
# http://127.0.0.1:8050/springcloud-user/user/list
# http://127.0.0.1:8050/user-url/user/list
##### zuul 配置 ####
#zuul:
# routes:
# # 名称随便取 保证唯一
# abc:
# path: /user-url/**
# # 用户微服务地址
# url: http://127.0.0.1:8090
注意:以上路由中多次使用到 "/user/**",这里的是网关项目中的匹配规则,可自己定义,例如"/user-url",即在请求用户微服务"/user/list"时,地址为“/user/user/list”。
至此,网关的基本配置已完成。
总结:
1、网关是客户端和微服务通信的中间桥梁。
2、Zuul 作为一个独立的工程需要注册到服务注册中心。
3、网关的几种配置规则。建议使用方式四。
代码地址:
https://gitee.com/cpla026/springcloud/tree/master/springcloud_parent/springcloud_zuul
个人学习分享
更多 springboot、springcloud、docker 文章,关注微信公众号吧:
Views 3