Springcloud系列(五)简单上手Zuul

本文详细介绍了Spring Cloud Zuul的使用,包括基本的搭建、负载均衡配置以及相关YML配置。通过示例展示了如何在Zuul中实现路由、负载均衡,并利用 Ribbon 进行服务间调用。同时,文章还探讨了Sleuth和Zipkin在链路追踪中的应用,帮助理解微服务架构中请求的跟踪和性能监控。

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

5. zuul

zuul过滤器

https://blog.youkuaiyun.com/u011066470/article/details/106735691

zuul搭建

1. 基本搭建

  • 创建新模块zuul

  • 导包

    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
    		</dependency>
    
  • 在启动器上添加@EnnableZuulProxy

  • yml配置

    server:
      port: 91
    eureka:
      client:
        service-url:
          defaultZone: http://eureka-server:8888/eureka
    spring:
      application:
        name: zuul
    
  • zuul的访问lujing

    ip:port/spring.application.name/访问方法

    如: localhost:91/user-consumer/alive

2. 负载均衡

启动2个user-consumer,2个user-provider

user-consumer:

​ controller层

	@Autowired
    RestService restService;
	@Value("${server.port}")
    String zuulport;
    @RequestMapping("/zuulport")
    public String zuulport(){
        return "consumer: "+zuulport+"   provider: " + restService.restport();
    }

​ restService:

@Service
public class RestService {
    @Autowired
    RestTemplate restTemplate;

    @Autowired
    LoadBalancerClient lb;
    
    @HystrixCommand(defaultFallback = "back")
    public String restport() {
        ServiceInstance instance = lb.choose("user-provider");
        return restTemplate.getForObject("http://"+instance.getHost()+":" + instance.getPort() + "/port", String.class);
    }

    public String back() {
        return "RestService --  back";
    }
}

user-provider:

controller:

@RestController
public class FeignRibbonController {
    @Value("${server.port}")
    String port;

    @GetMapping("/port")
    public String port() {
        return "端口:" + port;
    }
}

zuul:

通过yml配置均衡策略

# 指定spring.applicaiton.name
user-consumer:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

3. zuul相关的yml配置

路由端点

调试的时候,看网关请求的地址,以及 映射是否正确。网关请求有误时,可以通过此处排查错误。

需导入actuator包

<!-- 上报节点信息 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

配置

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
management.endpoint.health.enabled=true
management.endpoint.routes.enabled=true

忽略微服务

配置

zuul.ignored-services=user-provider

前缀

zuul.prefix=/api/v1

带上前缀请求

zuul.strip-prefix=false

跳转具体地址

通过ip:port/xx访问

zuul:
  route:
	xx:
      path: /xx/**
      url: http://mashibing.com

链路追踪

Sleuth单独

  1. pom

    每个需要监控的系统

<!-- 引入sleuth依赖 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-sleuth</artifactId>
		</dependency>

测试点:

  1. 启动eureka,consumer,service
  2. 访问一次。看日志结果。
 [api-driver,1a409c98e7a3cdbf,1a409c98e7a3cdbf,true] 
 
 [服务名称,traceId(一条请求调用链中 唯一ID),spanID(基本的工作单元,获取数据等),是否让zipkin收集和展示此信息]

看下游
[service-sms,1a409c98e7a3cdbf,b3d93470b5cf8434,true]

traceId, 是一样的。

服务名必须得写。

zipkin

上面拍错看日志,很原始。刀耕火种,加入利器 zipkin。

zipkin是twitter开源的分布式跟踪系统。

原理收集系统的时序数据,从而追踪微服务架构中系统延时等问题。还有一个友好的界面。

由4个部分组成:

Collector、Storage、Restful API、Web UI组成

采集器,存储器,接口,UI。

原理:

sleuth收集跟踪信息通过http请求发送给zipkin server,zipkin将跟踪信息存储,以及提供RESTful API接口,zipkin ui通过调用api进行数据展示。

默认内存存储,可以用mysql,ES等存储。

操作步骤:

  1. 每个需要监听的服务的pom中添加。
<!-- zipkin -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-zipkin</artifactId>
		</dependency>
  1. 每个需要监听的服务yml中
spring:
  #zipkin
  zipkin:
    base-url: http://localhost:9411/
    #采样比例1
  sleuth:
    sampler:
      rate: 1  
  1. 启动zipkin。
https://zipkin.io
java -jar zipkin.jar

通过http://localhost:9411/访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值