RabbitMQ学习笔记

在学习RabbitMQ之前,先简单描述一下何为MQ,MQ是消息队列全Message Queue。在分布式系统中,系统间的通信在早期是通过远程调用来实现的,远程通信采用同步机制,在请求直接在两个系统或多个系统间直接交互,当某一环节出现错误或者服务出现错误时整个系统都有可能停止甚至瘫痪,是同步机制的远程调用的一个很大的弊端。MQ解决了这一问题,MQ是异步通信,多系统间存在着消息中间件,系统请求会暂存在消息中间件,系统可从消息中间件中拿到和自己相配的请求进行处理,因为有了中转环节,所以当一个或者多个请求失败也不会让系统直接瘫痪,很大程度增强了分布式系统的鲁棒性,降低了系统耦合性,同时也提高了效率。

RabbitMQ是MQ系列产品之一,并发能力强,性能极其好,
延时低,社区活跃,管理界面丰富,综合能力较强。是由Rabbit公司用Erlang语言开发的一种消息队列产品,官方客户端支持Erlang,Java,Ruby等,社区产出多种API,几乎支持所有语言可以,支持多种协议如:AMQP,XMPP,SMTP,STOMP。
RabbitMQ官方地址:http://www.rabbitmq.com/

1、RabbitMQ简介

RabbitMQ 基础架构图
上图为RabbitMQ 基础架构图,包括生产者producer,消费者consumer,broker是RabbitMQ server,用来接收和发送消息的应用。消费者和生产者与broker发送和或许消息都是通过tcp连接,在图上显示为Connection。
RabbitMQ的大致工作模式是如图所示,生产者发送消息,通过通道和RabbitMQ Server连接,并将消息暂存在Broker中,消费者获取消息也是通过通道和Broker连接,从消息队列中与之配对的消息。
RabbitMQ提供了6种模式:简单模式,work模式,Publish/Subscribe发布与订阅模式,Routing路由模式,Topics主题模式。

2、RabbitMQ安装

本文是在CentOS7环境下安装的

2.1、在线安装依赖环境
yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz
2.2、安装Erlang

在这需要在网上先行下载erlang的rpm文件,可选择最新版本,官网即可找到,下载好后将.rpm文件上传到CentOS7虚拟机下,随后执行下列指令,注意安装的是自己上传的文件,不能复制指令去执行,我的版本可能和你下载的版本不一样

rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm
2.3、安装RabbitMQ

文件均可在官网找到,自行查找下载上传到虚拟机

rpm -ivh socat-1.7.3.2-1.1.el7.x86_64.rpm --force --nodeps
rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm
2.4、修改配置

修改rabbit.app文件,将loopback_users 中的 <<“guest”>>,只保留guest,这样就可以使用账号密码均为guest的账户登录管理界⾯

vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app
2.5、开启管理界⾯

如下指令为RabbitMQ的开启、停止、重启指令

service rabbitmq-server start # 启动服务
service rabbitmq-server stop # 停⽌服务
service rabbitmq-server restart # 重启服务

上一步修改配置文件后,需要重启服务

service rabbitmq-server restart

开启管理界⾯

rabbitmq-plugins enable rabbitmq_management
2.5、访问管理界面

RabbitMQ在安装好后,自带的管理界面端口为15672,可以访问 http://ip地址:15672 ;其⾃带了guest/guest的⽤户名和密码。后续就可以在管理界面为自己创建用户配置虚拟主机。

3、RabbitMQ工作模式

3.1、Work queues工作队列模式

Work Queues相比与一个生产者和一个消费者的模式其消费者可以为多个,他们共用一个消息队列,消息队列会把所有消息转发给所有消费者,消费者们竞争成功者消费消息。应用场景:对于 任务过重或任务较多情况使用工作队列可以提高任务处理的速度。

3.2、 Publish/Subscribe发布与订阅模式

订阅模式相较于Work queues模式多出了一个新的模块交换机exchange,生产者发送消息不再直接发给消息队列,而是先发送给交换机,交换机道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。
Exchange有常见以下3种类型:
Fanout:广播,将消息交给所有绑定到交换机的队列
Direct:定向,把消息交给符合指定routing key 的队列
Topic:通配符,把消息交给符合routing pattern(路由模式) 的队列

Fanout类型的交换机就是所谓的Publish/Subscribe发布与订阅模式,其有以下特点: 1、每个消费者监听自己的队列而不像Work queues模式中的多个消费者共用一个消息队列。 2、生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接收到消息。

3.3、Routing路由模式

相较于广播模式,路由模式不再是把所有消息都转发给交换机所绑定的队列,路由模式中每条消息会绑定一个路由key,交换机会根据路由key然后将消息转发给对应的队列。
路由模式特点:
队列与交换机的绑定,不能是任意绑定了,而是要指定一个 RoutingKey (路由key)
消息的发送方在 向 Exchange发送消息时,也必须指定消息的 RoutingKey 。
Exchange不再把消息交给每一个绑定的队列,而是根据消息的 Routing Key 进行判断,只有队列的 Routingkey 与消息的 Routing key 完全一致,才会接收到消息。

3.4、Topics通配符模式

Topic 类型与 Direct 相比,都是可以根据 RoutingKey 把消息路由到不同的队列。只不过 Topic 类型Exchange 可以让队列在绑定 Routing key 的时候使用通配符!
通配符规则:
’ # ‘ :匹配一个或多个词
‘ * ’:匹配不多不少恰好1个词
例如:
item.# :能够匹配 item.insert.abc 或者 item.insert
item.* :只能匹配 item.insert

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值