java面试突击第三季资料,springCloud路由配置

4.1 我们新建一个springBoot的web项目


4.2 添加maven依赖


org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

2.2.5.RELEASE

org.springframework.cloud

spring-cloud-starter-netflix-zuul

2.2.5.RELEASE

4.3 applicaton类加上注解@EnableZuulProxy,开启zuul的功能:


@SpringBootApplication

@EnableEurekaClient

@EnableZuulProxy

package com.cloud.zuul;

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

@EnableEurekaClient

@EnableZuulProxy

public class ZuulApplication {

public static void main(String[] args) {

SpringApplication.run(ZuulApplication.class, args);

}

}

4.3 在application.properties添加配置


端口

server.port=8083

#注册名称

spring.application.name=service-zuul

#eureka.instance.prefer-ip-address 注册服务的时候使用服务的ip地址

eureka.instance.prefer-ip-address=true

eureka.client.service-url.defaultZone=http://localhost:8080/eureka/

前缀,用来做版本控制

zuul.prefix=/v1

禁用默认路由,执行配置路由

zuul.ignored-services=“*”

设置全局参数为空来覆盖默认值使其可以传递cookie

zuul.sensitive-headers=

设置熔断时间

#请求处理的超时时间 ms

ribbon.ReadTimeout=8000

#请求连接的超时时间 ms

ribbon.ConnectTimeout=10000

配置8082-consumer路由

zuul.routes.con8082.serviceId=user-consumer

