资讯专栏INFORMATION COLUMN

消息队列笔记

crossoverJie / 2409人阅读

摘要:交换器和队列是绑定的,用于消息队列和交换器之间的关联。会将消息发送到匹配的队列中去使用号和号。参考资料消息队列之什么是消息队列浅谈消息队列及常见的消息中间件

一、定义

比较官方的说法是是指利用 高效可靠 的 消息传递机制 进行与平台无关的 数据交流,并基于 数据通信 来进行分布式系统的集成。
我们可以理解为将要传输的数据放在一个队列中。

二、为什么使用消息队列

1、解耦
(1)发送者和接收者不必了解对方,只需要确认消息即可
比如在交易系统中,支付系统把支付结果放到消息中间件中,然后通知订单系统修改支付状态,这一过程中支付系统和订单系统是互不关心的,但是可以保证数据的最终一致

2、异步处理

![图片上传中...]

从图中我们可以看见,A系统将消息发送到消息队列后可以立即返回,然后去处理其他事情,而不用管BCD,让他们自己去拿,这也就实现了异步处理。

3、流量削峰
这一点也很好理解,比如现在是用户使用的高峰期,一秒钟有3000条请求,但是只有两台服务器,每台服务器最多只能处理1000条,那就会造成系统的崩溃,如果说再增加一个服务器,还不够怎么没办,而且这样会花费不少成本,因此如果用一个消息队列,把所有请求都先放到里面,再让服务器自己去拿,就不会造成拥堵了,这就是所谓“削峰”。

![图片上传中...]

4、广播
使用消息队列也可以很好的实现广播,如果想要发送消息给好几个用户,那么如果每个都要发一遍非常浪费效率,但是将消息放在消息队列中,让用户自己去取,就非常的高效。

三、使用消息队列需要注意的问题

1、保证高可用性
在使用消息队列的时候需要注意高可用性,最好使用分布式或者集群的消息队列,以为只把消息队列放在一台服务器上,那如果服务器出了问题,整个系统都崩了。

2、防止数据丢失
其实使用消息队列,最需要注意的就是保证数据不丢失,所以可能需要将数据进行备份等。

四、几种常用的消息队列技术

![图片上传中...]

五、常用消息队列技术——rabbitmq

rabbitmq与基本的消息队列模型不完全一样,而是在它的基础上增加了一个“exchange”。

![图片上传中...]

(1)在图中我们可以看到,exchange(交换器)接受生产者的消息并将消息路由给队列。
(2)交换器和队列是Binding 绑定的,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表
(3)在每个消息的消息头中都包含了路由键,交换器就根据路由键转发消息到队列中。
(4)exchange一般有以下4种类型:
direct:如果路由键和绑定键完全一致,就转发到相应的队列。
fanout:会将消息转发到所有的队列中去。
topic:会将消息发送到匹配的队列中去(使用#号和*号)。
header:header不会匹配路由键,而是匹配请求头,这种类型已经很少使用了。

参考资料:https://juejin.im/post/5a67f7... 消息队列之RabbitMQ
https://juejin.im/post/5cb025... 什么是消息队列
https://juejin.im/post/5b41fe... 浅谈消息队列及常见的消息中间件

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75034.html

相关文章

  • RabbitMq 最全的性能调优笔记

    摘要:性能调优笔记避免雷区要避免流控机制触发服务端默认配置是当内存使用达到,磁盘空闲空间小于,即启动内存报警,磁盘报警报警后服务端触发流控机制。最佳线程生产者使用多线程发送数据到三到五个线程性能发送最佳,超过它也不能提高生产的发送速率。 RabbitMq 性能调优笔记 [TOC] 避免雷区 要避免流控机制触发 服务端默认配置是当内存使用达到40%,磁盘空闲空间小于50M,即启动内存报警,磁...

    Tony 评论0 收藏0
  • Kafka学习笔记(一) :为什么需要Kafka?

    摘要:关于的分区策略以及与消费者间平衡后续文章会继续深入讲解。是一群消费者的集合,可以称之为消费者组,是一种更高层次的的抽象,向订阅消费消息的单位是,当然它其中也可以只有一个消费者。存储消息也是消息系统的一大功能,相对普通的消息队列存储来 我们在学习一个东西的时候,往往只有真正了解它背后的含义,才能一步一步的掌握它,直到运筹帷幄。对于Kafka来说,我也是一个小白,本篇文章我就以一个小白的角...

    Freelander 评论0 收藏0
  • python socket笔记

    摘要:套接字是全双工的。做两件事将未链接的套接字转换为被动套接字,指示内核接受对此套接字的连接请求制定了内核为此套接口排队的最大连接个数对于指定的套接字,内核要维护未连接队列和已连接队列两个队列,完成三路握手的连接将从未连接队列移至已连接队列。 基础 一个套接字由相关五元组构成,协议、本地地址、本地端口、远程地址、远程端口。套接字是全双工的。 listen函数 只用于tcp,listen的原...

    everfly 评论0 收藏0
  • 大数据系列——kafka学习笔记

    摘要:当某一台故障失效时,生产者和消费者转而使用其它的机器整体健壮性的组件一个消息队列需要哪些部分生产消费消息类别存储等等主题处理的消息的不同分类消息代理集群中的一个服务节点称为一个,主要存储消息数据存在硬盘中。 1. 大数据领域数据类型 1.1 有界数据 ​ 一般批处理(一个文件 或者一批文件),不管文件多大,都是可以度量 ​ mapreduce hive sparkcor...

    MAX_zuo 评论0 收藏0
  • RabbitMQ学习笔记

    摘要:消息持久化控制的属性就是消息的持久化。当生产者发送的消息路由键为时,两个消费者都会收到消息并处理当生产者发送的消息路由键为时,只有消费者可以接收到消息。八的消息确认机制在中,可以通过持久化数据解决服务器异常的数据丢失问题。 一、内容大纲&使用场景 1. 消息队列解决了什么问题? 异步处理 应用解耦 流量削锋 日志处理 ...... 2. rabbitMQ安装与配置 3. Java操...

    zacklee 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<