rabbit

  • 2019-09-10
  • 72
  • 0
  • 1

rabbitMQ???

消息系统,消息队列

基于AMQP协议        tcp连接(每次 三次握手,四次挥手)

rabbitMQ

  • M:mesage消息
  • Q:queue队列

rabbit作用

  • 异步
  • 削峰

rabbit推送模式

  • 点到点
  • 推送 订阅
  • 交换器绑定不同的队列  分发不同的请求给相应得队列

rabbit结构

生产者

  • producer:生产消息,并将消息推送到消息队列中
  • rabbitMQ-server: 消息中间件
  • connections:生产者推送消息到消息队列以及消费者从队列中消费消息时都需要与队列建立TCP连接
  • channel:虚拟通道,建立在TCP连接基础之上,消息通过虚拟通道交给队列,解决生产者推送消息时需要建立多次TCP连接所带来得损耗问题
  • exchange:交换器,接收虚拟通道发来得消息,根据自身设置得匹配规则将消息交给合适的队列
  • fanout:交换器会将消息交给他所绑定得所有队列
  • direct:完全匹配,生产者发送得消息产生得routing-key与队列和交换器生成得bingding-key完全一致时,则消息会被交给该队列
  • topic:模糊匹配,生产者发送的消息产生的routing-key与队列和交换器生成的bingding-key有部分相同或完全相同,则消息会被交给该队列
  • queue:队列,消息的载体,特点时先进先出

消费者

  • consumer:消费消息,可以通过设置prefetchCount的值来指定每个消费者消费的消息的数量

rabbit集群的模式

  • 普通模式
  • 镜像模式:all,exactly(指定部分节点)nodes

rabbit特点

  • 灵活的路由
  • 支持集群部署
  • 队列的高可用
  • 支持web平台管理

Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优缺点?

特性 ActiveMQ RabbitMQ RocketMQ Kafka
单机吞吐量 万级,比 RocketMQ、Kafka 低一个数量级 同 ActiveMQ 10 万级,支撑高吞吐 10 万级,高吞吐,一般配合大数据类的系统来进行实时数据计算、日志采集等场景
topic 数量对吞吐量的影响 topic 可以达到几百/几千的级别,吞吐量会有较小幅度的下降,这是 RocketMQ 的一大优势,在同等机器下,可以支撑大量的 topic topic 从几十到几百个时候,吞吐量会大幅度下降,在同等机器下,Kafka 尽量保证 topic 数量不要过多,如果要支撑大规模的 topic,需要增加更多的机器资源
时效性 ms 级 微秒级,这是 RabbitMQ 的一大特点,延迟最低 ms 级 延迟在 ms 级以内
可用性 高,基于主从架构实现高可用 同 ActiveMQ 非常高,分布式架构 非常高,分布式,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用
消息可靠性 有较低的概率丢失数据 基本不丢 经过参数优化配置,可以做到 0 丢失 同 RocketMQ
功能支持 MQ 领域的功能极其完备 基于 erlang 开发,并发能力很强,性能极好,延时很低 MQ 功能较为完善,还是分布式的,扩展性好 功能较为简单,主要支持简单的 MQ 功能,在大数据领域的实时计算以及日志采集被大规模使用

实验环境

角色 rabbitMQ(one)  rabbitMQ(two)  rabbitMQ(three)
IP地址 192.168.1.11 192.168.1.22 192.168.1.33

实验步骤

安装软件包

[root@localhost ~]# rpm -ivh erlang-18.1-1.el7.centos.x86_64.rpm
[root@localhost ~]# yum -y install socat
[root@localhost ~]# rpm -ivh rabbitmq-server-3.6.15-1.el7.noarch.rpm

修改主机名称

[root@localhost ~]# hostnamectl set-hostname one
[root@localhost ~]# reboot
[root@localhost ~]# hostnamectl set-hostname two
[root@localhost ~]# reboot
[root@localhost ~]# hostnamectl set-hostname three
[root@localhost ~]# reboot

启动服务

[root@one ~]# systemctl start rabbitmq-server
[root@two ~]# systemctl start rabbitmq-server
[root@three ~]# systemctl start rabbitmq-server

