Go语言走进消息队列-入门 | 青训营笔记

92 阅读2分钟

2023.5.19-Go语言走进消息队列-入门

1.消息队列是什么?

消息队列的英文简称MQ,就像一个打横的管道,左边的人把数据打包后塞进管道左端后,右边的人就可以从管道右边取出来。但是这个管道是不是普通的管道,它需要支持高吞吐,高可用和高并发三个特征。

image.png 2.那他有什么用?

解决应用耦合、异步处理、流量削锋等问题。

3.消息队列的两种模式分别是?

点到点模式:

image.png

消息发送者生产消息发送到queue中,然后消息接收者从queue中取出并且消费消息。消息被消费以后,queue中不再有存储,所以消息接收者不可能消费到已经被消费的消息。

点对点模式特点:

  • 每个消息只有一个接收者(Consumer)(即一旦被消费,消息就不再在消息队列中);
  • 发送者和接收者间没有依赖性,发送者发送消息之后,不管有没有接收者在运行,都不会影响到发送者下次发送消息;
  • 接收者在成功接收消息之后需向队列应答成功,以便消息队列删除当前接收的消息;

发布/订阅模式:

image.png

发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。

发布/订阅模式特点:

  • 每个消息可以有多个订阅者;
  • 发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息。
  • 为了消费消息,订阅者需要提前订阅该角色主题,并保持在线运行;

4.常见的消息队列有哪些?

RabbitMQ:

优点-性能较好,高并发,健壮,易用,可靠性高。

缺点-不利于二次开发和维护,需要学习比较复杂的接口和协议,学习成本高。

ActiveMQ:

优点-跨平台,有安全机制,界面友善,支持自动重连 。

缺点-不适合用于上千个队列的应用场景,社区活跃度比RabbitMQ低。

RocketMQ:

优点-支持 1 万以上持久化队列,所有数据都是持久化,性能佳,社区活跃度高。

缺点-没有web管理页面,只有命令行管理工具。

Kafka:

优点-快速持久化,高吞吐,分布式,支持多种语言,性能佳,有web管理页面,日志领域成熟。

缺点-Kafka单机超过64个队列/分区时,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长。消费失败不支持重试,社区更新较慢。

Kafka基本概念:

image.png