![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MQ中间件
JAVA体系下使用MQ
小胖学编程
这个作者很懒,什么都没留下…
展开
-
【RabbitMQ-9】@RabbitListener注解生效的源码分析
文章目录1. 读取注解配置1.1 后置处理器的核心方法1.2 读取注解信息2. 创建消费者线程2.1 创建MethodRabbitListenerEndpoint2.2 端点的注册2.3 监听容器的创建2.4 监听容器的启动2.5 总结3. 为什么将SimpleMessageListenerContainer对象加入到Spring容器便可以监听队列?为何配置@RabbitListener注解,对应的方法便可以消费MQ的消息?核心思想:读取注解的配置;根据配置去监听queue的信息(即创建消费者线原创 2020-11-19 16:01:39 · 1375 阅读 · 0 评论 -
RabbitMQ消息确定机制(自动ACK和手动ACK)
文章目录1. 消息确定机制及其配置2. 自动确认和手动确认细节2.1 测试代码配置2.2 自动确认2.3 手动确认2.3.1 常用API2.3.2 代码案例3. 消息重回队列3.1 默认—消息nack后重回队头3.2 解决方案—消息重发送到队尾3.3 如何处理异常消息推荐阅读1. 消息确定机制及其配置RabbitMq消费者的消息确定机制:NONE:无应答,rabbitmq默认consumer正确处理所有请求。AUTO:consumer自动应答,处理成功(注意:此处的成功确认是没有发生异常)发出ac原创 2020-11-06 11:07:26 · 22425 阅读 · 1 评论 -
【RabbitMQ-9】动态上线下线Consumer
若实现动态的上线下线Consumer,那么就不能使用@RabbitListener方式去声明消费者。1. 设计理念代码中只会存在一个监听类(这个类可以为每一个queue新增一个监听对象),动态的上线下线Consumer,本质上是将Queue加监听对象中。通过http通信来只能修改一台机器,但集群所有机器都要增加Consumer,需要使用广播模式通知到每一台机器。2. 功能实现在【RabbitMQ-8】SpringBoot2.x动态的创建Queue、Exchange、VirtualHost、.原创 2020-08-10 14:43:42 · 1896 阅读 · 2 评论 -
【RabbitMQ-8】SpringBoot2.x动态的创建Queue、Exchange、VirtualHost、Binding
1 项目启动时,初始化MQ配置因为项目中可能存在多个MQ的连接,所以舍弃了yaml配置MQ的做法,而是在JAVA代码中声明CachingConnectionFactory连接工厂,去配置RabbitAdmin和RabbitTemplate。import com.tellme.entity.RabbitVirtualHost;import lombok.extern.slf4j.Slf4j;import org.springframework.amqp.rabbit.connection.Cachin原创 2020-08-07 17:37:38 · 1815 阅读 · 1 评论 -
【RabbitMQ-7】使用Redis实现分布式双端列表解决RabbitMq顺序消费
消费端要保证消费的顺序性。多个消息可能来源于一台机器,也可能来源于一个集群的多台机器,也可能来源多个集群。消费者如何去保证消息的有效性?可以借助"双端列表"的数据结构实现消息节点的有效性。场景:消息1到达后,直接进行消费;消息2到达后,在消息2的后继指针域中获取到消息1的key,去redis中进行查询:2.1 若消息1不存在,那么证明消息1未达到,消息2存储到Redis;2.2 若消息1存在且状态是已消费,那么消费者消费消息2,并且查询消息2的后继指针,查询消息3是否存在,若消息3存在,那么原创 2020-08-07 16:05:56 · 494 阅读 · 0 评论 -
【RabbitMQ-6】消费端获取消息(SpringBoot2.0版本)
文章目录1. 消费者ACK的模式1.1 消费者通过推(PUSH)方式获取消息1.1.1 配置RabbitListenerContainerFactory1.1.2 配置@RabbitListener1.1.3 @Payload和@Headers1.1.4 @RabbitListener和 @RabbitHandler1.1.5 序列化方式MessageConverter1.1.6 consumer端的异常处理1.1.7 手动确认-将异常信息放入死信队列1.1.8 保证消息的不丢失1.1.8 保证消息唯一性原创 2020-08-07 15:56:59 · 3096 阅读 · 0 评论 -
【RabbitMQ-5】-SpringBoot2.x 生产者保证消息不丢失(confirm配置)
文章目录1. 生产者不丢失数据1.1 开启事务模式1.2 confirm模式1.2.1 生产者消息丢失的情况1.2.2 生产者消息发送失败(网络异常)1.2.3 生产者消息发送失败(MQ服务器异常)消息的不丢失,在MQ角度考虑,一般有三种途径:生产者不丢数据MQ服务器不丢数据消费者不丢数据其余的方式是根据业务来说的,比如__消息落库__等等,这篇咱们就研究下MQ的机制。1. 生产者不丢失数据1.1 开启事务模式amqp事务仅仅适用于publish和ack,rabbitmq新增了原创 2020-08-07 13:51:02 · 963 阅读 · 2 评论 -
【RabbitMQ-4】拉模式和推模式
文章目录1. rabbitMQ的推模式和拉模式1.1 实时拉(pull)模式1.2. 批量拉取(pull)消息1. rabbitMQ的推模式和拉模式我们知道,消费者有两种方式从消息中间件获取消息:推模式:消息中间件主动将消息推送给消费者拉模式:消费者主动从消息中间件拉取消息推模式:将消息提前推送给消费者,消费者必须设置一个缓冲区缓存这些消息。好处很明显,消费者总是有一堆在内存中待处理的消息,所以效率高。缺点:是缓冲区可能会溢出。实现推模式:推荐的方式是继承DefaultConsumer基类,也可原创 2020-08-07 11:47:28 · 3399 阅读 · 0 评论 -
【RabbitMQ-3】连接池的配置
文章目录1. rabbitmq的connection连接池1.1 问题提出1.1.1 Connection对象管理以及性能1.1.2 Channel对象管理以及性能1.2 Spring AMQP线程池配置1.2.1 ConnectionFactory连接工厂1.2.2 消费发送和接收使用不同的Connectionjava NIO是IO的多路复用,Channel连接是TCP的多路复用。那么他们有什么关系呢?NIO是服务器开启一个线程,在内核中使用select()进行轮询管理一些socket,当socke原创 2020-08-07 11:34:22 · 3329 阅读 · 2 评论 -
【RabbitMQ-2】RabbitMQ的并发参数(concurrency和prefetch)
文章目录1. 环境配置2. prefetch属性3. concurrency属性4. prefetch和concurrency属性推荐阅读1. 环境配置版本信息:JDK:8SpringBoot 2.1.3.RELEASERabbitMQ消费端配置spring: rabbitmq: host: localhost port: 5672 username: guest password: guest listener: simple:#原创 2020-08-07 10:43:22 · 4960 阅读 · 0 评论 -
【RabbitMQ-1】SpringBoot2.x的集成
1. 环境配置环境:JDK8SpringBoot 2.1.3.RELEASE依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>2. 提供者配置配置文件:spring: rabbitmq: ho原创 2020-08-07 10:37:40 · 227 阅读 · 0 评论