RabbitMq(尚硅谷)

RabbitMq

1.RabbitMq异步调用

2.work模型

3.Fanout交换机(广播模式)

4.Diret交换机(直连)

5.Topic交换机(主题交换机,通过路由匹配)

6.Headers交换机(头交换机)

6.生产者重连(Mq挂了,重新连接)

7.生产者确认(给生产者返回成功还是失败,成功返回ACK,失败返回NACK,三种方式,一般选择异步)

8.mq的可靠性-数据持久化(交换机,队列,消息持久化,持久化和临时消息队列,磁盘,内存)

9.Lazy Queue(惰性队列,保留条数2048,.lazy()开启Lazy Queue,正常消息是保存在内存,这个是保存在磁盘)

10.消费者确认机制(三种返回,ack:成功,nack:失败,重新投递,reject:失败拒绝该消息,三种消息确认选择模式,不处理,手动处理,自动模式)

11.消费者失败机制(失败后会不断入队,会无限循环异常)

12.业务幂等性(f(x)=f(f(x)))

13.延迟消息.死信交换机

14.延迟消息.延迟消息插件(通过消息头设置过期时间)

15.延迟消息.取消超时订单(定义延迟消息时间间隔,加起来对于某一个时间如30分钟)

16.RabbitMq集群(提高整体工作性能)

17.镜像队列(默认队列只会在某一个服务器显示,其他集群内的服务器不显示)

18.RabbitMq的高可用负载均衡

19.FederationExchange(联邦交换机,需要下载对应插件,让两个不同地方的服务器保存数据一致)

20.Shovel

Shovel是 RabbitMQ 提供的一个插件,用于在 不同的 RabbitMQ 节点之间(或集群之间)进行消息迁移、复制或转发。与联邦交换机(Federation)类似,它也是跨节点通信的一种方式,但 Shovel 的工作方式和使用场景有所不同。

RabbitMQ 概述

RabbitMQ 是一个实现了高级消息队列协议(AMQP)的消息代理软件,它支持多种消息传递模式,并且可以用于构建可靠、可扩展的分布式系统。


消息队列的作用

  • 解耦:生产者和消费者不需要直接交互。
  • 缓冲:平滑瞬时高峰流量,保护后端服务。
  • 异步通信:提高系统的响应速度。
  • 可靠性:确保消息被正确处理,即使在出现故障的情况下。

生产消费模型

  • 生产者(Producer):创建消息并发送到交换机(Exchange)。
  • 消费者(Consumer):从队列中接收并处理消息。
  • 消息队列(Queue):存储消息直到被消费者处理。

交换机模型

  • Direct Exchange:根据路由键精确匹配。
  • Fanout Exchange:广播消息给所有绑定的队列。
  • Topic Exchange:基于模式匹配的路由键进行分发。
  • Headers Exchange:通过消息头属性匹配。

死信队列(Dead Letter Queue, DLQ)

  • 当消息无法正常消费时(如达到最大重试次数),会被转发到死信队列。
  • 需要在队列或消息上设置 x-dead-letter-exchange 参数指定死信交换机。

延迟队列

  • 使用 TTL(Time To Live)与死信交换机结合实现延迟消息的功能。
  • 消息过期后会自动进入配置好的死信队列,从而实现延迟效果。

消息持久化

  • 设置消息为持久化(deliveryMode=2),即使服务器重启也能保留消息。
  • 同样需要将队列和交换机也设置为持久化。

Java 操作

使用 AMQP 协议与 RabbitMQ 进行交互,可以通过 Java 客户端库(如 amqp-client 或 Spring AMQP)来发送和接收消息。

复制代码

java

深色版本

复制代码
// 发送消息示例
ConnectionFactory factory = new ConnectionFactory();
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();

channel.queueDeclare("hello", true, false, false, null);
String message = "Hello World!";
channel.basicPublish("", "hello", MessageProperties.PERSISTENT_TEXT_PLAIN,
    message.getBytes(StandardCharsets.UTF_8));

集群搭建

  1. 安装 RabbitMQ 节点:在多台机器上安装 RabbitMQ。

  2. 配置 Erlang Cookie:确保所有节点使用相同的 Erlang cookie 文件以允许节点间通信。

  3. 加入集群

    复制代码

    bash

    深色版本

    复制代码
    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl join_cluster rabbit@hostname_of_existing_node
    rabbitmqctl start_app
  4. 镜像队列策略:为了高可用性,可以配置镜像队列策略使队列数据在多个节点之间复制。

相关推荐
西***634720 小时前
从信号零损耗到智能协同:高清混合矩阵全链路技术拆解,分布式可视化系统十大趋势重塑行业
分布式·线性代数·矩阵
Javatutouhouduan20 小时前
我用ChatGPT,给RabbitMQ加了个连接池
java·spring·rabbitmq·消息中间件·后端开发·java程序员·java八股文
或与且与或非1 天前
.net 8压榨rabbitMq性能
rabbitmq·.net·ruby
菜鸡儿齐1 天前
kafka简介
分布式·kafka
周杰伦_Jay1 天前
【实战|旅游知识问答RAG系统全链路解析】从配置到落地(附真实日志数据)
大数据·人工智能·分布式·机器学习·架构·旅游·1024程序员节
深兰科技1 天前
深兰科技入选“2025中国人工智能行业创新力企业百强”
人工智能·科技·百度·kafka·rabbitmq·memcached·深兰科技
兜兜风d'1 天前
RabbitMQ事务机制详解
数据库·spring boot·分布式·rabbitmq·ruby·java-rabbitmq
ifeng09181 天前
HarmonyOS分布式任务调度——跨设备智能任务分配与迁移
分布式·华为·harmonyos
9ilk1 天前
【仿RabbitMQ的发布订阅式消息队列】--- 模块设计与划分
c++·笔记·分布式·后端·中间件·rabbitmq
勇往直前plus1 天前
学习和掌握RabbitMQ及其与springboot的整合实践(篇二)
spring boot·学习·rabbitmq·java-rabbitmq