RabbitMQ学习 MQ(Message Queue)是什么?作用实现系统间的解耦 原理通过利用高效的消息传递机制进行平台无关的数据交流,并基于数据通信进行分布式系统的集成 模型 生成者:不断向消息队列中生产消息 消费者:不断向队列中获取消息 消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,轻松地实现系统间解耦 因此跨系统通讯时,首选消息队列 消息中间件如何实现, 2021-09-07 消息中间件 > RabbitMQ #RabbitMQ
线程的创建 参考笔记 https://nyimac.gitee.io/2020/06/08/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/ 2021-07-28 Java并发编程 #并发编程 #多线程
RabbitMQ死信队列、延时队列 死信队列DLX 全称Dead-Letter-Exchange,称之为死信交换器, 当消息变成一个死信之后,如果这个消息所在的队列存在x-dead-letter-exchange参数, 那么它会被发送到x-dead-letter-exchange对应值的交换器上,这个交换器就称之为死信交换器, 与这个死信交换器绑定的队列就是死信队列。 如下情况会被加入到死信队列中 消息被消费方拒绝,使用 chan 2021-07-12 消息中间件 > RabbitMQ #RabbitMQ
RabbitMQ消息事务与确认机制 参考文章:https://www.jianshu.com/p/63ed636c773d 事务机制基于 AMQP 实现了事务机制,类似于MySQL的事务 RabbitMQ提供了三个方法对消息发送进行事务管理: txSelect():用于将通道 Channel 开启事务模式,服务端会返回Tx.Select-OK txCommit():用于提交事务 txRollback():用于回滚事务 使用格 2021-06-01 消息中间件 > RabbitMQ #RabbitMQ
并发与并行 概念并发是一个CPU在不同的时间去不同线程中执行指令。 并行是多个CPU同时处理不同的线程。 引用 Rob Pike 的一段描述: 并发(concurrent)是同一时间应对(dealing with)多件事情的能力 并行(parallel)是同一时间动手做(doing)多件事情的能力 应用异步调用以调用方角度来讲,如果 需要等待结果返回,才能继续运行就是同步 不需要等待结果返回,就能继续运 2021-05-12 计算机基础 > 操作系统 #计算机基础 #操作系统
进程与线程的区别 进程程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。 在指令运行过程中还需要用到磁盘、网络等设备。 进程就是用来加载指令、管理内存、管理 IO 的。 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。 进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器 等),也有的程序只能启动一个实例进 2021-04-24 计算机基础 > 操作系统 #操作系统 #进程 #线程
RabbitMQ消息幂等性问题 什么是幂等性在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同 HTTP方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用。幂等性属于语义范畴,正如编译器只能帮助检查语法错误一样,HTTP规范也没有办法通过消息格式等语法手段来定义它。 简之:一个请求,不管重复来多少次,结果是不会改变的。 消费者在消费 MQ中的消息时,MQ 已把消息发送给消费者,消费者在给 MQ 2021-04-10 消息中间件 > RabbitMQ #RabbitMQ
RabbitMQ补偿机制与@RabbitListener注解原理 补偿机制RabbitMQ 默认情况下,如果消费者程序出现异常的情况下,会自动实现补偿(重试)机制 即队列服务器发送补偿请求 @RabbitListener原理@RabbitListener底层使用 AOP 进行拦截 如果程序没有抛出异常,则会自动提交事务 如果程序捕捉到异常信息,会自动实现补偿机制,该消息会缓存到 RabbitMQ服务端中,一直重试到不跑出异常为止 补偿机制一直重复显然是会占用 2021-04-09 消息中间件 > RabbitMQ #RabbitMQ
RabbitMQ实现分布式事务 原理采用最终一致性原理 也就是说过程中可能会产生不一致,但是最终会保持一致 要素RabbitMQ解决分布式事务需要保证以下三要素 确认生产者一定要将数据发送到 MQ服务器中 采用 MQ 消息确认机制 MQ消费者消息能够正确消费消息 采用手动 ACK 模式,同时也要注意重试幂等性问题 保证第一个事务先执行 采用补偿机制,创建一个消费者进行监听第一个事务,如果第一个事务没有执行成功,进行补偿 2021-04-05 消息中间件 > RabbitMQ #RabbitMQ
线程的生命周期 线程的生命周期包含5个阶段,包括:新建、就绪、运行、阻塞、销毁。 新建:就是刚使用new()方法,new出来的线程; 就绪:就是调用的线程的start()方法后,这时候线程处于等待CPU分配资源阶段,谁先抢的CPU资源,谁开始执行; 运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run()方法定义了线程的操作和功能; 阻塞:在运行状态的时候,可能因为某些原因导致运行状态的线程变成了 2021-02-03 JVM #JVM