RabbitMQ零碎整理,总有一天在你工作中会用到

概念
MQ:消息队列(消息中间件),开源的基于AMQP协议的消息中间件,异步 解耦 削峰
核心作用:1.异步 2.解耦 3.消息通信
RabbitMQ
消息的类型:1.点对点 2.Worker 3.发布/定义(交换器)
四种交换器:
■1.fanout直接转发
■2.direct路由关键字匹配,精确
■3.topic路由关键字匹配,支持模糊(*和#)
■4.header消息头
RabbitMQ保证消息的可靠性(消息丢失)
原因:
有一定的概率会出现消息丢失
比如:1.消息刚从发送者发送到服务器中,发送者宕机了,在发送的一瞬间,服务器网络异常
2.消费者刚从服务器获取数据,还没获取完,服务器宕机了,或者网络延迟了
3.任何一款的MQ都有可能遇到消息丢失的问题,特别是高并发下
发送端:
要考虑的问题:
1.保证消息发送成功
2.保证服务端接收成功
3.要采用应答模式 发送端和服务端的应答模式
4.需要考虑消息补偿机制
解决方案:
1.消息开启本地持久化 — 实现消息的落库的处理
2.实现基于延迟的二次确认机制 — 消息采用2次投递方案,第一次立即执行,第二次间隔执行 采用延迟的模式进行,第二次的投递是为了保证数据的校验。如果存在就不做处理,要是不存在就同步一次
3.RabbitMQ支持消息事务 — 可以采用事务的模式来处理消息是否成功
消费端:
1.保证消息的获取并应答
结合RabbitMQ的消息应答模式 实现消息消费的应答
2.保证消息过重
每一个消息都有唯一ID,每当消费者获取到消息的时候,先检验此消息有没有被消费过,如果没有再继续进行操作。要是之前消费过,那么就不能再次处理!可以结合Redis
RabbitMQ保证消息幂等性(消息重复)
幂等性:用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。
消息重复
MQ有可能会出现一个消息发送多次,导致消息的重复性
可能出现的场景:1.网络抖动 2.网络闪断 3.端点异常 服务端或者发送端或者消费端
消息出现非幂等性,就会导致消息的重复
解决方案:
1.唯一ID+指纹码
唯一ID 可以使用:雪花算法等等 这种分布式唯一ID生成器
指纹码:就是一段密文,加密规则各不相同
常用:时间戳+随机码+唯一ID+业务ID 采用一定加密技术 进行密文生成
2.基于Redis的原子性实现
Redis的原子性,自增啥的都可以,关键Redis支持集群
为消息设置唯一id,生成唯一id可以用雪花算法,实现去重
RabbitMQ延时队列
延时队列:跟普通队列比起来,多了一个延时的作用
死信消息:就是一个消息的TTL(有效期)结束了,但是消息还未处理,这时这个消息就变为了死信消息
死信队列和延迟消息投递
死信消息的条件:1.拒绝 2.过期 3.队列满了
延迟队列:RabbitMQ没有延迟队列,但是我们可以通过死信消息实现延迟消息投递\

RabbitMQ零碎整理,总有一天在你工作中会用到

消息的优先级
默认为5,可以通过设置x-max-priority,
MQ集群:1.默认模式 数据存储在其中某一台机器上,在使用的时候,才会进行同步。
2.镜像模式
项目中的应用场景:1.解耦逻辑 2.数据同步(近乎实时)3.延迟队列

Original: https://www.cnblogs.com/mysweetAngleBaby/p/16582843.html
Author: 一眼万年的星空
Title: RabbitMQ零碎整理,总有一天在你工作中会用到

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621382/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • StringAPI里面的indexOf和subString是怎么样取值和切割的?

    indexOf和subString取值走向图;首先简单介绍这者的作用,具体可以看官方API 1.indexOf的作用: 就是获取某个字符串的其中具体一个字符的位置 2.subStr…

    Java 2023年6月9日
    055
  • arthas监控elasticsearch(7.x)

    arthas介绍 arthas是Alibaba推出的java诊断工具 官方文档 准备 准备docker环境 name port centos_arthas 3658:3658 do…

    Java 2023年6月8日
    085
  • 异步线程中通过 HttpServletRequest#getRequestURI 有时拿到值,有时拿到 null

    由于 HttpServletRequest 不是线程安全的(后知后觉),当主线程完成自己的工作返回response后,相应的 HttpServletRequest 等对象就会被销毁…

    Java 2023年5月30日
    061
  • Redis 分布式锁

    单机架构下,一个进程中的多个线程竞争同一共享资源时,通常使用 JVM 级别的锁即可保证互斥,以对商品下单并扣库存为例: public String deductStock() { …

    Java 2023年6月8日
    064
  • 悬浮的header变透明了

    把 header fixed 在页面的首部,然后滚动的时候, 突然发现background-color没有把content遮住 我以为它变透明了。 实际上是z-index,我勒个去…

    Java 2023年6月7日
    056
  • Vue router-link点击事件不生效

    在学习路由时,想给 贴个代码: index.html 命名视图 <router-link v-on:click=&qu…

    Java 2023年6月13日
    081
  • springboot初始化运行时dataSource报错

    Failed to configure a DataSource: ‘url’ attribute is not specified and no embe…

    Java 2023年6月8日
    070
  • 多态

    同一批事物,它们都是由一个事物泛生得出的(也就是继承),这一批事物我们可以用一个分类去归纳。比如我们生存需要进食,牛肉、猪肉、鸡肉等,当我们处于一个饥饿的状态下,不管什么肉,都会食…

    Java 2023年6月5日
    082
  • java常用书籍下载

    目录 《码出高效:Java开发手册》 《重构改善既有代码设计》 《深入理解Java虚拟机(第二版-带目录)》 《从Paxos到Zookeeper 分布式一致性原理与实践》 《Jav…

    Java 2023年5月29日
    070
  • spring.jackson.default-property-inclusion无效问题 null 设置json不输出

    yml文件配置如下: spring:jackson:default-property-inclusion: non_null123按照网上的说法,password属性为null时j…

    Java 2023年5月30日
    058
  • String类常用的API

    String类常用API总结及注意事项 String类常用的API 字符串内容的比较: 注意: 不能使用 == 去比较两个字符串的内容。原理:比较的是字符串的地址。(如果两个字符串…

    Java 2023年6月6日
    076
  • MongoDB笔记(一)

    MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。 MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系…

    Java 2023年6月8日
    077
  • mybatis #与$区别

    mybatis #与$区别 {}变量解析到SQL有带引号字符串;如查询条件变量 如:select * from user where name = #{name};为:select…

    Java 2023年5月30日
    070
  • jdk 源码

    https://github.com/openjdk-mirror/jdk/tree/jdk8u/jdk8u%2Fmaster 选择下载的源码路径: Original: https…

    Java 2023年5月30日
    0131
  • spring data jpa简单使用—-逐渐完善

    第一步: 导入依赖 org.springframework.boot spring-boot-starter-data-jpa第二步:  配置文件   spring: #数据库 d…

    Java 2023年6月5日
    084
  • CSS速学!!

    padding:内边距 缩写:缩写: padding:值; 上下左右的内边距一样 padding:值1 值2; 值1代表上下内边距,值2代表左右内边距 padding:值1 值2 …

    Java 2023年6月9日
    057
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球