RabbitMQ 知识总结与回顾 - 目录
首先,确保你的Spring Boot项目中已经添加了RabbitMQ的依赖。如果你使用Maven,可以在pom.xml
文件中添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
19.2 配置RabbitMQ连接信息
在application.properties
或application.yml
中配置RabbitMQ连接信息:
spring.rabbitmq.addresses=your_rabbitmq_server_address
spring.rabbitmq.username=your_username
spring.rabbitmq.password=your_password
spring.rabbitmq.virtual-host=your_virtual_host
19.3 定义死信队列和延迟队列
其实没有专门的queue类型是死信队列,都是普通的queue类型,只是在普通的queue中设置了x-dead-letter-exchange,然后指定另一个队列来接收这个队列超时未消费的消息,接收的那个队列就称作死信队列,这个设置了超时的队列,可以暂且叫它延迟队列吧。死信队列(DLQ)是用于存储无法被正常消费的消息。可以创建一个普通的队列作为延迟队列,然后配置其TTL(生存时间)和死信交换机,使得当消息在延迟队列中生存时间超过TTL后,消息会被发送到死信队列。
@Bean
public Queue delayQueue() {
Map<String, Object> arguments = new HashMap<>();
arguments.put("x-dead-letter-exchange", "deadLetterExchange");
arguments.put("x-dead-letter-routing-key", "deadLetterRoutingKey");
arguments.put("x-message-ttl", 5000); // 设置消息的TTL为5000毫秒
return new Queue("delayQueue", true, false, false, arguments);
}
@Bean
public Queue deadLetterQueue() {
return new Queue("deadLetterQueue", true, false, false);
}
@Bean
public Exchange deadLetterExchange() {
return new DirectExchange("deadLetterExchange", true, false);
}
19.4绑定死信队列
将死信队列绑定到死信交换机,并指定路由键:
@Bean
public Binding deadLetterBinding(Queue deadLetterQueue, Exchange deadLetterExchange) {
return BindingBuilder.bind(deadLetterQueue).to(deadLetterExchange).with("deadLetterRoutingKey");
}
19.5 发送消息到延迟队列
发送消息到delayQueue
,消息将被存储直到TTL过期:
@Autowired
private RabbitTemplate rabbitTemplate;
public void sendDelayedMessage(String message) {
rabbitTemplate.convertAndSend("delayQueue", message);
}
19.6 消费死信队列中的消息
创建一个消费者监听死信队列,以处理过期的消息:
@Component
public class DeadLetterConsumer {
@RabbitListener(queues = "deadLetterQueue")
public void receiveDeadLetter(String message) {
// 处理死信消息
System.out.println("Received dead letter message: " + message);
}
}
通过以上步骤,在Spring Boot应用中整合RabbitMQ,并通过死信队列特性实现延迟队列的效果。消息在延迟队列中超过预设的TTL后,将自动成为死信,并被发送到配置的死信队列中,从而实现了延迟处理消息的需求。
个人感觉RabbitMQ比RocketMQ和Kafka要简单,而且管理起来也方便,而且RabbitMQ性能也不错,而且功能也能满足绝大部分企业项目要求,可以作为首选。
推荐阅读
-
RabbitMQ 知识总结与回顾 - 目录
-
色彩原理与配色知识点回顾总结
-
回顾总结2016年,展望新年小目标--思考与启示
-
提问回顾与个人总结
-
准备期末JavaScript项目作品的总结与回顾
-
面向对象编程:第三阶段知识点回顾与总结
-
探讨JPDA架构系列的第22篇:总结与回顾
-
前端搭建指南:调试本地开发环境的实用技巧 - 在CLI脚手架项目里,别忘了添加库文件及其版本依赖 1. 实时联动与修改: a) 首先确保在当前CLI脚手架项目的`package.json`依赖中加入所用库文件及其正确版本。 b) 通过npm link在本地创建硬连接,使得库与项目能实时修改、同步。运行如下命令: ``` $ cd your-lib-dir $ npm link $ cd your-cli-dir $ npm link your-lib ``` 2. 模拟部署环境: 当需测试线上环境时,解除本地软链接。回到库文件目录并执行: ``` $ cd your-lib-dir $ npm unlink ``` 同样,在CLI项目目录执行: ``` $ cd your-cli-dir $ npm uninstall your-lib --save ``` 注意此时可能会出现因缺少库文件依赖导致的错误,但可暂且忽略,这样能避免将来遗漏或重复安装的问题。 3. 发布后的操作: 如果库已上线,可先清空CLI项目的`node_modules`目录(`rm -rf node_modules`),然后重新安装所有依赖: ``` $ npm install ``` 通过以上步骤,您就能顺畅地调试和部署您的脚手架项目了。 总结 `link` & `unlink` 命令的运用: 1. `npm link`:在本地创建硬连接,便于实时协作与同步。 2. `npm unlink`:模拟线上环境并解除软链接,为正式部署做准备。
-
南邮OJ Web任务大揭秘:层层挑战剖析 1. 挑战一:迷宫般的目录探索 题目作者似乎穷举了所有可能的目录组合,最终在404.php中的