RabbitMQ 消息队列

RabbitMQ 消息队列

MQ 概念

MQ:Message queuing,消息队列是高并发系统的核心组件之一,消息队列的目的是为了实现各个应用程序之间的通讯,这样多个应用程序可以运行在不同的主机上,通过MQ就可以实现夸网络通信,因此 MQ 实现了业务的解耦和异步机制

消息列队的特点:
1,解决瞬时写压力大于应用服务能力导致消息丢失、系统奔溃等问题
2,系统解耦(解决不同重要程度、不同能力级别系统之间依赖导致一死全死)
3,提升性能与并发能力

目前主流的消息队列软件有 RabbitMQ、kafka、ActiveMQ、RocketMQ 等

RabbitMQ
官网: https://www.rabbitmq.com/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4WY8u7WP-1598186670378)(typora图片\29.png)]

RabbitMQ的优势:
基于erlang语言开发的开源软件,具有高并发优点、支持分布式,电信领域被广泛使用。
具有消息确认机制、消息持久化机制,消息可靠性和集群可靠性高
简单易用、运行稳定、跨平台、多语言

Broker:接收和分发信息的应用,即RabbitMQ
Exchange:消息到达Broker的第一站,根据类型分发到不同的Queue中
Queue:消息队列,等待消费者取走消息的地方,基于先进先出的原则进行顺序消费,可以持久化到磁盘节点服务器,可以缓存到内存节点服务器

RabbitMQ 单机部署

apt-cache madison rabbitmq-server  #查看可以安装的版本,如果版本较低配置官方源

vim /etc/hosts
  10.0.0.3 ubuntu1
apt-get install curl gnupg -y
curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc | sudo apt-key add -
apt-get install apt-transport-https
vim /etc/apt/sources.list.d/bintray.rabbitmq.list 
 deb https://dl.bintray.com/rabbitmq-erlang/debian bionic erlang 
 deb https://dl.bintray.com/rabbitmq/debian bionic main 
apt update
apt-cache madison rabbitmq-server
apt-get install rabbitmq-server=3.8.4-1 -y --fix-missing
apt list rabbitmq-server  #查看已安装的版本

systemctl restart rabbitmq-server
systemctl enable rabbitmq-server
ps aux |grep rabbitmq    
ss -ntal
   5672:消费者访问的端口
   15672:web管理端口
   25672:集群状态通信端口

Rabbitmq插件管理

rabbitmq-plugins list  #查看所有插件
rabbitmq-plugins enable rabbitmq_management  #打开web界面管理插件
rabbitmq-plugins version  #查看版本
rabbitmq-plugins help   #查看帮助

Rrabbitmq常用命令

rabbitmqctl --help
rabbitmqctl add_vhost ubuntu  #创建vhost
rabbitmqctl delete_vhost ubuntu #删除vhost
rabbitmqctl list_vhosts    #列出所有vhosts

rabbitmqctl list_queues  #列出所有列队

rabbitmqctl add_user yun 123456 #添加用户yun
rabbitmqctl set_user_tags yun administrator  #赋予yun超级管理员权限
rabbitmqctl set_permissions yun ".*" ".*" ".*"  #设置yun对/的vhost有读写权限

Rabbitmq 集群部署

Rabbitmq 集群分为二种方式:
  普通模式:创建好 RabbitMQ 集群之后的默认模式
  镜像模式:把需要的队列做成镜像队列

普通集群模式:queue创建之后,如果没有其它policy,队列的数据仅保存一份,即创建该队列rabbitmq节点(A节点),当消息进入A节点的Queue中后,consumer从B节点拉取时,RabbitMQ会临时在A、B间进行消息传输,把A中的消息实体取出并经过B发送给consumer,所以consumer可以连接每一个节点,从中取消息,该模式存在一个问题就是当A节点故障后,B节点无法取到A节点中还未消费的消息实体。

镜像集群模式:把需要的队列做成镜像队列,存在于多个节点,属于RabbitMQ的HA方案(镜像模式是在普通模式的基础上,增加一些镜像策略)该模式解决了普通模式中的数据丢失问题,其实质和普通模式不同之处在于,消息实体会主动在镜像节点间同步,而不是在consumer取数据时临时拉取

集群中有两种节点类型:
   内存节点:只将数据保存到内存
   磁盘节点:保存数据到内存和磁盘集群中,集群至少需要一个磁盘节点来保存数据

vim /etc/hosts  #每台MQ服务器做域名解析
   10.0.0.3 ubuntu1
   10.0.0.13 ubuntu2
   10.0.0.23 ubuntu3
apt-get install curl gnupg -y
curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc | sudo apt-key add -
apt-get install apt-transport-https
vim /etc/apt/sources.list.d/bintray.rabbitmq.list 
 deb https://dl.bintray.com/rabbitmq-erlang/debian bionic erlang 
 deb https://dl.bintray.com/rabbitmq/debian bionic main 
apt update
apt-cache madison rabbitmq-server
apt-get install rabbitmq-server=3.8.4-1 -y --fix-missing #每台服务器进行安装
apt list rabbitmq-server
systemctl restart rabbitmq-server
systemctl enable rabbitmq-server
ss -ntal  #检查端口

scp /var/lib/rabbitmq/.erlang.cookie  10.0.0.13:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie  10.0.0.23:/var/lib/rabbitmq/.erlang.cookie
systemctl restart rabbitmq-server

#mq1与mq2 作为内存节点添加到 mq3
#mq1与mq2执行以下命令
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@ubuntu3 --ram   #不加--ram默认是磁盘节点
rabbitmqctl start_app 
#将集群设置为镜像模式,任意节点执行即可
rabbitmqctl set_policy ha-all "#" '{"ha-mode":"all"}'  
rabbitmqctl cluster_status   #查看集群状态
rabbitmq-plugins enable rabbitmq_management  #各节点启动web界面插件

rabbitmqctl add_user yun 123456 #添加用户yun
rabbitmqctl set_user_tags yun administrator  #赋予yun超级管理员权限
登录任意节点web界面 10.0.0.3:15672   yun:123456
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值