RabbitMQ学习(一):基本概念

news/2024/11/7 23:49:43/

文章目录

    • 1 为什么使用RabbitMQ
    • 2 为什么RabbitMQ这么快
    • 3 AMQP介绍
      • 3.1 AMQP的核心概念
      • 3.2 AMQP分层:
    • 4 RabbitMQ的整体结构
      • 4.1 结构图
      • 4.2 不同的交换机类型
    • 5 相关命令
      • 5.1 服务相关命令
      • 5.2 用户相关命令
      • 5.3 虚拟主机相关命令
      • 5.4 队列相关命令
      • 5.5 集群相关命令
    • 参考

1 为什么使用RabbitMQ

  • RabbitMQ是开源的。
  • RabbitMQ提供了可高的消息投递模式(confirm)、返回模式(return)。
  • RabbitMQ能够完美地整合SpringAMQP,API非常丰富。
  • RabbitMQ的集群模式非常丰富,支持表达式配置,HA模型,进行队列模型。
  • RabbitMQ可靠性高,能保证数据不丢失。

2 为什么RabbitMQ这么快

  • RabbitMQ是使用Erlang开发,而Erlang有着和原生Socket一样的延迟。

3 AMQP介绍

AMQP协议是指高级消息队列协议(Advanced Message Queuing Protocol)。

3.1 AMQP的核心概念

  • Server:或者称为Broker,消息中间件的服务节点,接受客户端的连接,实现AMQP实体服务。
  • Connection:连接,指客户端与服务节点之间的网络连接。
  • Channel:网络信道,Channel是进行消息读写的通信。客户端与服务节点直接可以建立多个Channel,一个Channel便是一个会话任务。
  • Message:消息,客户端和服务节点之间传递的数据。由PropertiesBody组成,Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特性,Body则是消息体内容。
  • Exchange:交换器,生产者将消息发送到Exchange,由Exchange将消息路由到一个或者多个队列中。
  • Biding:Exchange和Queue之间的虚拟连接,指将二者绑定在一起,在绑定时一般会指定一个BindingKey(绑定键)。
  • RoutingKey:路由键,生产者将消息发送给交换机时,会通过RoutingKey来确定该消息的路由规则,即消息流向哪里。
  • Queue:或者成为Message Queue,是消息队列,保存消息并将它们转发给消费者。一个Queue可以被多个消费者订阅。
  • Virtual Host:虚拟地址,用于进行逻辑隔离(就比如一个Mysql,可以分出多个DB,这就是逻辑隔离),最上层的消息路由。一个Virtual Host里面可能包含若干个不同名的Exchange和Queue。

3.2 AMQP分层:

  • Module Layer:位于协议最高层,主要定义了一些提供客户端调用的命令,客户端可以利用这些命令是自己的业务逻辑。可以理解为客户端的API。
  • Session Layer:位于中间层,主要负责将客户端的命令发送给服务器,再将服务器端的应答返回给客户端,主要为客户端与服务端之间的同学提供可靠的同步机制和错误处理。
  • Transport Layer:位于最底层,主要传输而姜汁数据流,提供帧的处理、信道复用、错误检测和数据表示等。

4 RabbitMQ的整体结构

4.1 结构图

RabbitMQ的整体结构
RabbitMQ是遵循AMQP协议的,所以其核心概念与AMQP一致。其中需要注意一下Binding:

  • 在绑定交换器和队列时使用的是BindingKey,在发送消息时使用的是RoutingKey,二者虽然是不同的概念,但是在大部分情况下值都是相同的,尤其是使用direct类型的交换器时,所以可以统称为路由键。
  • 生产者将消息发送给交换器时需要指定一个Routingkey,当BindingKey和RoutingKey相匹配时,消息会被路由到对应的队列中。
  • 在绑定多个队列到同一个交换器时,允许使用相同的BindingKey。
  • 在不同的交换器类型下,BindingKey和RoutingKey的匹配方式也有所不同,可能是完全匹配,也可能是模糊匹配,甚至是无需匹配。

4.2 不同的交换机类型

  • fanout:会无视BindingKey,会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中。
  • direct:将消息路由到BindingKey和RoutingKey完全匹配的队列中。
  • topic:将消息路由到BindingKey和RoutingKey模糊匹配的队列中,注意,这里的模糊是有规则的,比如“ * ”用于匹配一个单词,“ # ”用于匹配多个单词,单词直接是由“ . ”分隔。
  • headers:不依赖于路由键的匹配规则来路由消息,而是根据发送消息的内容中的headers属性来进行匹配。该类型的交换机性能差且不实用,基本上不使用。

5 相关命令

vhostpath:指虚拟主机。

5.1 服务相关命令

  • 启动服务:rabbitmqctl start_app
  • 关闭服务:rabbitmqctl stop_app
  • 查看服务节点状态:rabbitmqctl status
  • 移除所有数据(需关闭服务后执行):rabbitmqctl reset

