前言

我们在工作中经常会用到异步消息,主要使用两种消息模式:

  • 消息队列
  • 发布/订阅

消息队列:多个生产者可以向同一个消息队列发送消息,但是一个消息只能被一个消费者消费。

发布/订阅:一个消息可以被多个订阅者并发的获取和处理。

KafkaRabbitMQ 都能满足如上的特性,那么我们应该如何选择使用哪一个?这两个 MQ 有什么差异性?在什么样的场景下适合使用 Kafka,什么场景下适合使用 RabbitMQ ?你是否有这样的疑惑?希望这篇文章能够帮助到你。

如何选择?

开发语言

Kafka:Scala,支持自定义的协议。

RabbitMQ:Erlang,支持 AMQP、MQTT、STOMP 等协议。

延迟队列

如果你有以下这样的需求场景:

  • 生成订单 60 秒后,给用户发短信。
  • 用户 7 天未登录给用户做召回推送。
  • 下单 15 分钟后,未进行付款就关闭订单。

请选择 RabbitMQ,官方已提供延迟队列插件(x-delayed-message),开箱即用。

消息顺序性

如果你的需求场景是需要保证消息是有序的,例如:传递的消息是 MySQL binlog,这种消息不允许是错乱的。

请选择 Kafka,它能够保证发送到相同主题分区的所有消息都能够按照顺序处理。

优先级队列

如果你的需求场景是需要保证消息执行的优先级,例如:首先需要处理 VIP 客户的问题,然后再处理普通客户的问题。

请选择 RabbitMQ,创建队列时可设置 x-max-priority。

消息留存

如果你的需求场景是消费后的消息不马上删除而是希望能够多保留一段时间。

请选择 Kafka,它能够给每个主题配置超时时间,只要没有达到超时时间的消息都会保留下来,请放心 Kafka 的性能不依赖于存储大小,理论上它存储消息几乎不会影响性能。

消息过滤

如果你的需求场景是对接收的消息采取一定的过滤规则进行过滤。

请选择 RabbitMQ,因为它支持消息路由。不过对于 Kafka 而言,也可以通过其他方式实现。

可伸缩行

如果你的需求场景是对伸缩方面、吞吐量方面有极大的要求。

请选择 Kafka

小结

本文纯属抛砖引玉,有问题,欢迎批评指正。

希望在两者的使用选择上能够给你带来一些思路。

推荐阅读

最新文章

  1. OpenFOAM&Gmsh&CFD圆柱绕流(两个圆柱)
  2. CSS3 特效分解一
  3. 9.JAVA中的正则表达式
  4. 第一天接触Orchard
  5. POJ2711 Leapin' Lizards(最大流)
  6. Ajax基础之封装3
  7. shake震动动画
  8. IT技术方案最佳实践方案的收集
  9. [018]C++ explicit构造函数
  10. Android(java)学习笔记127:Android Studio新建工程中的build.gradle、settings.gradle
  11. (CodeForces 510C) Fox And Names 拓扑排序
  12. 注意在insert插入数据库时的int类型问题
  13. C++拾遗(四)指针相关
  14. Python 学习日记(第二周)
  15. sql语句中 limi的用法
  16. Sqlserver 高并发和大数据存储方案
  17. ES6这些就够了
  18. Rabbitmq集群
  19. [csdn markdown]使用摘记二 快捷键及导入导出Markdown文件
  20. win10 开发mfc 64位 ocx控件

热门文章

  1. 分享一份550多个Linux命令的文档,按照命令首字母索引排序
  2. C语言:宏定义 本质及体现
  3. C语言:printf标志符
  4. ELK多索引配置(filebeat)
  5. keeplived+mycat+mysql高可用读写分离水平分表(谁看谁都会)
  6. Splay与FHQ-Treap
  7. nmcli命令行修改网络连接名称
  8. odoo里API解读
  9. UIAutomator2 之 计算机积极拒绝
  10. tomcat与springmvc 结合 之---第20篇 springmvc 对于加载的bean对象存储在哪里