当前位置: 首页 > news >正文

RabbitMQ 消息中间件 消息队列

RabbitMQ
1、RabbitMQ简介
RabbiMQ是⽤Erang开发的,集群⾮常⽅便,因为Erlang天⽣就是⼀⻔分布式语⾔,但其本身并不⽀持负载均衡。支持高并发,支持可扩展。支持AJAX,持久化,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

2、RabbitMQ 特点
可靠性

扩展性

高可用性

多种协议

多语言客户端

管理界面

插件机制

3、什么是消息队列
​ MQ 全称为Message Queue, 。是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。

消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信。

4、RabbiMQ模式
注意:RabbitMQ模式⼤概分为以下三种:

(1)单⼀模式。

(2)普通模式(默认的集群模式)。

(3) 镜像模式(把需要的队列做成镜像队列,存在于多个节点,属于RabbiMQ的HA⽅案,在对业务可靠性要求较⾼的场合中⽐较适⽤)。要实现镜像模式,需要先搭建⼀个普通集群模式,在这个模式的基础上再配置镜像模式以实现⾼可⽤。

5、集群中的基本概念
RabbitMQ的集群节点包括内存节点、磁盘节点。顾名思义内存节点就是将所有数据放在内存,磁盘节点将数据放在磁盘。如果在投递消息时,打开了消息的持久化,那么即使是内存节点,数据还是安全的放在磁盘。

一个rabbitmq集 群中可以共享 user,vhost,queue,exchange等,所有的数据和状态都是必须在所有节点上复制的。

ConnectionFactory(连接管理器):应用程序与Rabbit之间建立连接的管理器,程序代码中使用;
Channel(信道):消息推送使用的通道;
Exchange(交换器):用于接受、分配消息;
Queue(队列):用于存储生产者的消息;
RoutingKey(路由键):用于把生成者的数据分配到交换器上;
BindingKey(绑定键):用于把交换器的消息绑定到队列上;
Broker:简单来说就是消息队列服务器实体
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离.
producer:消息生产者,就是投递消息的程序。
consumer:消息消费者,就是接受消息的程序。
user:用户
 

单实例安装RabbitMQ 

安装依赖

[root@localhost ~]# yum -y install vim lrasz
[root@localhost ~]# yum install -y epel-release gcc-c++ unixODBC unixODBC-devel openssl-devel ncurses-devel

安装erlang

方法一:
[root@localhost ~]# curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
方法二:
[root@localhost ~]# rz   #上传安装包安装erlang
[root@localhost ~]# yum -y install erlang-21.3.8.21-1.el7.x86_64.rpm测试:
[root@localhost ~]# erl
Erlang/OTP 21 [erts-10.3.5.16] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]Eshell V10.3.5.16  (abort with ^G)
1> 

安装rabbitmq 

[root@localhost ~]# yum -y install rabbitmq-server-3.7.10-1.el7.noarch.rpm 
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start rabbitmq-server
[root@localhost ~]# systemctl enable rabbitmq-server

开启rabbitmq的web访问界面

[root@localhost ~]# rabbitmq-plugins enable rabbitmq_management

添加用户

[root@localhost ~]# rabbitmqctl add_user zx 123456
Adding user "zx" ...
[root@localhost ~]# rabbitmqctl set_user_tags zx administrator
Setting tags for user "zx" to [administrator] ...
[root@localhost ~]# rabbitmqctl list_users
Listing users ...
user    tags
zx      [administrator]
guest   [administrator]
[root@localhost ~]# rabbitmqctl set_permissions -p "/" zx ".*" ".*" ".*"
Setting permissions for user "zx" in vhost "/" ...

修改配置文件 

[root@localhost rabbitmq]# cp /usr/share/doc/rabbitmq-server-3.7.10/rabbitmq.config.example /etc/rabbitmq/
[root@localhost rabbitmq]# cp rabbitmq.config.example rabbitmq.config
[root@localhost rabbitmq]# vim rabbitmq.config

重启服务 

[root@localhost rabbitmq]# systemctl restart rabbitmq-server

浏览器访问

Rabbit-test 

[root@localhost ~]# yun -y install unzip
[root@localhost ~]# lrzsz
[root@localhost ~]# ls
anaconda-ks.cfg                    
rabbitmq-test-main.zip
cd rabbitmq-test && yum install -y python3 python3-devel && \
pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple && \
export FLASK_ENV=development ; flask run --reload -p 80 -h 0.0.0.0

rabbitMQ集群 

准备三台rabbitMQ服务器

hostnameip
rabbitmq-1192.168.20.141
rabbitmq-2192.168.20.142
rabbitmq-3192.168.20.143

准备工作(三台) 

[root@rabbitmq-1 ~]# mkdir -p /data/rabbitmq/data
[root@rabbitmq-1 ~]# mkdir -p /data/rabbitmq/logs
[root@rabbitmq-1 ~]# chmod 777 -R /data/rabbitmq
[root@rabbitmq-1 ~]# chown rabbitmq.rabbitmq /data/ -R
[root@rabbitmq-1 ~]# vim /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/logs
# 重启服务
[root@rabbitmq-1 ~]# systemctl restart rabbitmq-server

rabbitmq-1服务器 

