springboot+Zuul网关服务

本文介绍springboot+Zuul网关服务,网关服务可降低维护难度,像微服务架构系统门面。文中依次阐述创建Eureka - Server服务注册中心、EurekaClient和EurekaCustom服务、EurekaZuul服务的步骤,包括配置文件和启动类,还提及请求过滤、转发及自定义过滤器生效的验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

springboot+Zuul网关服务

   点关注不迷路,欢迎再来!

精简博客内容,尽量已专业术语来分享。
努力做到对每一位认可自己的读者负责。
帮助别人的同时更是丰富自己的良机。

网关服务有效的降低维护路由规则与服务实例列表的难度。它的存在就像是整个微服务架构系统的门面一样,所有的外部客户端都需要经过它来进行调度和过滤。
一.先创建一个Eureka-Server服务注册中心
回顾上节知识:springboot集成Eureka注册中心(四)

二.创建EurekaClient和EurekaCustom服务
回顾 springboot+Ribbon客户端负载均衡(七) ,可以复制源码,直接启动服务即可。

三.创建EurekaZuul服务
1.pom.xml配置

		<!-- Zuul -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
		</dependency>

2.配置application.yml文件

eureka:
  client:
    serviceUrl: #注册中心的注册地址
      defaultZone: http://127.0.0.1:8081/eureka/
server:
  port: 8085  #服务端口号
spring:
  application:
    name: service-zuul #服务名称--调用的时候根据名称来调用该服务的方法   

zuul:
 routes:
  users:
    path: /api-client/** #以api-client开头的路径被重定向到service-client服务,/**表示匹配任意数量字符,支持多级目录
    serviceId: service-client

3.配置启动类引入@EnableZuulProxy

/**
 * 开启Zuul的API
 * @author andy
 *
 */

@EnableZuulProxy
@SpringBootApplication
public class EurekaZuulApplication {

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

4.访问serverZuul看看效果
在这里插入图片描述
因为我们在配置服务路由时对/api-client/**请求过滤
访问http://127.0.0.1:8085/api-client/client/index ,看结果会不会转发到service-client
在这里插入图片描述
从结果可以看出我们通过设置的请求过滤并成功的转发service-client,有小伙伴可能发现页面会报错不用担心,如果你回头看 springboot+Ribbon客户端负载均衡(七) 你就会明白是因为接口睡眠超时引起的,重新刷新页面就OK了。

5.编写过滤器AccessFilter

/**
 * 过滤器配置类
 * @author andy
 */
@Configuration
public class AccessFilter extends ZuulFilter{

	private Logger logger = LogManager.getLogger(AccessFilter.class.getName());

	@Override
	public boolean shouldFilter() {    //判断是否需要被过滤
		return true;
	}

	@Override
	public Object run() throws ZuulException {
		RequestContext ctx = RequestContext.getCurrentContext();
		HttpServletRequest request = ctx.getRequest();
		logger.info("send {}  request to {}",request.getMethod(),request.getRequestURI().toString());
		String token = request.getParameter("accessToken");
		if(token==null) {
			logger.warn("access token is empty");
			ctx.setSendZuulResponse(false);
			ctx.setResponseStatusCode(401);
			return null;
		}
		logger.info("access token ok");
		return null;
	}

	@Override
	public String filterType() {   //过滤类型
		return "pre";
	}

	@Override
	public int filterOrder() {     //过滤执行顺序
		return 0;
	}
}

自定义过滤器之后,并不会直接生效,还需要为其创建具体的Bean

/**
 * 开启Zuul的API
 * @author andy
 *
 */

@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class EurekaZuulApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaZuulApplication.class, args);
	}
	
	//将过滤器注入到容器中
	@Bean
	public AccessFilter accessFilters() {
		return new AccessFilter();
	}

}

再次访问http://127.0.0.1:8085/api-client/client/index

在这里插入图片描述
在这里插入图片描述
到这里说明过滤器已经生效。所以为了避免将某些非业务性代码,冗余的逻辑从原有的微服务中拆分出来,冗余的拦截器或过滤器,更好的做法是通过前置的网关服务来完成这些非业务性质的校验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值