消息中间件--RabbitMQ(四)

一、RabbitMQ简介

  AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 下面将重点介绍RabbitMQ中的一些基础概念,了解了这些概念,是使用好RabbitMQ的基础。

RabbitMQ 选型和对比:
1.从社区活跃度
按照目前网络上的资料,RabbitMQactiveMZeroMQ 三者中,综合来看,RabbitMQ 是首选。
2.持久化消息比较
ZeroMq 不支持,ActiveMqRabbitMq 都支持。持久化消息主要是指我们机器在不可抗力因素等情况下挂掉了,消息不会丢失的机制。
3.综合技术实现
可靠性、灵活的路由、集群、事务、高可用的队列、消息排序、问题追踪、可视化管理工具、插件系统等等。
RabbitMq / Kafka 最好,ActiveMq 次之,ZeroMq 最差。当然ZeroMq 也可以做到,不过自己必须手动写代码实现,代码量不小。尤其是可靠性中的:持久性、投递确认、发布者证实和高可用性。
4.高并发
毋庸置疑,RabbitMQ 最高,原因是它的实现语言是天生具备高并发高可用的erlang 语言。
5.比较关注的比较, RabbitMQ 和 Kafka
RabbitMqKafka 成熟,在可用性上,稳定性上,可靠性上, RabbitMq 胜于 Kafka(理论上)。
另外,Kafka 的定位主要在日志等方面, 因为Kafka 设计的初衷就是处理日志的,可以看做是一个日志(消息)系统一个重要组件,针对性很强,所以 如果业务方面还是建议选择 RabbitMq
还有就是,Kafka 的性能(吞吐量、TPS )比RabbitMq 要高出来很多。
官网:https://www.rabbitmq.com/

官网

RabbitMQ 兼容Erlang:
https://www.rabbitmq.com/which-erlang.html#compatibility-matrix

二、RabbitMQ 安装

文档:https://www.rabbitmq.com/install-rpm.html#bintray

  1. YUM安装
    前置条件安装:Erlang20.3+版本
# 测试
[root@localhost ~]# erl
Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [smp:2:2] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V5.10.4  (abort with ^G)
1> 

# 导入key
[root@localhost ~]# rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
#  创建repo 文件
[root@localhost ~]# vi /etc/yum.repos.d/rabbitmq.repo
# 内容
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.7.x/el/7/
gpgcheck=0
repo_gpgcheck=0
enabled=1
# 安装
[root@localhost ~]# yum install rabbitmq-server

  1. 下载安装
暂无
  1. 启动
# 启动RabbitMQ服务
[root@localhost ~]# systemctl start rabbitmq-server
# 查看RabbitMQ服务状态
[root@localhost ~]# systemctl status rabbitmq-server
● rabbitmq-server.service - RabbitMQ broker
   Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; disabled; vendor preset: disabled)
   Active: active (running) since 五 2019-09-27 16:22:30 CST; 21s ago
 Main PID: 18868 (beam.smp)
   Status: "Initialized"
   CGroup: /system.slice/rabbitmq-server.service
           ├─18868 /usr/lib/erlang/erts-9.3.3.11/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -K true -- -ro...
           ├─19036 /usr/lib/erlang/erts-9.3.3.11/bin/epmd -daemon
           ├─19210 erl_child_setup 32768
           ├─19235 inet_gethost 4
           └─19236 inet_gethost 4

9月 27 16:22:30 localhost rabbitmq-server[18868]: ##  ##
9月 27 16:22:30 localhost rabbitmq-server[18868]: ##  ##      RabbitMQ 3.7.18. Copyright (C) 2007-2019 Pivotal Software, Inc.
9月 27 16:22:30 localhost rabbitmq-server[18868]: ##########  Licensed under the MPL.  See https://www.rabbitmq.com/
9月 27 16:22:30 localhost rabbitmq-server[18868]: ######  ##
9月 27 16:22:30 localhost rabbitmq-server[18868]: ##########  Logs: /var/log/rabbitmq/rabbit@localhost.log
9月 27 16:22:30 localhost rabbitmq-server[18868]: /var/log/rabbitmq/rabbit@localhost_upgrade.log
9月 27 16:22:30 localhost rabbitmq-server[18868]: Starting broker...
9月 27 16:22:30 localhost rabbitmq-server[18868]: systemd unit for activation check: "rabbitmq-server.service"
9月 27 16:22:30 localhost systemd[1]: Started RabbitMQ broker.
9月 27 16:22:30 localhost rabbitmq-server[18868]: completed with 0 plugins.