[root@rabbitmq-1 ~]# cat /var/lib/rabbitmq/.erlang.cookie
HOUCUGJDZYTFZDSWXTHJ
#⽤scp的⽅式将rabbitmq-1节点的.erlang.cookie的值复制到其他两个节点中。
[root@rabbitmq-1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.20.142:/var/lib/rabbitmq/
[root@rabbitmq-1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.20.143:/var/lib/rabbitmq/

rabbitmq-2服务器 

[root@rabbitmq-2 ~]# systemctl restart rabbitmq-server
#停止节点
[root@rabbitmq-2 ~]# rabbitmqctl stop_app 
#如果有数据需要重置,没有则不用
[root@rabbitmq-2 ~]# rabbitmqctl reset  #添加到磁盘节点,--ram内存节点
[root@rabbitmq-2 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq-1  
Clustering node 'rabbit@rabbitmq-2' with 'rabbit@rabbitmq-1' ...#启动节点
[root@rabbitmq-2 ~]# rabbitmqctl start_app 
Starting node 'rabbit@rabbitmq-2' ...

rabbitmq-3服务器 

(1)默认rabbitmq启动后是磁盘节点,在这个cluster命令下,mq-2和mq-3是内存节点,mq-1是磁盘节点。
(2)如果要使mq-2、mq-3都是磁盘节点,去掉–ram参数即可。
(3)如果想要更改节点类型,可以使⽤命令rabbitmqctl change_cluster_node_typedisc(ram),前提是必须停掉rabbit应⽤

 

查看集群状态

[root@rabbitmq-1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq-1 ...
[{nodes,[{disc,['rabbit@rabbitmq-1','rabbit@rabbitmq-3']},{ram,['rabbit@rabbitmq-2']}]},{running_nodes,['rabbit@rabbitmq-2','rabbit@rabbitmq-3','rabbit@rabbitmq-1']},{cluster_name,<<"rabbit@rabbitmq-1">>},{partitions,[]},{alarms,[{'rabbit@rabbitmq-2',[]},{'rabbit@rabbitmq-3',[]},{'rabbit@rabbitmq-1',[]}]}]

 浏览器访问

安装配置负载均衡器

1.安装负载均衡器haproxy

yum -y install haproxy

2、修改 /etc/haproxy/haproxy.cfg 

globallog         127.0.0.1 local2chroot      /var/lib/haproxypidfile     /var/run/haproxy.pidmaxconn     4000user        haproxygroup       haproxynbproc      4daemon# turn on stats unix socketstats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
defaultsmode                    httplog                     globalretries                 3timeout connect         10stimeout client          1mtimeout server          1mtimeout check           10smaxconn                 2048
#---------------------------------------------------------------------
##监控查看本地状态#####
listen admin_statsbind *:89    #80端口冲突mode httpoption httplogoption httpcloselog 127.0.0.1 local0 errstats uri  /haproxystats auth newrain:123456  #登录用户stats refresh 30s
####################################
###反代监控
frontend serverbind *:5670log globalmode tcp#option forwardfordefault_backend rabbitmqmaxconn 3
backend rabbitmqmode        tcplog         globalbalance     roundrobinserver      rabbitmq1 192.168.20.141:5672 check inter 2000s rise 2 fall 3server      rabbitmq2 192.168.20.142:5672 check inter 2000s rise 2 fall 3server      rabbitmq3 192.168.20.143:5672 check inter 2000s rise 2 fall 3[root@rabbitmq-1 ~]# systemctl start haproxy

浏览器访问 

相关文章:

  • flask之文件上传
  • 双目光波导AR眼镜_AR智能眼镜主板PCB定制开发
  • P5743 【深基7.习8】猴子吃桃
  • 什么是https加密协议?
  • 基于个微机器人的开发
  • 注意力机制的快速学习
  • 新华三数字大赛复赛知识点 VLAN基本技术
  • 使用 HPA 和 TopologySpreadConstraints 实现可用区间等比扩容
  • http与apache
  • Linus:我休假的时候也会带着电脑,否则会感觉很无聊
  • 什么是ElasticSearch中的过滤器?
  • 搭配君正主控芯片测评:创想三维物有所值,让你玩3D打印,而不是玩3D打印机
  • 解决 Element-ui中 表格(Table)使用 v-if 条件切换后,表格的列的筛选不显示了
  • 请简要介绍一下HTML的发展史?
  • vuepress-----13、分割config
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 4个实用的微服务测试策略
  • Docker 笔记(2):Dockerfile
  • ES10 特性的完整指南
  • Java,console输出实时的转向GUI textbox
  • javascript从右向左截取指定位数字符的3种方法
  • Javascript设计模式学习之Observer(观察者)模式
  • JDK 6和JDK 7中的substring()方法
  • MySQL几个简单SQL的优化
  • storm drpc实例
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 创建一个Struts2项目maven 方式
  • 从PHP迁移至Golang - 基础篇
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 前端技术周刊 2019-01-14:客户端存储
  • 如何合理的规划jvm性能调优
  • 删除表内多余的重复数据
  • 小试R空间处理新库sf
  • NLPIR智能语义技术让大数据挖掘更简单
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #define用法
  • #define与typedef区别
  • #QT(智能家居界面-界面切换)
  • ( 10 )MySQL中的外键
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (已解决)什么是vue导航守卫
  • (转)fock函数详解
  • .CSS-hover 的解释
  • .gitignore
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .net 7 上传文件踩坑
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?