拷贝one的cookie到另外两台rabbit服务器上面

[root@one ~]# cd /var/lib/rabbitmq/
[root@one rabbitmq]# scp .erlang.cookie root@192.168.1.22:/var/lib/rabbitmq/
[root@one rabbitmq]# scp .erlang.cookie root@192.168.1.33:/var/lib/rabbitmq/

重启服务

[root@one ~]# systemctl restart rabbitmq-server
[root@two ~]# systemctl restart rabbitmq-server
[root@three ~]# systemctl restart rabbitmq-server

添加域名解析

[root@one one]# vim /etc/hosts
192.168.1.11    one
192.168.1.22    two
192.168.1.33    three
# 拷贝hosts到另外两台rabbit服务器
[root@one ~]# scp /etc/hosts root@192.168.1.22:/etc/
[root@one ~]# scp /etc/hosts root@192.168.1.33:/etc/

查看集群状态

[root@one ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@one
[{nodes,[{disc,[rabbit@one]}]},
{running_nodes,[rabbit@one]},
{cluster_name,<<"rabbit@one">>},
{partitions,[]},
{alarms,[{rabbit@one,[]}]}]

以内存模式加入到集群(one)

# 关闭rabbit
[root@two ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@three
# 加入集群
[root@two ~]# rabbitmqctl join_cluster rabbit@one --ram
Clustering node rabbit@three with rabbit@one
# 开启rabbit
[root@two ~]# rabbitmqctl start_app
Starting node rabbit@two
# 关闭rabbit
[root@three ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@three
# 加入集群
[root@three ~]# rabbitmqctl join_cluster rabbit@one --ram
Clustering node rabbit@three with rabbit@one
开启rabbit
[root@three ~]# rabbitmqctl start_app
Starting node rabbit@three

再次查看集群状态

[root@one ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@one
[{nodes,[{disc,[rabbit@one]},{ram,[rabbit@two,rabbit@three]}]},
{running_nodes,[rabbit@one]},
{cluster_name,<<"rabbit@one">>},
{partitions,[]},
{alarms,[{rabbit@one,[]}]}]

创建登陆web页面的用户admin

[root@one ~]# rabbitmqctl add_user admin 123.com
Creating user "admin"

把admin作为管理员

[root@one ~]# rabbitmqctl set_user_tags admin administrator
Setting tags for user "admin" to [administrator]

查看插件

[root@one ~]# rabbitmq-plugins list

启动插件

[root@one ~]# rabbitmq-plugins enable rabbitmq_management
[root@two ~]# rabbitmq-plugins enable rabbitmq_management
[root@three ~]# rabbitmq-plugins enable rabbitmq_management

访问页面

[root@one ~]# firefox 192.168.1.11:15672

添加虚拟主机(new)

给虚拟主机new添加用户admin

添加策略

添加队列(test)

添加消息

三台主机分别验证消息是否同步

[root@one ~]# cd /var/lib/rabbitmq/mnesia/rabbit@one/queues/
[root@one queues]# ls
3DF8UXE7V8KTTUTZQ9QWH8RAA

[root@two ~]# cd /var/lib/rabbitmq/mnesia/rabbit@two/queues/
[root@two queues]# ls
3DF8UXE7V8KTTUTZQ9QWH8RAA

[root@three ~]# cd /var/lib/rabbitmq/mnesia/rabbit@three/queues/
[root@three queues]# ls
3DF8UXE7V8KTTUTZQ9QWH8RAA

评论

还没有任何评论,你来说两句吧

发表评论

:zhenbang: :yiwen: :yinyue: :yinxian: :yi: :xxyl: :xinsui: :xiaonian: :weiqu: :tushe: :tu: :taiyang: :taikaixin: :shuijiao: :shenli: :shengqi: :ruo: :qianbi: :qian: :pen: :neng: :mianqiang: :meigui: :lu: :liwu: :kuanghan: :ku: :kaixin: :jinya: :jiku: :huaxin: :huaji: :hu: :heixian: :hehe: :han: :haha: :haha2: :guai: :dangao: :damuzhi: :daku: :chabei: :caihong: :bugaoxing: :bishi: :aixin: :a: :OK: :) :(