当前位置: 首页 > news >正文

rabbitmq学习记录

同步和异步

(1)同步(按照流程一步一步做)使用openfengin传统的交互

  • 响应时间长,需要将每一步的时间加起来。
  • 如果一个环境出错了,整个就报错了。
  • 并发压力大,前边的步骤有多大的并发量,后续就需要承担多大的并发量。

(2)异步(微服务A无需等待微服务B,之间返回,微服务B可以等他空闲的时候来消费)

  • 响应时间相对更短,无需等待服务B执行完成就返回响应。
  • 可以通过调节参数,减少后续服务的并发量。

削峰填谷:把高峰期的任务转移到低谷期执行。

qps:kafka>rocketmq>rabbitmq>activemq

rabbitmq有可靠的消息确认机制,并且吞吐量还行10w左右。

基础

消息发送端:生产者 消息消费端:消费者

TCP连接(三握四挥)

为了连接复用,建立了channel。

broker示例:搭建一个rabbitmq就叫一个broker,broker分成很多个虚拟机,

1.流程

生产者---------》channel---------》exchange:交换机(中转消息)--------》queue:队列(暂存消息)---------》channel-----------》消费者

2.交换机怎么知道把消息存放在那个队列中?

交换机通过binding队列

5672客户端交互 15672图形化界面交互

3.rabbitmq的使用模式

默认的交换机:

(1)简单工作队列模式:生产者–(队列)----消费者

(2)工作队列:生产者—默认交换机----(队列)----多个消费者(轮询竞争)

(3)发布订阅模式:生产者----fanout类型交换机-----多个队列-----指定消费者监听

fanout交换机,广播,将消息发布到多个队列。多个消费端对于队列的关系是竞争关系。路由键是空。

交换机类型:fanout广播、diret定向、topic通配符

(4)路由模式:生产者----direct交换机-----使用多个不同的ronuting key绑定队列-----多个消费者

交换消息的时候,指定交换机、路由键。channel和队列绑定,指定路由键。

(5)主题模式:生产者----topic交换机-----使用多个不同的ronuting key绑定队列-----多个消费者

在路由模式的基础上,使用通配符匹配。

使用

可靠性

故障:消息没有存放在消息队列,保存在队列(内存)服务器宕机丢失,消息没有消费成功。

1.消息没有发送到消息队列

解决

在生产者端进行确认,如果失败就重试。

(1)生产者端交换机和队列的确认机制:配置文件开启确认机制+配置类对mq模板增强。

(2)备份交换机制:目标交换器故障,备份交换机可以执行目标交换机的业务,或者做日志通知运维人员故障。在创建交换器的时候,可视化界面可以指定备份交换机(需要使用fanout类型)。

2.消息队列服务器宕机,内存数据丢失。

将消息持久化,默认是持久化的

3.消费端宕机或者消息没有消费成功

消费成功,消费端给mq返回ACK信息,消息队列删除该消息。

消费失败,消费端给mq返回NACK信息,重试(消费端的接口支持幂等性)。

配置手动确认返回ack通知。

削峰填谷

yml配置prefetch参数(每次取出的消息数量)

死信

消费者拒收消息+requeue=false(不把消息放到原目标队列)

消息队列溢出:消息放满了还放

消息超时(rabbitmq服务器会自动删除过期的消息,可以在创建队列时指定该队列存放消息的过期时间,也可以对消息指定过期时间。)

解决:

丢弃、入库、监听进入死信队列:消费者监听死信队列,做日志报警、人工干预。

延迟队列

消息超时时间+死信队列:某一个消息队列不监听,设置一个超时时间。超时之后进入死信队列,被消费者捕获到。

事务消息

当生产者代码出现错误的时候发送消息就会回滚,注解@RollBack(ture)。默认开启回滚事务。

http://www.lryc.cn/news/418456.html

相关文章:

  • MySQL数据库基础:约束
  • Java设计模式和AOP编程
  • 【扒代码】data.py
  • 【时时三省】unity test 测试框架 介绍(适用于C语言进行测试的)
  • 那些你应该掌握的linux命令
  • 系统出现高CPU可能风险因素整理
  • 前端技术 -- 动画效果之GSAP作用与使用示例
  • C口一拖二数据线:解锁数字生活的便捷新篇章LDR6020
  • CH07_数据绑定
  • 24.python基础(8.8)
  • 【论文阅读】MobileNetV4 - Universal Models for the Mobile Ecosystem
  • 大模型日报 2024-08-07
  • 区块链ddos防护怎么做
  • 在Linux中认识pthread库
  • LVS 负载均衡
  • 在Excel中启用宏 (~ ̄▽ ̄)~
  • 连接投影仪/显示器只能扩展不能复制的解决方案
  • 数据库基础知识
  • java JVM 锁消除
  • 基于 Java Supplier与Predicate 封装自动重试机制通用接口
  • Java面试题(基础篇)②
  • 【docker快捷部署系列二】用docker-compose快速配置多个容器,docker部署Springboot+Vue项目和mysql数据库
  • Java新手指南:从菜鸟到编程大师的趣味之路-类和对象
  • 计算机毕业设计选题推荐-房屋租赁系统-Java/Python项目实战
  • LeetCode 3131.找出与数组相加的整数 I:最小值之差(多语言一行版)
  • Win32注册表操作
  • 白骑士的PyCharm教学高级篇 3.3 Web开发支持
  • SpringAOP-底层实现源码解析
  • 【C语言初阶】C语言操作符全攻略:提升编程效率的关键步骤
  • 2007-2023年上市公司金融化程度测算数据(含原始数据+计算代码+计算结果)