欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

(springCloud-8 Zuul网关路由的基本配置feign实现接口调用)

程序员文章站 2023-04-03 18:38:21
Zuul的作用统一将外部请求转发到具体的微服务实列上面,是实现访问的统一路径;如何搭建一个Zuul网关服务?第一步 准备一个服务 zt-frank-zuul-service-4001;第二步 引入zuul的依赖org.springframework.cloudspring-cloud-starter-netf...

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中的
(springCloud-8 Zuul网关路由的基本配置feign实现接口调用)
第五步:主启动类上面添加注解 @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中的);
(springCloud-8 Zuul网关路由的基本配置feign实现接口调用)
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服务的接口

(springCloud-8 Zuul网关路由的基本配置feign实现接口调用)
好大功告成!当然每个人可能应为版本,环境等其它原因会碰到一些不一样的问题,这里仅仅给大家提供一个参考! 如果对你有帮助的话点个赞吧!!!

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