# 重启RabbitMQ服务 
[root@localhost ~]# systemctl restart rabbitmq-server
# 停止RabbitMQ服务 
[root@localhost ~]# systemctl stop rabbitmq-server

# 加入开机自启 
systemctl enable rabbitmq-server.service或chkconfig rabbitmq-server on
  1. 主要端口
4369 -- erlang发现口
5672 --client端通信口
15672 -- 管理界面ui端口
25672 -- server间内部通信口

三、Web UI管理消息服务器

  1. 启用插件
# 启用插件
[root@localhost ~]#  rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@localhost:
rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@localhost...
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

set 3 plugins.
Offline change; changes will take effect at broker restart.

  1. Web访问
    http://192.168.77.132:15672/
    用默认的guest/guest即可(guest/guest用户只能从localhost地址登录,如果要配置远程登录,必须另创建用户)
  2. 添加远程管理账户
    出于安全考虑,guest这个默认的用户只能通过http://localhost:15672来登录,其他的IP无法直接用这个guest帐号。
    使用以下命令添加用户。
# 添加帐号密码:
# rabbitmqctl add_user 用户名 密码
[root@localhost ~]# rabbitmqctl add_user admin 123456
Adding user "admin" ...

# 赋予其administrator角色
[root@localhost ~]# rabbitmqctl set_user_tags admin administrator
Setting tags for user "admin" to [administrator] ...

# 设置权限
[root@localhost ~]# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
Setting permissions for user "admin" in vhost "/" ...
# 重启rabbitmq
[root@localhost ~]# systemctl restart rabbitmq-server

使用新加用户访问
工作界面

四、六种工作模式

简单模式:一个生产者,一个消费者
work模式:一个生产者,多个消费者,每个消费者获取到的消息唯一。
订阅模式:一个生产者发送的消息会被多个消费者获取。
路由模式:发送消息到交换机并且要指定路由key ,消费者将队列绑定到交换机时需要指定路由key
topic模式:将路由键和某模式进行匹配,此时队列需要绑定在一个模式上,“#”匹配一个词或多个词,“*”只匹配一个词。

如果队列中ready状态的消息数比较多,可以认为是消费者的处理能力不足,可以通过增加消费者来解决,而unacked消息存在基本是有以下两点原因:

  1. 消费者取走消息后没有及时做消息确认,对于开启手动确认机制的,不进行ack则消息会一直以unacked状态留在队列中。
  2. 消费者处理能力不足。生产者投放消息的速度较快,当消费者按照prefetch_count设置的值取走相应数量的消息时,这些消息都会暂时处于unacked状态。

五、常见问题

  1. 没有可用软件包 rabbitmq-server-3.7.18-1.el7.noarch.rpm。
    解决:
    禁用fastestmirror插件
# 修改插件配置文件
[root@localhost ~]#  vi  /etc/yum/pluginconf.d/fastestmirror.conf
# 内容
[main]
# 将1改为0
enabled=0
verbose=0
always_print_best_host = true
socket_timeout=3
#  Relative paths are relative to the cachedir (and so works for users as well
# as root).
hostfilepath=timedhosts.txt
maxhostfileage=10
maxthreads=15
#exclude=.gov, facebook
#include_only=.nl,.de,.uk,.ie

# 修改yum 配置文件
[root@localhost ~]# vi /etc/yum.conf
# 内容
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
# 修改为0 不使用插件
plugins=0
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release

# 清除缓存并重新构建yum 源
[root@localhost ~]# yum clean all
# 更新cache
[root@localhost ~]#  yum makecache 

  1. 更改yum镜像
    附:
    centos7 修改为阿里的yum源
# 备份本地yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak 
# 获取阿里yum源配置文件
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 
# 清除缓存
yum clean all
# 更新cache
yum makecache 
# 安装
yum -y update 
  1. erlang 版本过低
错误:软件包:rabbitmq-server-3.7.18-1.el7.noarch (bintray-rabbitmq-server)
          需要:erlang >= 20.3
          已安装: erlang-R16B-03.18.el7.x86_64 (@epel)
              erlang = R16B-03.18.el7

解决:

# 移除erlang
[root@localhost ~]# yum remove erlang
# 重新安装Erlang
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容