RabbitMQ的使用


前言

记录一次使用RabbitMQ的使用过程。


提示:以下是本篇文章正文内容,下面案例可供参考

一、RabbitMQ是什么?

在使用RabbitMQ之前,需要对它有一个基本了解,更方便我们对它理解。
1.官网解释:RabbitMQ is the most widely deployed open source message broker.RabbitMQ is lightweight and easy to deploy on premises and in the cloud. It supports multiple messaging protocols. RabbitMQ can be deployed in distributed and federated configurations to meet high-scale, high-availability requirements.
RabbitMQ是最受欢迎的开源消息代理中间件。它是轻量级的,并且易于部署到企业的机房或者云端。它支持多种消息传递协议,可以以分布式或者集群配置的方式部署,解决大规模和高可用性需求。【源头不做太多解释,感兴趣可以自己查找详细资料】
总结:通俗来讲,它是一个消息代理中间件,它的优点是:开源(免费)、轻量级(自己理解:运行时占用资源少,不会导致程序卡顿)、支持多种消息传递协议、支持分布式部署。
2.它的作用:作为一个消息代理的中间件,它的作用就是将生产者(产生消息的一方)产生的消息存储到队列中,并确保其可以被正确的消费者(使用该消息的一方)消费。
3.使用场景:主要就是利用它的异步通信的能力,将一些业务解耦,提高用户的使用体验,比如:在电商购物平台的付款下单和短信通知付款成功两者之间就可以是异步的,用户不必等到受到付款成功的短信,只在平台付款就能确认自己已经买到该物品,然后系统将一个个的发送短信请求存到消息队列里,等队列满或者达到一定时间时一起处理(即付款的行为和收到短信的行为不是同时进行的);若是这两个行为是同步状态,当高并发时,会造成很多用户已经付款却迟迟不能确认自己购买成功,用户体验很差。
我自己使用的场景是:网页访问量埋点,用来在后台统计一段时间内有多少用户访问网站,因为这个如果来一个用户就将其写入数据库,当大量用户访问的时候,再加上还有其他业务执行会给数据库造成压力,而且这个是一个统计量,并不需要那么实时,所以就设计将数据存到消息队列中,当我们在后台管理页面进行一次刷新或者访问量超过一个阈值时,将消息队列清空。以此降低对数据库的频繁写操作造成的压力。
4.RabbitMQ原理:使用的是AMQP协议(高级消息队列协议)实现。其系统架构如下所示(图有点丑,有点汗颜):
在这里插入图片描述
如图所示,消费者和生产者通过TCP协议连接到RabbitMQ服务器(也可称作broker即消息代理,它实际上就是消息服务器实体)。channel是基于connection建立的,消息就通过这个channel通道传到broker。一个broker又包含多个虚拟主机vhost,这个虚拟主机是为了在一个单独的代理上实现多个隔离的环境,即不同用户或者用户组的消息使用同一个vhost,同其他vhost隔离开。然后一个vhost包含多个Exchange(交换机)和多个Queue(存放消息的实体)。Exchange和Queue通过BINDING_Key进行绑定,他们的关系是多对多,绑定好之后,经过交换机的消息就会被放到对应的Queue中。
消息存入消息队列的过程:
1.生产者先与broker建立连接(即注册到broker),创建消息传输通道channel,并指定一个vhost用来做消息传输;
2.生产者产生消息并将其通过channel传送到broker,此时消息带着一个ROUTING_KEY;
3.当该消息进入broker之后,先到Exchange,交换机根据消息的ROUTING_KEY以及他自己的BINDING_Key将消息存入对应的队列中去;
4.消费者配置步骤类似,然后也是根据对应的ROUTING_KEY去相应的队列中取消息。
常用Exchange的种类:
1.Direct:该模式下Exchange会将消息送到ROUTING_KEY和BINDING_Key完全相同的队列中去。
2.Fanout:该模式下不管消息的ROUTING_KEY是什么,Exchange都会将消息转发给所有绑定的Queue。
3.Topic:该模式下,Exchange和队列的绑定使用的是通配符组成的BINDING_Key,其中“*”代表匹配任意一个词组,“#”代表一个或者多个词组,当消息过来时,Exchange会将根据ROUTING_KEY是否满足BINDING_Key的通配规则来将其送到对应的Queue。例:BINDING_Key为 “test.*.a.#”就可以匹配ROUTING_KEY为“test.ccc.a.com”这样的消息。

二、项目中使用步骤

提示:在项目中使用只是去配置已经建好的虚拟机、交换机和队列,这些是需要登录RabbitMQ的管理页面进行配置的

1.在项目中引入RabbitMQ的依赖

代码如下(示例):

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

2.写配置文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值