Eclipse(STS) 初次搭建Spring Cloud项目之路由器(服务网关)zuul(六)

1、为何要使用服务网关

若是不使用服务网关的话,客户端直接与各个微服务交互会出现如下几点问题

  • 客户端会屡次请求不一样的微服务,增长了客户端的复杂性。
  • 存在跨域请求,在必定场景下处理相对复杂。
  • 认证复杂,每一个服务都须要独立认证。
  • 难以重构,随着项目的迭代,可能须要从新划分微服务。
  • 某些微服务可能使用了防火墙/浏览器不友好的协议,直接访问会有必定的困难。

微服务网关是介于客户端与服务器端之间的中间层,全部的外部请求都会先通过微服务网关。使用微服务网关能够解决以上的问题。微服务网关封装了应用程序的内部结构,客户端只需跟网关交互,而无需直接调用特定微服务的接口。除此以外,还有如下优势:

  • 易于监控。可在微服务网关收集监控数据并将其推送到外部系统进行分析。
  • 易于认证。可在微服务网关上进行认证,而后再将请求转发到后端的微服务,而无需在每一个微服务中进行认证。
  • 减小了客户端与每一个微服务之间的交互次数。

2、什么是zuul

Zuul是Netflix开源的微服务网关,它能够和Eureka、Ribbon、Hystrix等组件配合使用。Zuul的核心是一系列的过滤器,这些过滤器能够完成如下功能web

  • 身份认证与安全:识别每一个资源的验证要求,并拒绝那些与要求不符的请求。
  • 审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图。
  • 动态路由:动态地将请求路由到不一样的后端集群。
  • 压力测试:逐渐增长指向集群的流量,以了解性能。
  • 负载分配:为每一种负载类型分配对应容量,并弃用超出限定值的请求。
  • 静态响应处理:在边缘位置直接创建部分响应,从而避免其转发到内部集群。
  • 多区域弹性:跨越AWS Region进行请求路由,旨在实现ELB(Elastic Load Balancing)使用的多样化,以及让系统的边缘更贴近系统的使用者。
  • 以上内容参考 blog.csdn.net/qq_31142553…

3、下面开始写代码

建立项目模块cloud-demo-zuul,项目结构以下:

编写yml

server:
 port: 8812 # 你的端口
spring:
  application:
    name: zuul
eureka:
  client:
    service-url:
      defaultZone: http://admin:admin@server1:8761/eureka/,http://admin:admin@server2:8762/eureka/
zuul:
  routes:
    api-a:
      path: /api-a/**
      serviceId: ribbon
    api-b:
      path: /api-b/**
      serviceId: feign
复制代码

pom文件以下

<?xml version="1.0"?>
<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.hewl</groupId>
		<artifactId>cloud-demo-parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>cloud-demo-zuul</artifactId>
	<name>cloud-demo-zuul</name>
	<url>http://maven.apache.org</url>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<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>
	</dependencies>
</project>

复制代码

启动类代码以下:在启动类上添加注解@EnableZuulProxy,声明一个Zuul代理。该代理使用Ribbon来定位注册在Eureka Server中的微服务;同时,该代理还整合了Hystrix,从而实现了容错,全部通过Zuul的请求都会在Hystrix命令中执行。

package com.hewl;

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;

@SpringBootApplication
@EnableZuulProxy
@EnableEurekaClient
public class ZuulApplication {

	public static void main(String[] args) {
		SpringApplication.run(ZuulApplication.class, args);
	}
}

复制代码

下面启动项目测试spring

  1. 启动eureka-server服务
  2. 启动eureka-client服务
  3. 启动feign服务
  4. 启动ribbon服务
  5. 启动zuul服务

请求 http://localhost:8812/api-b/test?name=张三 apache

路由配置成功!
相关文章
相关标签/搜索