(六)Spring Cloud实践:使用Netflix Zuul实现路由和过滤

呵呵,终于到最后一篇,实现了一个小目标。

Spring Cloud Netflix通过zuul组件实现路由和过滤。路由是整个微服务框架的一个组成部分,可以通过反斜线开头的字符串来实现各种服务和web应用的映射。Zuul提供了一种基于JVM的路由和服务端的负载均衡。

下面我们具体来看一下如何创建一个zuul模块,即模块7 zuulservice,其pom.xml文件内容为:



	4.0.0

	com.xinhuanet
	zuulservice
	0.0.1-SNAPSHOT
	jar

	zuulservice
	zuul网关

	
		org.springframework.boot
		spring-boot-starter-parent
		2.1.0.RELEASE
		 
	

	
		UTF-8
		UTF-8
		1.8
		Greenwich.M1
	

	
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.springframework.cloud
			spring-cloud-starter-netflix-eureka-client
		
		
			org.springframework.cloud
			spring-cloud-starter-netflix-zuul
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				${spring-cloud.version}
				pom
				import
			
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	

	
		
			spring-milestones
			Spring Milestones
			https://repo.spring.io/milestone
			
				false
			
		
	



配置文件application.yml添加如下内容:

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8080/eureka/
server:
  port: 8093
spring:
  application:
    name: zuul-service
zuul:
  routes:
    ribbon:
      path: /api-ribbon/**
      serviceId: ribbon-service
    feign:
      path: /api-feign/**
      serviceId: feign-service
  ignored-services: '*'

其中,包含两个路由配置,一个路由到ribbon-service,一个路由到feign-service,通过serviceId实现微服务发现,path指定了路由的地址映射关系。

启动文件内容如下:

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 ZuulserviceApplication {

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

启动zuulservice,然后在浏览器地址栏输入:http://localhost:8093/api-ribbon/,就可以直接路由到http://localhost:8091/;同样输入http://localhost:8093/api-feign/,就可以路由到http://localhost:8092/

以上配置实现了zuul路由,下面将简单介绍zuul过滤。

通过zuul实现过滤,需要接口ZuulFilter,就可以对请求进行筛选 和过滤。比如下面就是一个官网实现的Post过滤器。

public class AddResponseHeaderFilter extends ZuulFilter {
	@Override
	public String filterType() {
		return POST_TYPE;
	}

	@Override
	public int filterOrder() {
		return SEND_RESPONSE_FILTER_ORDER - 1;
	}

	@Override
	public boolean shouldFilter() {
		return true;
	}

	@Override
	public Object run() {
		RequestContext context = RequestContext.getCurrentContext();
    	HttpServletResponse servletResponse = context.getResponse();
		servletResponse.addHeader("X-Sample", UUID.randomUUID().toString());
		return null;
	}
}

到此为止,可以将Spring cloud应用到简单的项目中,当然,要用好每一个组件,还需要进一步研究。

你可能感兴趣的:(微服务及spring,cloud实践)