1、了解RabbitMQ
RabbitMQ基于AMQP协议,使用erlang语言开发。目前社区活跃度比较高。单机性能能达到万级的并发量,能够支持多语言。
优点:新能比较好,管理页面丰富,在互联网公司有比较大的应用,有多语言和成熟的客户端。
缺点:因为是erlang语言写的,内部机制很难了解,也就是说很难定制和掌控。集群不支持动态的扩展。
2、什么是AMQP协议?
是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。目标是实现一种在全行业广泛使用的标准消息中间件技术,以便降低企业和系统集成的开销,并且向大众提供工业级的集成服务。主要实现有 RabbitMQ。
3、简述生产者、消费者、消息
生产者:消息的创建者,发送到rabbitmq;
消费者:连接到rabbitmq,订阅到队列上,消费消息,持续订阅(basicConsumer)和单条订阅(basicGet).
消息:包含有效载荷和标签,有效载荷指要传输的数据,,标签描述了有效载荷,并且rabbitmq用它来决定谁获得消息,消费者只能拿到有效载荷,并不知道生产者是谁。
4、什么是信道
信道是生产消费者与rabbit通信的渠道,生产者publish或是消费者subscribe一个队列都是通过信道来通信的。信道是建立在TCP连接上的虚拟连接,什么意思呢?就是说rabbitmq在一条TCP上建立成百上千个信道来达到多个线程处理,这个TCP被多个线程共享,每个线程对应一个信道,信道在rabbit都有唯一的ID ,保证了信道私有性,对应上唯一的线程使用。
疑问:为什么不建立多个TCP连接呢?原因是rabbit保证性能,系统为每个线程开辟一个TCP是非常消耗性能,每秒成百上千的建立销毁TCP会严重消耗系统。所以rabbitmq选择建立多个信道(建立在tcp的虚拟连接)连接到rabbit上。
5、简述交换器、队列、绑定、路由键
队列通过路由键(routing key,某种确定的规则)绑定到交换器,生产者将消息发布到交换器,交换器根据绑定的路由键将消息路由到特定队列,然后由订阅这个队列的消费者进行接收。
6、交换器类型
- Direct
路由键完全匹配,消息被投递到对应的队列,每个amqp的实现都必须有一个direct交换器,包含一个空白字符串名称的默认交换器。声明一个队列时,会自动绑定到默认交换器,并且以队列名称作为路由键:channel->basic_public($msg,’ ’,’queue-name’)
- Fanout
消息广播到绑定的队列
- Topic
通过使用*和#,使来自不同源头的消息到达同一个队列,”.”将路由键分为了几个标识符,*匹配1个,“#”匹配一个或多个。
- Headers
headers基本上和Direct基本差不多,不实用,可以忽略。
7、虚拟主机
虚拟消息服务器,vhost,本质上就是一个mini版的mq服务器,有自己的队列、交换器和绑定,最重要的,自己的权限机制。Vhost提供了逻辑上的分离,可以将众多客户端进行区分,又可以避免队列和交换器的命名冲突。Vhost必须在连接时指定,rabbitmq包含缺省vhost:“/”,通过缺省用户和口令guest进行访问。
rabbitmq里创建用户,必须要被指派给至少一个vhost,并且只能访问被指派内的队列、交换器和绑定。Vhost必须通过rabbitmq的管理控制工具创建。
8、RabbitMQ在linux下安装
准备工作:
操作系统:CentOS7
软件:
erlang-solutions-1.0-1.noarch.rpm
rabbitmq-server-3.6.6-1.el7.noarch.rpm
在这里我使用在线下载安装包方式安装。
(1)使用root用户登录操作系统
查看是否有安装过rabbitmq,使用 ps -ef|grep rabbitmq出现下面结果说明是没有安装过的
(2)下载erlang
wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
出现这个提示说明下载完成了,可以通过ll命令查看当前下载目录是否包含这个rpm文件
rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
提示需要安装epel-release
yum install -y epel-release
出现这个提示说明安装成功了
yum install -y erlang
这个过程比较长,可能会出现下载失败,如果下载失败多下载几次。出现这个提示说明已经安装成功了
(3)安装rabbitmq
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el7.noarch.rpm
出现这个提示说明下载成功了
yum install -y rabbitmq-server-3.6.6-1.el7.noarch.rpm
出现下面提示说明安装完成了
(4)启动rabbitmq
service rabbitmq-server start 启动
service rabbitmq-server status 查看
出现下面的结果说明rabbitmq正确安装了,并且也正常启动了
(5)安装rabbitmq-plugins的管理工具
rabbitmq-plugins enable rabbitmq_management
出现下面的结果说明启用成功了
修改完成后需要重启rabbitmq
systemctl restart rabbitmq-server.service
(6)简单实用测试
rabbitmqctl list_vhosts 查看当前有哪些虚拟主机
rabbitmqctl add_vhost myhost 创建名为myhost的虚拟主机
rabbitmqctl add_user kevin 123456 创建用户名为kevin密码为123456
rabbitmqctl set_permissions -p myhost kevin ‘.*’ ‘.*’ ‘.*’ 设置权限
rabbitmqctl set_user_tags kevin administrator 设置kevin为管理员
(7)浏览器访问
http://192.168.244.101:15672/
输入账号密码登录rabbitmq,这里我使用刚刚创建的kevin/123456登录
在管理页面我们可以查看之前创建的虚拟主机
到此RabbitMQ就全部安装完成了
消息中间件理论概述
一、消息中间件RabbitMQ之Linux安装过程
二、消息中间件RabbitMQ之入门使用