zuul.routes.con8082.path=/api-8082/**

配置8081-provider

zuul.routes.pro8081.serviceId=user-provider

zuul.routes.pro8081.path=/api-8081/**

此处会开启轮训策略

zuul.routes.pro8081.strip-prefix=true

#配置文件传输

spring.servlet.multipart.enabled=true

spring.servlet.multipart.file-size-threshold=0

#单个数据的大小

spring.servlet.multipart.max-file-size=1024MB

#总数据的大小

spring.servlet.multipart.max-request-size=10240MB

解决返回页面中文乱码问题

server.servlet.encoding.force=true

server.servlet.encoding.charset=UTF-8

  • 以/api-8082/ 开头的请求都转发给consumer服务;

  • 以/api-8081/开头的请求都转发给provider服务;

注意:serviceId要与项目配置里的spring.application.name对应

在这里插入图片描述

4.4 接下来我们按照上面说的服务启动顺序,依次启动,使用postMan测试


在这里插入图片描述

5.上面我们只实现了路由的转发功能,接下来实现zuul的服务过滤以及统一服务降级的功能

========================================================================================================

5.1 服务过滤


新建一个配置类,自定过滤的需求

FilterConfig

package com.cloud.zuul.config;

import com.netflix.zuul.ZuulFilter;

import com.netflix.zuul.context.RequestContext;

import com.netflix.zuul.exception.ZuulException;

import org.springframework.stereotype.Component;

import org.springframework.stereotype.Controller;

import javax.servlet.http.HttpServletRequest;

@Component

public class FilterConfig extends ZuulFilter {

@Override

public String filterType() {

return “pre”;

}

@Override

public int filterOrder() {

return 0;

}

@Override

public boolean shouldFilter() {

return true;

}

@Override

public Object run() throws ZuulException {

RequestContext requestContext = RequestContext.getCurrentContext() ;

try {

doBizProcess(requestContext);

} catch (Exception e){

System.out.println(“异常:{}”+e.getMessage());

}

return null;

}

public void doBizProcess (RequestContext requestContext) throws Exception {

HttpServletRequest request = requestContext.getRequest() ;

String reqUri = request.getRequestURI() ;

if (!reqUri.contains(“getAuthorInfo”)){

requestContext.setSendZuulResponse(false);

requestContext.setResponseStatusCode(401);

requestContext.getResponse().getWriter().print(“Path Is Error…”);

}

}

}

大致解释以下以上代码:

我们可以在run()方法中自定义我们希望拦截的事件,比如404 500拦截,toeken拦截等

filterType:返回一个字符串代表过滤器的类型。

在zuul中定义了四种不同生命周期的过滤器类型,具体如下:

  • pre:路由之前

  • routing:路由之时

  • post: 路由之后

  • error:发送错误调用

  • filterOrder:过滤的顺序

  • shouldFilter:这里可以写逻辑判断,是否要过滤,本文true,永远过滤。注意:此处若设为false则不进行过滤。

  • run:过滤器的具体逻辑。可用很复杂,包括查sql,nosql去判断该请求到底有没有权限访问。

使用postMan测试:

在这里插入图片描述

5.2 统一服务降级


FallBackConfig

package com.cloud.zuul.config;

import com.netflix.hystrix.exception.HystrixTimeoutException;

import org.springframework.http.HttpHeaders;

import org.springframework.http.HttpStatus;

import org.springframework.http.MediaType;

import org.springframework.http.client.ClientHttpResponse;

import org.springframework.stereotype.Component;

import java.io.ByteArrayInputStream;

import java.io.InputStream;

@Component

public class FallBackConfig implements org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider {

/定义构造函数/

public ClientHttpResponse fallbackResponse() {

return response(HttpStatus.INTERNAL_SERVER_ERROR);

}

@Override

public String getRoute() {

return “*”;

}

@Override

public ClientHttpResponse fallbackResponse(String route, Throwable cause) {

// 捕获超时异常,返回自定义信息

if (cause instanceof HystrixTimeoutException) {

return response(HttpStatus.GATEWAY_TIMEOUT);

} else {

return fallbackResponse();

}

}

private ClientHttpResponse response(final HttpStatus status) {

return new ClientHttpResponse() {

@Override

public HttpStatus getStatusCode() {

return status;

}

@Override

public int getRawStatusCode() {

return status.value();

}

@Override

public String getStatusText() {

return status.getReasonPhrase();

}

@Override

public void close() {

System.out.println(“close”);

}

@Override

public InputStream getBody() {

String message =

“{\n” +

““code”: 200,\n” +

““message”: “微服务飞出了地球”\n” +

“}”;

return new ByteArrayInputStream(message.getBytes());

}

@Override

public HttpHeaders getHeaders() {

HttpHeaders headers = new HttpHeaders();

headers.setContentType(MediaType.APPLICATION_JSON);

return headers;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

我想问下大家当初选择做程序员的初衷是什么?有思考过这个问题吗?高薪?热爱?

既然入了这行就应该知道,这个行业是靠本事吃饭的,你想要拿高薪没有问题,请好好磨练自己的技术,不要抱怨。有的人通过培训可以让自己成长,有些人可以通过自律强大的自学能力成长,如果你两者都不占,还怎么拿高薪?

架构师是很多程序员的职业目标,一个好的架构师是不愁所谓的35岁高龄门槛的,到了那个时候,照样大把的企业挖他。为什么很多人想进阿里巴巴,无非不是福利待遇好以及优质的人脉资源,这对个人职业发展是有非常大帮助的。

如果你也想成为一名好的架构师,那或许这份Java核心架构笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

中高级开发必知必会:

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
tyle=“zoom: 33%;” />

最后

我想问下大家当初选择做程序员的初衷是什么?有思考过这个问题吗?高薪?热爱?

既然入了这行就应该知道,这个行业是靠本事吃饭的,你想要拿高薪没有问题,请好好磨练自己的技术,不要抱怨。有的人通过培训可以让自己成长,有些人可以通过自律强大的自学能力成长,如果你两者都不占,还怎么拿高薪?

架构师是很多程序员的职业目标,一个好的架构师是不愁所谓的35岁高龄门槛的,到了那个时候,照样大把的企业挖他。为什么很多人想进阿里巴巴,无非不是福利待遇好以及优质的人脉资源,这对个人职业发展是有非常大帮助的。

如果你也想成为一名好的架构师,那或许这份Java核心架构笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

中高级开发必知必会:

[外链图片转存中…(img-zTVpJDPO-1713315310899)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值