(springCloud-8 Zuul网关路由的基本配置feign实现接口调用)
Zuul的作用
统一将外部请求转发到具体的微服务实列上面,是实现访问的统一路径;
如何搭建一个Zuul网关服务?
第一步 准备一个服务 zt-frank-zuul-service-4001;
第二步 引入zuul的依赖
<!--路由网关 zuul --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> <version>2.0.0.RELEASE</version> </dependency>
第三步 yml文件的配置
server:
port: 4001 #服务注册中心端口号
spring:
application:
name: zt-frank-zuul-service-4001
eureka:
instance:
instance-id: zuul_4001 #eureka 界面statua栏的别称
hostname: zuul4001.com #Zuul的IP地址
perfer-ip-address: true #eureka界面显示ip地址
leaserenewalintervalinseconds: 1 #eureka client发送心跳给server端的频率。如果在leaseExpirationDurationInSeconds后,server端没有收到client的心跳,则将摘除该instance
leaseexpirationdurationinseconds: 2 #eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,在这个时间内若没收到下一次心跳,则将移除该instance
client:
register-with-eureka: true #是否向服务注册中心注册自己
healthcheck:
enable: true #开启健康检查
service-url: #服务注册中心的配置内容,指定服务注册中心的位置
#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
defaultZone: http://eureka6001.com:6001/eureka/,http://eureka6002.com:6002/eureka/,http://eureka6003.com:6003/eureka/ #集群配置
server:
enable-self-preservation: false #false取消eureka的自我保护机制
eviction-interval-timer-in-ms: 30000 #eureka server清理无效节点的时间间隔,默认60000毫秒,即60秒
#erueka当前项目的信息
info:
app.name: spring-zuul-service-4001
company.name: zuul-config-4001
#网关配置
zuul:
routes:
client-a: #路径以/config开头的请求都转发到 zt-frank-config-service 服务上面
path: /config/**
service-id: zt-frank-config-service #yml文件spring.application.name的值
strip-prefix: false
client-b:
path: /hystrix/**
service-id: zt-frank-config-service-hystrix-7003
strip-prefix: false
注意:上面的yml文件中的 eureka.instance.hostname = zuul4001.com 是hosts文件配置的(C:\Windows\System32\drivers\etc\hosts)以及 Zuul是需要注册到Eurka中的
第五步:主启动类上面添加注解 @EnableZuulProxy
@SpringBootApplication //启动zuul相关的代理作用 @EnableZuulProxy public class ZtFrankZuulApplication4001 { private static Logger logger = Logger.getLogger(ZtFrankZuulApplication4001.class); public static void main(String[] args) { SpringApplication.run(ZtFrankZuulApplication4001.class, args); logger.info("***************************ZtFrankZuulApplication4001启动成功***************************"); } }
第六步 启动项目看4001项目是否注册到eurka了( Zuul是需要注册到Eurka中的);
ok可以!
第七步:再准备两个服务,8002 和7001 服务,我们以feign的方式实现8002服务调用4001网关服务,再由网关服务转发请求到7001服务的接口(7001网关的zuul配置已经配置好了 第三步的 client-a 就是的)
postmen ===》 8002服务(feign) ===》 4001网关服务 ===》 7001服务
第八步 8002服务代码编写;其中feign注解的value值就是网关服务4001 yml文件spring.application.name的值;fallbackFactory 是熔断的的备用方法==》 服务降级
而接口的请求地址就是“/config/zuul” 就是7002接口的请求地址的URL,调用ZuulTestService的controller 就不再这里展示了
@FeignClient(value = "ZT-FRANK-ZUUL-SERVICE-4001",fallbackFactory = HystrixZuulClientServiceConfig.class) public interface ZuulTestService { @RequestMapping(value = "/config/zuul",method = RequestMethod.POST) String zuulTest(@RequestParam("id") String req); }
第九步 7001服务接口的编写
@Controller @RequestMapping("/config") public class Test { private static Logger logger = Logger.getLogger(Test.class); @PostMapping("/zuul") @ResponseBody public String zuulTest(@RequestParam("id") String id){ logger.info("zuul测试方法"+id); return "SUCCESS_UP_ZUUL_7001"; } }
第十步 测试postmen 调用8002服务的接口
好大功告成!当然每个人可能应为版本,环境等其它原因会碰到一些不一样的问题,这里仅仅给大家提供一个参考! 如果对你有帮助的话点个赞吧!!!
Zuul的限流保护:
1,引入限流依赖:
<!--zuul限流保护--> <dependency> <groupId>com.marcosbarbero.cloud</groupId> <artifactId>spring-cloud-zuul-ratelimit</artifactId> <version>2.0.2.RELEASE</version> </dependency>
2,配置文件配置限流规则
#全局配置限流
zuul.ratelimit.enabled=true #开启限流
zuul.ratelimit.default-policy.limit=3
zuul.ratelimit.default-policy.refresh-interval=60 #60s内请求超过3次,服务端就抛出异常,60s后可以恢复正常请求
zuul.ratelimit.default-policy.type=origin
#针对某个服务进行限流
zuul.routes.book-product.path= /config/**
zuul.routes.book-product.serviceId= zt-frank-config-service
#开启限流
zuul.ratelimit.enabled=true
#60s内请求超过3次,服务端就抛出异常,60s后可以恢复正常请求
zuul.ratelimit.policies.book-product.limit=3
zuul.ratelimit.policies.book-product.refresh-interval=60
#针对某个IP进行限流,不影响其他IP
zuul.ratelimit.policies.book-product.type=origin
本文地址:https://blog.csdn.net/qq_47200599/article/details/108038106