面试官:李雪(美团资深架构师)
程序员:张伟(31岁,硕士,7年Java开发经验)
面试官:请先做下自我介绍 张伟:我是张伟,之前在XX电商负责过秒杀系统的架构设计,主要用Spring Cloud Gateway做API网关,RabbitMQ处理异步消息,Prometheus做监控...(突然意识到什么)啊,我是不是说了太多技术细节?
面试官:你用Gateway做过哪些具体优化? 张伟:优化啊...就是给接口加了限流规则,比如注册接口设置5000 QPS。不过有一次配置错误,导致整个支付接口被限流,用户投诉特别多...
面试官:RabbitMQ的死信队列怎么用? 张伟:死信队列就是消息过期后自动转到另一个队列。我们之前用它处理订单超时未支付的情况,设置TTL为30分钟,然后关联到死信队列做补偿处理...
面试官:怎么监控微服务的调用链路? 张伟:调用链路监控啊...我们用的是SkyWalking,不过面试官您说的Prometheus,这个我主要用来监控JVM指标,比如GC频率和内存使用率...
面试官:你遇到过消息堆积怎么处理? 张伟:消息堆积的话...就是先看是生产者发太快还是消费者处理太慢。我们之前用RabbitMQ时,发现是消费者线程池配置太小,后来改成动态调整线程数,不过有时候会遇到消息重复消费的问题...
技术解析
Gateway限流配置
# Spring Cloud Gateway限流配置示例
spring:
cloud:
gateway:
routes:
- id: order-service
uri: lb://order-service
predicates:
- Path=/api/order/**
filters:
- StripPrefix=1
- name: RequestRateLimit
args:
rate: 5000
key: remoteAddr
RabbitMQ死信队列配置
{
"queue_name": "order_timeout_queue",
"arguments": {
"x-dead-letter-exchange": "dead_letter_exchange",
"x-message-ttl": 1800000
}
}
Prometheus+Micrometer监控
// 添加Micrometer依赖示例
implementation 'io.micrometer:micrometer-registry-prometheus:1.8.0'
// 配置Prometheus指标暴露端点
@Bean
public MeterRegistryConfig config() {
return new PrometheusMeterRegistryConfig();
}
面试官:今天的面试就到这里,你先回家等通知吧。