RabbitMQ学习——基本概念

版权声明:欢迎转载,转载请指明出处 https://blog.csdn.net/yjw123456/article/details/84843310

AMQP

高级消息队列协议(Advanced Message Queuing Protocl,AMQP)

具有现代特性的二进制协议。是一个提供统一消息服务的应用层标准高级消息队列协议,
是应用层协议的一个开放标准,为面向消息的中间件设计的。

AMQP协议模型

在这里插入图片描述

  • Server(Broker): 接受客户端的连接,实现AMQP实体服务
  • Connection:连接,应用程序与Broker的网络连接
  • Channel:网络信道,几乎所有的操作都在Channel中进行。客户端可以建立多个Channel,每个Channel代表一个会话任务。
  • Message:消息,服务器和应用程序需之间传递的数据。由Properties和Body组成。Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body表示消息体内容
  • Virtual host:虚拟主机,用于进行逻辑隔离,最上层的消息路由(用于划分具体的服务)。一个Virtual host里面可以有若干个Exchange和Queue,同一个Virtural Host里面不能有相同名称的Exchange或Queue。(类似redis中的不同数据库)
  • Exchange:交换机,接收消息,根据路由键转发消息到绑定队列
  • Binding:Exchange和Queue之间的虚拟连接,binding中可以包含routing key
  • Routing key:路由键,一个路由规则,虚拟机可以用它来确定如何路由一个特定消息
  • Queue:消息队列,保存消息并将它们转发给消费者

RabbitMQ

是一个开源的消息代理队列服务器,基于AMQP协议。

优点

  • 开源
  • 性能优秀
  • 稳定性保障
  • 提供可靠性消息投递模式(confirm)、返回模式(return)
  • 与SpringAMQP完美整合
  • API丰富
  • 集群模式丰富
  • 支持表达式配置
  • 支持高可用模式
  • 支持镜像队列模型
  • 保证数据不丢失的前提做到高可靠性、可用性

高性能的原因

  • Erlang语言最初在于交换机领域的架构模式,这样使得RabbitMQ在Broker之间进行数据交互的性能是非常优秀的
  • Erlang的优点:Erlang有着和原生Socket一样的延迟性能

Rabbit MQ整体架构

在这里插入图片描述

P表示Producer,消息生产者
C表示Consumer,消息消费者

P把消息传递到了绿色的Exchange,然后Exchange把消息传递到红色的消息队列,再由消费者来消息消息。

这样,生产者不关心消息投递到了哪个队列;消费者也不关心消息是从哪个Exchange中来的

RabbitMQ消息流转流程

在这里插入图片描述

生产者生产的消息投递到MQ的Exchange(交换机)上,一个交换机可以绑定多个消息队列的,根据路由策略(路由键)路由消息到某个消息队列上。然后就可以由消费者消费。

安装与启动

我们在虚拟机CentOS7里面进行安装
我选择的是minimal安装,安装下面这篇文章配置网络

CentOS7 minimal安装网络配置

接下来安装相关工具:

yum install -y build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz

wget www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm
wget http://repo.iotti.biz/CentOS/7/x86_64/socat-1.7.3.2-5.el7.lux.x86_64.rpm
wget www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server-3.6.5-1.noarch.rpm

首先安装erlang语言的安装包

rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm

接下来安装socat
rpm -ivh socat-1.7.3.2-5.el7.lux.x86_64.rpm

最后安装消息队列
rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm

安装成功了!

接下来修改配置文件

vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app

找到

      {queue_index_embed_msgs_below, 4096},
         {default_user, <<"guest">>},
         {default_pass, <<"guest">>},
         {default_user_tags, [administrator]},
         {default_vhost, <<"/">>},
         {default_permissions, [<<".*">>, <<".*">>, <<".*">>]},
         {loopback_users, [<<"guest">>]},

修改loopback_users 中的 <<"guest">>,只保留guest
如:{loopback_users, [guest]},

相关命令

[root@localhost ~]# rabbitmq
rabbitmqctl       rabbitmq-plugins  rabbitmq-server

输入rabbitmq按下Tab可以看到以下三个命令:

  • rabbitmqctl 控制相关,可以增加队列、交换机等
  • rabbitmq-server 启停服务
  • rabbitmq-plugins 插件管理

启动

通过下面的命令启动RabbitMQ

[root@localhost ~]# rabbitmq-server start &
[1] 20039

通过如下命令检测是否启动成功

[root@localhost ~]# lsof -i:5672
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
beam    20151 rabbitmq   48u  IPv6  43519      0t0  TCP *:amqp (LISTEN)

停止

[root@localhost ~]# rabbitmqctl stop_app
Stopping node rabbit@localhost ...

开启可视化控制台插件

rabbitmq-plugins enable rabbitmq_management

然后访问 http://host:15672/ 即可
用户名密码都是 guest

rabbitmqctl命令

  • 关闭应用:rabbitmqctl stop_app
  • 启动应用:rabbitmqctl start_app
  • 查看节点状态:rabbitmqctl status
  • 添加用户:rabbitmqctl add_user test test
  • 列出所有用户:rabbitmqctl list_users
[root@centos7-1 ~]# rabbitmqctl list_users
Listing users ...
test	[]
guest	[administrator]

  • 创建虚拟主机:rabbitmqctl add_vhost vhostpath
  • 列出所有虚拟主机:rabbitmqctl list_vhosts
  • 列出虚拟主机上所有权限:rabbitmqctl list_permissions -p vhostpath
  • 删除虚拟主机:rabbitmqctl delete_vhost vhostpath
  • 查看所有队列信息:rabbitmqctl list_queues
  • 移除所有数据(需要先停止服务):rabbitmqctl reset
  • 组成集群:rabbitmqctl join_cluster <clusternode> [--ram]
  • 查看集群状态:rabbitmqctl cluster_status
  • 忘记节点(移除失效节点):rabbitmqctl forget_cluster_node [–offline]

猜你喜欢

转载自blog.csdn.net/yjw123456/article/details/84843310