5.2 用户相关命令

  • 添加用户:rabbitmqctl add_user username password
  • 查看所有用户:rabbitmqctl list_users
  • 删除用户:rabbitmqctl delete_user username
  • 清除用户权限:rabbitmqctl clear_ppermissions -p vhostpath username

5.3 虚拟主机相关命令

  • 查看所有的虚拟主机:rabbitmqctl list_vhosts
  • 创建虚拟主机:rabbitmqctl add_vhost vhostpath
  • 查看虚拟主机上所有的权限:rabbitmqctl list_permissions -p vhostpath
  • 删除虚拟主机:rabbitmqctl delete_vhost vhostpath

5.4 队列相关命令

  • 查看所有的多列信息:rabbitmqctl list_queues
  • 清除队列里的消息:rabbitmqctl -p vhostpath purge_queue blue

5.5 集群相关命令

  • 查看集群状态:rabbitmqctl cluster_status
  • 组成集群命令:rabbitmqctl join_cluster <clusternode> [–ram]    注意:–ram指的是存储模式。
  • 修改集群节点的存储模式:rabbitmqctl change_cluster_node_type disc | ram    disc;注意:指的是磁盘,ram指的是内存。
  • 移除节点:rabbitmqctl forget_cluster_node [–offline]    disc;注意:–offline指的是在服务不启动的情况下移除节点。
  • 修改节点名称:rabbitmqctl rename_cluster_node oldNode1 newNode1 oldNode2 newNode2 …

参考

  1. 电子工业出版社,朱忠华 著, 《RabbitMQ实战指南》

http://www.ppmy.cn/news/768909.html

相关文章

Redis如何备份与恢复数据

文章目录 1 数据持久化1.1 快照1.2 AOF1.3 混合持久化1.4 从节点持久化 1 数据持久化 Redis有自己的持久化机制&#xff0c;以防宕机后内存中的数据丢失。当宕机后&#xff0c;便从磁盘恢复内存数据结构。 1.1 快照 Redis是使用COW机制实现快照持久化。 第一步&#xff1a;…

RabbitMQ学习(三):高级特性

文章目录 1 生产端如何可靠地投递消息1.1 消息落库打标1.2 消息延迟投递&#xff0c;通过二次确认回调检查。 2 生产者确认&#xff08;Confirm消息确认机制&#xff09;3 消息的幂等性保障3.1 唯一ID 指纹码 机制3.2 利用Redis的原子性实现 4 Return消息机制5 消息的分发与消…

Spring事务的一些总结

文章目录 1 Transactional 注解特性2 事务的属性3 事务的嵌套4 事务超时设置5 Transaction注解不回滚的可能原因6 事务的基本要素(ACID)7 事务的原理8 数据并发问题9 数据库隔离级别10 Spring隔离级别11 底层所使用的不同的持久化API或框架 1 Transactional 注解特性 可以在整…

计算机科学与技术万金油专业,盘点工学大类里的“万金油”专业

原标题&#xff1a;盘点工学大类里的“万金油”专业 教育部2012年最新修订的本科生专业名录中把专业重新进行了从学科门类到专业类和专业的划分&#xff0c;共计12大学科门类&#xff0c;分别是理、工、农、医 &#xff0c;管、教、文、艺 经、史、法、哲.92大专业类&#xff0…

程序员的浪漫(使用python画图)比心心(待完善版)

本人给女朋友准备的小惊喜&#xff0c;如有需要可以取用。&#xff08;代码内有注释可根据需要更改&#xff09; #比心&#xff01;&#xff01; import turtle # turtle.bgpic(D:/python/bjtp/aa.jpg) turtle.speed(10)#画笔速度 turtle.setup(1800,700,70,70) turtle.color(b…

一行代码解决判断IE浏览器和提示升级问题

IE8及以下版本提示升级&#xff08;使用IE9和旧版IE支持 if IE 条件注释语句实现&#xff09; <!--[if lte IE 8]><script>alert("您正在使用的浏览器版本过低&#xff0c;为了您的最佳体验&#xff0c;请先升级浏览器。");window.location.href"h…

win7 ie11版本安装报此更新不适用于计算机问题

IE版本升级需要KB2729094、KB2731771、KB2533623、KB2670838、KB2786081五个补丁安装 五个补丁需要根据计算机决定并下载&#xff0c;如&#xff1a;32位选x86 64位选X64 补丁安装时如果也出现了此更新不适用于计算机问题&#xff0c;可以在dos&#xff08;管理员身份&#xf…

浏览器为低版本IE的时候的信息提示;旧版 Internet Explorer 升级提示页;旧版 Internet Explorer 淘汰行动

本部分内容来自&#xff1a;https://support.dmeng.net/ 旧版 Internet Explorer 升级提示页 旧版 Internet Explorer 淘汰行动 微软对旧版 Internet Explorer 的支持服务已终止的说明 X-UA-Compatibility Meta Tag and HTTP Response Header if IE 条件注释说明 360浏览…