openstack 基础环境3-rabbitmq

rabbitmq

  • MQ(message queue )
    • 可以理解为一个特殊的管道,用于消息传递
  • AMQP(Advanced Message Queuing Protocol)
    • 高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计
  • rabbitmq
    • 开源消息队列系统,属于AMQP( 高级消息队列协议 ) 标准的一个实现
  • OpenStack 使用 message queue 协调操作和各服务的状态信息,OpenStack支持好几种消息队列服务包括 RabbitMQ, Qpid, 和 ZeroMQ

AMQP 目标在于解决在两个应用之间传送消息存在的下列问题

  • 网络是不可靠的 ,消息需要保存后再转发并有出错处理机制
  • 与本地调用相比,网络速度慢 ,得异步调用
  • 应用之间是不同的(比如不同语言实现、不同操作系统等)得与应用无关
  • 应用会经常变化,同上

需求分析

由于传统基于C/S架构消息传递模型,在对端故障或者不在线情况下是无法继续进行的传递的,队列系统,RabbitMQ作为消息中间件一种解决

应用

以电商应用为例,应用中有订单系统、库存系统、物流系统、支付系统。用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障,都会造成下单操作异常。

当转变成基于消息队列的方式后,系统间调用的问题会减少很多,比如物流系统因为发生故障,需要几分钟来修复。在这几分钟的时间里,物流系统要处理的内存被缓存在消息队列中,用户的下单操作可以正常完成。当物流系统恢复后,继续处理订单信息即可,中单用户感受不到物流系统的故障。提升系统的可用性

在这里插入图片描述

其他应用参考:https://www.jianshu.com/p/9a0e9ffa17dd

rabbitmq中的几个概念名词

  • Broker:简单来说就是消息队列服务器实体
  • vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离
  • Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列
  • Queue:消息队列载体,每个消息都会被投入到一个或多个队列
  • Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来
  • Routing Key:路由关键字, exchange根据这个关键字进行消息投递
  • producer:消息生产者,就是投递消息的程序
  • consumer:消息消费者,就是接受消息的程序
  • channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务

对于操作系统来说创建和销毁TCP会话是非常昂贵的开销,在连接数增大的情况下,这就造成了TCP连接的巨大浪费,而且操作系统每秒能创建的TCP也是有限的,因此很快就会遇到系统瓶颈,这就引入了信道概念
在这里插入图片描述

队列使用过程

  • 生产者连接到消息队列服务器,打开一个channel
  • 生产者声明一个exchange,并设置相关属性
  • 生产者声明一个queue,并设置相关属性
  • 生产者使用routing key,在exchange和queue之间建立好绑定关系
  • 生产者投递消息到exchange
  • exchange接收到消息后,就根据消息的key和已经设由binding,进行消息路里,将消息投递到一个或多个队列里
    在这里插入图片描述

三种Exchange

  • 直接式交换器类型(Direct)
    • 直接交互式处理路由键,需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配
  • 广播式交换机类型(Fanout)
    • 只需要简单的将队列绑定到交换机上,一个发送到交换机的消息都被转发到与该交换机绑定的所有队列上
  • 主题式交换金类型(Topic)
    • 以一个标记绑定关键字,每一个标记之间用“.”字符分隔,通过消息的路由关键字和绑定关键字的模式匹配,将消息路由到被绑定的队列中

RabbitMQ集群

  • 单一模式:最简单的情况,非集群模式
  • 普通模式:默认的集群模式
    • 消息实体只存在一个节点,其他节点consumer取数据时临时到实体节点拉取
  • 镜像模式:把需要的队列做成镜像队列,存在于多个节点
    • 消息实体会主动在镜像节点间同步

Rabbitmq的metadata持久化

数据可以持久化在 RAM 或 Disc

  • 内存节点:只保存状态到内存(一个例外的情况是:持久的queue的持久内容将被保存到disk)
  • 磁盘节点:保存状态到内存和磁盘

如果是 disk node 就要等待写磁盘 , 节点过多这里的速度就会被大大的拖慢
内存节点虽然不写入磁盘,但是它执行比磁盘节点要快。集群中,只需要一个磁盘节点来保存状态就足够了
如果集群中只有内存节点,那么不能停止它们,否则所有的状态,消息等都会丢失

Rabbitmq单一模式部署

安装rabbitmq,因为是yum安装,rabbitmq依赖erlang的rpm库会自动安装

yum install rabbitmq-server

启动服务

systemctl enable rabbitmq-server.service
systemctl start rabbitmq-server.service

添加用户

rabbitmqctl add_user openstack 111111
#opnetack用户,111111 是密码

rabbitmqctl set_permissions openstack ".*" ".*" ".*"
#设置权限为读写

rabbitmqctl set_user_tags openstack administrator
#设置管理员权限

查看用户
在这里插入图片描述

扩展配置web页面

启动WEB管理界面插件

rabbitmq-plugins enable rabbitmq_management

重启服务

systemctl restart rabbitmq-server

登入

http://192.168.0.210:15672/
#用户名和密码皆是guest

在这里插入图片描述

guest默认就是管理员权限,记得修改密码
WEB操作参考:https://www.jianshu.com/p/7b6e575fd451

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值