架构一、RabbitMQ面向消息的中间件

RabbitMQ面向消息的中间件

在这里插入图片描述

简介

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。

历史编辑

Rabbit科技有限公司开发了RabbitMQ,并提供对其的支持。起初,Rabbit科技是LSHIFT和CohesiveFT在2007年成立的合资企业,2010年4月被VMware旗下的SpringSource收购。RabbitMQ在2013年5月成为GoPivotal的一部分。

基本概念编辑

RabbitMQ是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成。
RabbitMQ服务支持下列操作系统:
Linux
WindowsNT 到 10
Windows Server2003 到 2016
macOS
Solaris
FreeBSD
TRU64
VxWorks

RabbitMQ支持下列编程语言:

Python、Java、Ruby、PHP、C#、JavaScript、Go、Elixir、Objective-C、Swift

主要特性编辑

可伸缩性: 集群服务
消息持久化:从内存持久化消息到硬盘,再从硬盘加载到内存 [1]

安装编辑

Erlang与RabbitMQ,安装路径都应不含空格符。
Erlang使用了环境变量HOMEDRIVE与HOMEPATH来访问配置文件.erlang.cookie,应注意这两个环境变量的有效性。需要设定环境变量ERLANG_HOME,并把%ERLANG_HOME%\bin加入到全局路径中。

主要端口说明

4369 – erlang发现口
5672 --client端通信口
15672 – 管理界面ui端口
25672 – server间内部通信口
在这里插入图片描述

rabbitmq的框架和原理图:

Broker:提供一种 传输服务,维护从生产者到消费者的路线,保证数据按照指定的方式传输
Producer:消息生产者
Consumer: 消息消费者
Exchange: 消息交换机,指定消息按照什么规则,进入那个队列
Queue: 消息队列,消息的载体
Binding:一个动作,把exchange和queue按照路由规则进行绑定
Routing key:路由关键字,就是进行消息投递的规则
Vhost:虚拟主机,用于分离不同用户的权限
Channel:消息通道,一个链接里可以建立多个通道

Rabbltmq通信过程:

Producer与rabbitmq server 建立链接
在建立链接的基础上,建立channel(消息通道)
Producer 定义一个exchange和queue
Producer 传递消息给exchange,同时还会传送一个routing key
Exchange 根据routing key 把消息投递到相应的队列
Queue收到消息之后,把消息发送给订阅者------consumer
Consumer拿到消息之后,发送一个确认消息----ack 给rabbitmq
Rabbit获得来自consumer的ack之后,确认消息已经被消费,删除掉队列中对应的消息。

消息的存储模式;

普通模式(默认):消息只有一份
镜像模式:消息在多个节点上,消息会主动在节点之间进行同步
缺点:如果消息过多,会损耗通讯信道、降低系统性能
ha-mode : 表示镜像模式 all / exactly / nodes
-all : 表示消息在集群所有节点上进行镜像
-exactly: 在指定个数的节点上进行镜像
-nodes:在指定的节点上进行镜像,节点需要指定
ha-sync-mode:automatic / manual 队列中消息的同步方式

集群的节点类型:

内存节点: 保存状态到内存中
硬盘节点: 保存状态到硬盘中
集群中,一个磁盘节点就可以,这样的配置,速度快,数据也可以持久化到磁盘
注意点:
Rabbitmq从2.0版本开始支持拒绝消息,如果拒绝消息 ,那么消息会被发送给下一个consumer
一个链接上可以建立多个channel,可以理解为逻辑上的链接,也就是我们说的消息通道
dead-letter: dead-letter = requeue-false 直接抛弃异常数据,而不是重新进入队列,重新进入队列可能会造成消息积压在队列中,压力较大
关于vhost的理解: vhost可以为不同的服务提供边界隔离,使得应用安全的运行在不同的vhost上,相互之间不会干扰,producer和consumer链接rabbitmq,需要指定一个vhost,表明在同一个vhost下进行通信

实际操作

在N台机器中相同操作
yum -y localinstall erlang-19.0.4-1.el7.centos.x86_64.rpm rabbitmq-server-3.6.10-1.el7.noarch.rpm
在n台服务器中安装erlang与rabbitmq会解决依赖包socat
systemctl stop firewalld                                    关闭防火墙
systemctl disable firewalld                                 禁止防火墙
192.168.1.* s1                                              添加IP及更改主机名称
192.168.1.* s2                                                   ~
192.168.1.* s3                                                   ~  
                                       操作完成后reboot重启
cat /var/lib/rabbitmq/.erlang.cookie  查看第一台cookie的值,并把其他机器的值设置与其相同
echo "OWFLSWVBIBSTQPTNPYIK" > /var/lib/rabbitmq/.erlang.cookie           
systemctl start rabbitmq-server                             全部启动
第一台
[root@s1 ~]# rabbitmqctl stop_app                           停掉内部应用
Stopping rabbit application on node rabbit@s1          
[root@s1 ~]# rabbitmqctl reset                              重置
Resetting node rabbit@s1
[root@s1 ~]# rabbitmqctl start_app                          启动内部应用
Starting node rabbit@s1
第二台及其他
[root@s2 ~]# rabbitmqctl stop_app                          停掉内部应用
Stopping rabbit application on node rabbit@s2
[root@s2 ~]# rabbitmqctl reset                             重置
Resetting node rabbit@s2
[root@s2 ~]# rabbitmqctl join_cluster --ram rabbit@s1      创建一个集群  ram内存节点
Clustering node rabbit@s2 with rabbit@s1
[root@s2 ~]# rabbitmqctl start_app                         启动内部应用
Starting node rabbit@s2
[root@s2 ~]# 
[root@s2 ~]# rabbitmqctl cluster_status                    显示cluster中的所有node
Cluster status of node rabbit@s2
[{nodes,[{disc,[rabbit@s1]},{ram,[rabbit@s3,rabbit@s2]}]},
 {running_nodes,[rabbit@s3,rabbit@s1,rabbit@s2]},
 {cluster_name,<<"rabbit@s2">>},
 {partitions,[]},
 {alarms,[{rabbit@s3,[]},{rabbit@s1,[]},{rabbit@s2,[]}]}]

rabbitmq支持各种插件,开启插件可以使用rabbitmq-plugins命令
rabbitmq_management提供一个基于HTTP的API接口,来管理和监控你的rabbitmq。他有web方式和CLI方式,其实web方式是在后端调用HTTP api

[root@s1 ~]# rabbitmq-plugins enable rabbitmq_management           
The following plugins have been enabled:
  amqp_client
  cowlib
  cowboy
  rabbitmq_web_dispatch
  rabbitmq_management_agent
  rabbitmq_management

Applying plugin configuration to rabbit@s1... started 6 plugins.
第一台
[root@s1 ~]# rabbitmqctl add_user szd 123.com            添加一个  用户、密码
Creating user "admin"
[root@s1 ~]# rabbitmqctl set_user_tags szd administrator 设置一个账户为管理员
Setting tags for user "admin" to [administrat]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值