
RabbitMQ学习笔记
文章平均质量分 63
令人作呕的溏心蛋
人生何处不青山
展开
-
Spring Boot中使用RabbitMQ 生产消息和消费消息
RabbitMQ 中的交换机(Exchange)是消息路由的核心组件。它负责接收来自生产者发送的消息,并根据特定的路由规则将这些消息传递给一个或多个队列(Queue)。交换机的主要功能和类型。在扇出交换机中,可以将路由键设置为空字符串 “”,因为扇出交换机会将消息发送到所有绑定的队列,而不需要考虑路由键的具体值。convertAndSend(交换机,路由键也就是队列,你想传递的参数)交换机根据配置的路由规则和队列的绑定关系,将消息路由到相应的队列。消费者从队列中获取消息进行处理。生产者发送消息到交换机。原创 2024-10-10 15:00:02 · 961 阅读 · 0 评论 -
消息队列中Kafka、RabbitMQ、RocketMQ三者的区别本质在哪里?什么场景用哪个?三者优缺点?
在选择使用哪个消息队列系统时,需要根据实际业务场景、数据规模、系统架构等因素综合考虑。如果需要处理大量数据并且需要高性能、高可靠性的消息传输,则可以选择。RabbitMQ 是一个基于 AMQP 协议的消息队列系统,它采用了消息队列模式,并支持消息的持久化和多种路由方式。RocketMQ 是一个开源的分布式消息队列系统,它采用了分布式事务和消息存储等特性,支持多种语言的客户端。Kafka 是一个高吞吐量的分布式发布/订阅消息系统,它采用了发布/订阅模式,并将消息存储在磁盘上。原创 2023-04-15 12:21:40 · 883 阅读 · 0 评论 -
SpringBoot + RabbitMQ从延时队列中删除指定的值【RabbitMQ中的basicAck和basicNack的区别以及basicReject又是什么?】
业务需求是,就是我本来是有一个order-queue队列绑定到了死信队列交换机order-dead-direct-exchange上,然后我的业务是,现在有一个用户下单但是没有付款,order-queue队列写入该条信息并计时24小时后如果用户还是未付款状态则移除到死信队列order-dead-queue中。问题来了,如果在这个24小时内,用户取消订单,这时候就要从order-queue队列中移除该条信息。怎么操作呢?原创 2023-04-15 00:24:15 · 4647 阅读 · 10 评论 -
SpringBoot + RabbitMQ 死信队列中出现Execution of Rabbit message listener failed.的错误解决
如果消息体的序列化格式不正确或者监听器的反序列化配置有误,就可能导致消息无法正确反序列化,从而抛出异常。可以检查消息的序列化格式和监听器的反序列化配置是否正确,以及确保监听器的处理方法能够正确处理反序列化异常。如果在消息处理的过程中发生了业务异常,比如空指针异常或者数组越界异常等,都可能导致消息监听器抛出异常。如果RabbitMQ连接异常,也会导致消息监听器无法正确消费消息。其实最有可能出错的地方就是在你的业务中,业务中可能涉及一些对数据库增删改查操作,一旦业务出现异常,比如空指针异常或者数组越界异常等。原创 2023-04-13 17:00:59 · 2539 阅读 · 0 评论 -
SpringBoot项目中遇到的订单支付超时未支付关闭订单的解决方案(RabbitMQ生产者消费者之间的使用示例)
不会占用应用服务器的资源、应用的宕机不会对Redis产生影响、Redis过期时间准确度高。:随时能从队列里面移除实时取消的订单、不会占用应用服务器的资源、异步化处理。:订单量过大的时候查询和修改数据库压力大、服务器内存消耗大、IO瓶颈。:必须要用户查询该条订单信息的时候才会触发。:订单量过大非常消耗Redis服务器资源。:实现简单、适用于小项目、数据量比较少。:需要引入消息中间件。原创 2023-04-12 15:42:13 · 2394 阅读 · 0 评论 -
SpringBoot中WebSocket使用@Autowired注入出现空指针异常java.lang.NullPointerException: null
产生空指针的主要原因由于Spring管理的对象都是单例的(singleton),和 WebSocket(多对象)相冲突。原创 2023-04-06 15:06:34 · 1100 阅读 · 0 评论 -
宿主机无法访问VMware虚拟机中的Docker启动的RabbitMQ的15672端口
我使用的是虚拟机Centos7系统里的Docker,Docker中运行了RabbitMQ,现在是虚拟机的宿主机去访问Docker中的RabbitMQ。原创 2023-03-22 14:31:43 · 827 阅读 · 2 评论 -
Docker运行RabbitMQ出现driver failed programming external connectivity on endpoint myrabbit xxx iptables
意思就是容器和物理机的通信是通过内核转发实现的,具体体现为iptables里添加的nat规则。之前没有安装iptables直接搭docker也会在iptables生成关于docker的nat规则,因为系统自带了iptables,只不过没有以服务的方式启动。重新安装iptables会覆盖掉之前的规则,导致docker运行报错。只需要重启一下docker就会重新生成iptables规则了。当我们停止或删除上一个rabbitmq容器的时候,重新跑一下,突然出现了报错。这时候你会发现,居然运行成功了。原创 2023-03-22 14:26:41 · 751 阅读 · 0 评论