Dubbo
DubboService
DubboReference
hystrix
com.netflix.hystrix hystrix-core 1.5.18import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandGroupKey;
public class MyHystrixCommand extends HystrixCommand<String> {
private final String name;
public MyHystrixCommand(String name) {
super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));
this.name = name;
}
@Override
protected String run() throws Exception {
// 模拟一个可能失败的服务调用
if ("failure".equals(name)) {
throw new RuntimeException("Service failed!");
}
return "Hello " + name + "!";
}
@Override
protected String getFallback() {
// 当服务调用失败或断路器打开时,返回备用响应
return "Fallback response: Service is unavailable.";
}
public static void main(String[] args) {
// 正常情况下的调用
String result1 = new MyHystrixCommand("World").execute();
System.out.println(result1);
// 模拟失败情况
String result2 = new MyHystrixCommand("failure").execute();
System.out.println(result2);
}
}
Sentinel
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
我们可以使用 @SentinelResource 注解来定义资源,并指定熔断逻辑。
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello/{name}")
@SentinelResource(value = "hello", fallback = "fallbackHandler")
public String hello(@PathVariable String name) {
if ("failure".equals(name)) {
throw new RuntimeException("Service failed!");
}
return "Hello " + name + "!";
}
// 熔断后的备用方法
public String fallbackHandler(String name, Throwable e) {
return "Fallback response: Service is unavailable.";
}
}
RabbitMQ 是一个功能强大的消息队列中间件,支持多种消息模型(Message Models),每种模型适用于不同的业务场景。以下是 RabbitMQ 的主要消息模型及其特点:
- 简单模式(Simple Mode)
特点:
最基础的消息模型。
一个生产者发送消息到队列,一个消费者从队列中接收消息。
消息只能被一个消费者处理。
工作流程:
生产者将消息发送到队列。
消费者监听队列并消费消息。
使用场景:
单一消费者处理任务的场景。
示例:日志记录、简单的任务分发。
示例图:
1
Producer ---> Queue ---> Consumer
2. 工作队列模式(Work Queues / Competing Consumers Pattern)
特点:
多个消费者监听同一个队列。
队列中的消息会被多个消费者竞争消费,每个消息只会被一个消费者处理。
适合实现负载均衡。
工作流程:
生产者将消息发送到队列。
多个消费者监听同一个队列,按照轮询的方式消费消息。
使用场景:
高并发的任务分发,例如处理大量订单或任务。
需要分布式处理的场景。
示例图:
1
2
3
Producer ---> Queue ---> Consumer1
---> Consumer2
---> Consumer3
3. 发布/订阅模式(Publish/Subscribe)
特点:
消息通过交换机(Exchange)广播到多个队列。
每个队列可以有独立的消费者。
所有绑定到交换机的队列都会接收到消息的副本。
核心组件:
Fanout Exchange :广播消息到所有绑定的队列。
Queue :每个消费者有自己的队列。
工作流程:
生产者将消息发送到 Fanout 类型的交换机。
交换机将消息广播到所有绑定的队列。
每个队列的消费者独立处理消息。
使用场景:
广播通知,例如系统日志、实时更新等。
消息需要被多个消费者同时处理的场景。
示例图:
1
2
3
Producer ---> Fanout Exchange ---> Queue1 ---> Consumer1
---> Queue2 ---> Consumer2
---> Queue3 ---> Consumer3
4. 路由模式(Routing)
特点:
消息通过交换机根据路由键(Routing Key)分发到特定的队列。
每个队列绑定到交换机时指定一个或多个路由键。
只有匹配路由键的队列会接收到消息。
核心组件:
Direct Exchange :根据路由键精确匹配队列。
Routing Key :生产者和队列之间的匹配条件。
工作流程:
生产者将消息发送到 Direct 类型的交换机,并指定路由键。
交换机根据路由键将消息分发到匹配的队列。
每个队列的消费者独立处理消息。
使用场景:
需要根据不同条件处理消息的场景。
示例:根据日志级别(info、error)分发到不同的队列。
示例图:
1
2
Producer ---> Direct Exchange ---> Queue1 (Routing Key: "info") ---> Consumer1
---> Queue2 (Routing Key: "error") ---> Consumer2
5. 主题模式(Topics)
特点:
消息通过交换机根据通配符匹配的路由键分发到队列。
支持模糊匹配,灵活性更高。
路由键支持 * 和 # 两种通配符:
*:匹配一个单词。
#:匹配零个或多个单词。
核心组件:
Topic Exchange :根据通配符匹配队列。
Routing Key :支持通配符的路由键。
工作流程:
生产者将消息发送到 Topic 类型的交换机,并指定路由键。
交换机根据路由键的通配符规则将消息分发到匹配的队列。
每个队列的消费者独立处理消息。
使用场景:
需要灵活路由策略的场景。
示例:根据用户行为(如 user.login、user.logout)分发到不同队列。
示例图:
1
2
Producer ---> Topic Exchange ---> Queue1 (Routing Key: "*.login") ---> Consumer1
---> Queue2 (Routing Key: "user.#") ---> Consumer2
6. RPC 模式(Remote Procedure Call)
特点:
实现远程过程调用(RPC)的功能。
客户端发送请求消息,服务端处理后返回响应消息。
RabbitMQ 提供了 reply-to 和 correlation-id 属性来支持 RPC。
工作流程:
客户端发送请求消息到队列,并指定 reply-to(回调队列)和 correlation-id。
服务端从队列中获取请求消息并处理。
服务端将处理结果发送到 reply-to 指定的队列。
客户端从回调队列中获取响应消息。
使用场景:
需要同步调用远程服务的场景。
示例:微服务之间的同步通信。
示例图:
1
2
Client ---> Request Queue ---> Server
<--- Reply Queue <---
7. 延迟队列模式(Delayed Message)
特点:
消息在指定的延迟时间后才会被消费者消费。
RabbitMQ 本身不直接支持延迟队列,但可以通过插件(如 rabbitmq_delayed_message_exchange)实现。
工作流程:
生产者将消息发送到延迟交换机,并指定延迟时间。
消息在延迟时间到达后进入队列。
消费者从队列中消费消息。
使用场景:
需要定时任务或延迟处理的场景。
示例:订单超时未支付自动取消。
示例图:
1
Producer ---> Delayed Exchange ---> Queue ---> Consumer
总结对比
简单模式
单生产者单消费者
单一任务处理
工作队列模式
多消费者竞争消费
高并发任务分发
发布/订阅模式
消息广播到多个消费者
根据你的技能点,我将逐一为你简单解释每个技能点的核心内容和实际意义:
1. JavaSE 基础与编程能力
- JavaSE 是 Java 的核心基础,包括面向对象编程(OOP)、数据结构、多线程、集合框架等。
- 数据结构:如数组、链表、栈、队列等,用于高效处理逻辑问题。
- 多线程与并发:掌握如何在多任务环境下保证线程安全,使用锁、线程池等工具提升性能。
- 反射与注解:通过反射动态操作类和方法;自定义注解实现代码的扩展性和灵活性。
- 泛型:增强代码的类型安全性和复用性。
2. Spring 全家桶
- Spring:轻量级框架,提供依赖注入(DI)和控制反转(IoC),简化开发。
- Spring MVC:用于构建 Web 应用,处理请求和响应。
- Spring Boot:快速搭建项目,内置 Tomcat 等容器,开箱即用。
- Spring Security:实现用户认证与授权,支持 JWT 协议(如单点登录 SSO)。
- 核心源码阅读:理解框架内部机制,优化性能并解决复杂问题。
3. Spring Cloud Alibaba 微服务
- Nacos:作为注册中心,管理微服务实例的发现与配置。
- LoadBalancer:实现客户端负载均衡。
- Dubbo:高性能 RPC 框架,用于远程服务调用。
- Sentinel:限流、熔断、降级保护微服务。
- Gateway:API 网关,统一入口,路由分发。
- 线上问题定位:快速排查生产环境中的问题。
4. 数据库与 ORM 框架
- MySQL:关系型数据库,支持事务、索引、主从复制等。
- MyBatis/MyBatis-Plus:ORM 框架,简化 SQL 操作。
- SQL 优化:通过索引、分页、查询优化提升性能。
- 上线经验:确保数据库设计合理,支持高并发场景。
5. Redis 缓存与分布式应用
- Redis:高性能键值存储,支持多种数据类型(字符串、哈希、列表等)。
- 持久化:RDB 和 AOF 实现数据备份。
- 高可用机制:主从复制、哨兵模式、分片集群。
- 分布式锁:通过 Redisson 实现资源锁定,防止并发冲突。
6. 消息中间件 RabbitMQ
- 消息模型:发布订阅、工作队列、主题模式等。
- 持久化:确保消息不丢失。
- 事务一致性:通过消息确认机制解决分布式事务问题。
- 异步处理:解耦系统模块,提高性能。
- 流量削峰:平滑高峰期请求压力。
7. 单点登录与分布式 Session
- OAuth/JWT:实现用户认证与授权,支持跨平台单点登录。
- 分布式 Session:通过 Redis 或其他方式共享 Session 数据,解决多平台会话问题。
8. 第三方支付对接
- 微信支付/支付宝支付:支持扫码支付、H5 支付、APP 支付等多种支付方式。
- 独立设计:从需求分析到接口对接,完成支付功能开发。
9. Nginx 高并发与负载均衡
- Nginx:高性能 HTTP 服务器,支持反向代理、负载均衡、静态资源加速。
- 日志分析:通过日志排查问题,优化性能。
10. Linux 与 DevOps 工具
- Linux 命令:熟练使用常用命令维护服务器。
- Docker:容器化技术,隔离环境,提升部署效率。
- Jenkins:持续集成/持续交付(CI/CD),实现一键部署。
11. 版本控制与项目管理
- Git:版本管理工具,熟悉 Gitee、GitLab。
- Maven:项目构建工具,管理依赖和构建流程。
- Jenkins 部署:结合 Git 和 Maven,实现自动化部署。
12. 爬虫与数据处理
- Python 爬虫:使用
requests
抓取接口数据,DrissionPage
爬取动态页面。 - Excel 处理:基于
easyExcel
处理百万级数据,进行过滤和重组。
13. Web 前端开发
- WebSocket:实现实时通信。
- 前端框架:熟练使用原生 JS、Bootstrap、jQuery、Vue2/Vue3。
- 小程序开发:基于
uniapp
实现多端开发(App、小程序)。 - ECharts:制作可视化图表。
14. 加密算法与安全
- 加密算法:国密(SM2/SM3/SM4)、RSA、AES、MD5 等。
- CA 数字信封:用于企业与银行间的数据加密传输。
- 政采网与公共资源交易中心:对接政府系统,处理业务交互。
15. AI 工具与创新应用
- ollama:本地部署深度学习模型(如 Deepseek)。
- conda:管理 Python 环境。
- ComfyUI/Stable Diffusion:生成图像与视频,探索 AI 在项目中的创新应用场景。
总结
你的技能覆盖了后端开发、微服务架构、数据库优化、缓存与消息队列、支付对接、前端开发、运维部署、爬虫与数据处理、加密安全以及 AI 应用等多个领域。你具备全栈开发能力,能够独立完成从需求分析到系统设计、开发、部署、上线以及后续维护的全流程工作。这种综合能力使你在复杂项目中能够胜任多个角色,具有很强的竞争力!
广播通知、实时更新
路由模式
根据路由键分发消息
条件化消息处理
主题模式
支持通配符的路由键
灵活路由策略
RPC 模式
远程过程调用
同步通信、服务调用
延迟队列模式
消息延迟后消费
定时任务、延迟处理
RabbitMQ 的消息模型非常灵活,可以根据业务需求选择合适的模型。对于复杂的业务场景,还可以组合使用多种模型,构建高效、可靠的消息通信系统。
数字信封并不需要分发和管理对称秘钥,而是随机产生对称密钥,采用对称密码算法对大批量数据进行加密,并采用非对称密码算法对该对称密钥进行加密;解密时,先用非对称密码算法解密后获得对称秘钥,然后使用对称密码算法解密后获得数据明文。