女主宣言

现如今,消息中间件已经在很多公司的业务中被广泛使用:业务解耦,消峰填谷,对接大数据,流式计算等等各种玩法层出不穷。伴随着消息中间件的使用,你一定还听过 "消息队列",“pub-sub”这些名词,我们今天就来聊一下这些消息中间件提供给业务的可使用的 "Style"。

PS:丰富的一线技术、多元化的表现形式,尽在“360云计算”,点关注哦!

1

概述

不管如何使用消息中间件,其实都可以归结到两个步骤:消息的产生和消费。消息中间件作为一种消息的暂存(当前也可以持久存储)系统,解耦消息的上下游,通过自身提供的高吞吐量,稳定可靠性,分布式可扩展性等一系列特性保证消息被业务合理正确处理。

消息中间件依照消息数据如何从生产者移动到消费者可提供多种不同的“Style”,我们这里介绍两种最常见的Style: 消息队列方式(Message queuing) 和 发布订阅(publish-subscribe)方式。

2

消息队列方式

消息队列方式,就是Message queuing。

举个例子,我们在写同时处理大量任务的代码时,经常会使用work线程池,再搭配上一个任务队列,有任务要处理时塞进这个任务队列,然后work线程池中的空闲线程就不断地从这个任务队列里取出任务作处理。这里的每个work线程就可以看成是消息的消费者,一个任务只能被其中一个work线程处理,每个任务的处理过程有快有慢,先被work线程取走的任务不一定先被完成。

用张图来形象地说明一下:

到这里我们可以看到对于队列方式,同一个topic的各个消息是被各消费者分摊消息的,为了防止消息被重复消费,通常在消费者获取到消息或处理完消息后对MQ中的消息作删除或标记。

如果消息队列中的消费堆积过多,我们可以通过扩容当前的消费者,来增加消息消费的吞吐量。

3

发布-订阅方式

发布-订阅方式,就是常说的pub-sub方式。

发布者push消息到消息中间件里的某个topic上,各个订阅者都会收到这个topic上的完整的消息,即每个订阅者都能看到一样的完整的topic视图,并且收到的消息的顺序和消息被push到消息中间件时的顺序是一致的。

我们举个例子,比如订阅报纸,每个订阅者的信箱里每天都会收到相同的报纸,而且报纸肯定是按时间先后收到。

用张图来形象地说明一下:

发布-订阅方式可以保证订阅者接收到消息的顺序,这在某些场景下非常有用。比如它可以用来同步数据库的binlog, 订阅者通过这个binlog可以作数据库同步。

通过对于无状态的应用更常使用这种方式,因此它们不要求按顺序来消费消息数据,它们更多地是希望能有更好的并发消费能力和吞吐量。

很多消息系统将topic分成若干个partition, 为了增加消费的吞吐量,会一味调大partition个数,这种方式需要综合考量,成本方面不一定是最优的。

4

常见的消息中间件

  • Apache ActiveMQ, Amazon SQS, IBM Websphere MQ, RabbitMQ, 和 RocketMQ 基本上是消息队列方式;

  • Apache Kafka这个比较有意思,它两种style其实都支持。如果你用来kafka, 那你一定知道在消费时它有个consumer group的概念。

    1. 同一个 consumer group里可以包括多个consumer, 这些同属一个group的consumer消费数据属于消息队(message queuing)的方式;

    2. 如果将每一个consumer group看作是一个整体,假设不存在内部的consumer, 即把这个consumer group看作就是一个consumer , 那不同的consumer group消费数据就可看作是发布-订阅(pub-sub)方式;

现在各种消息中间件很多很多,又存在不同的style, 我们在选择的时候还是要根据自己业务的需求来评估选择。

360云计算

由360云平台团队打造的技术分享公众号,内容涉及数据库、大数据、微服务、容器、AIOps、IoT等众多技术领域,通过夯实的技术积累和丰富的一线实战经验,为你带来最有料的技术分享

消息中间件的 Style相关推荐

  1. 手势识别(1):基础理论

    像点击(clicks)是GUI平台的核心,轻点(taps)是触摸平台的核心那样,手势(gestures)是Kinect应用程序的核心.和图形用户界面中的数字交互不同,手势是现实生活中存在的动作.如果没 ...

  2. 手把手教你如何玩转消息中间件(ActiveMQ)

    原 手把手教你如何玩转消息中间件(ActiveMQ) 2018年07月15日 18:07:39 Cs_hnu_scw 阅读数 6494 </div><div class=" ...

  3. html style属性

    在html 中 style 用于为 HTML 文档定义样式信息. 使用方法: 自己目前总结出2中方法 1 在标签内部使用 2 <style> 当做一个标签使用 下面修改自己颜色为例 < ...

  4. android Style(样式)的解析

    先说下为啥要使用样式吧,举个例子来说吧 当要做这样的一个布局的时候 每个标签都要写的话,会感觉怎样 <LinearLayoutandroid:layout_width="match_p ...

  5. ListView style

    步骤一:在使用的ListView的activiey里使用android:theme="@style/Theme的名字" 步骤二:创建Themes.xml 在Themes.xml里定 ...

  6. html中有csstext方法吗,style对象的cssText方法有哪些使用方法

    这次给大家带来style对象的cssText方法有哪些使用方法,style对象的cssText方法使用的注意事项有哪些,下面就是实战案例,一起来看一下. cssText 本质是什么? cssText ...

  7. android values-v21 style 报错,Android 4.4 以上实现透明导航栏和状态栏 Translucent system bar...

    第一种方式 第一种方式,需要做下面三步设置 1.在values.values-v19.values-v21的style.xml都设置一个 Translucent System Bar 风格的Theme ...

  8. 几个比较冷门的prototype扩展方法:去掉html标签、去掉a标签、去掉style样式,以及判断是否为html代码的代码片段

    /*去掉html标签(真正意义上去掉所有html标签包括内嵌的css样式)*/ String.prototype.stripHTML = function (isRemoveNewLine) {var ...

  9. 吴恩达老师深度学习视频课笔记:神经风格迁移(neural style transfer)

            什么是神经风格迁移(neural style transfer):如下图,Content为原始拍摄的图像,Style为一种风格图像.如果用Style来重新创造Content照片,神经风 ...

最新文章

  1. 运维笔记--ubuntu安装指定版本的RabbitMQ
  2. Android Java 8使用Lamda报错:Execution failed for task :app:transformJackWithJackForDebug - Android?...
  3. linux开通vsftpd服务过程
  4. NLTK完成简单的情感分析
  5. Html常用标签元素
  6. python图形界面教程_图形教程
  7. LeetCode算法入门- Palindrome Number-day2
  8. 【面试】判断一棵二叉树是否为二叉排序树
  9. 了解Java密码扩展的基础
  10. 【转】C语言条件编译及编译预处理阶段
  11. 万圣节html代码大全,《方舟 生存进化》万圣节代码大全一览
  12. jflash烧录教程_Jflash烧录(windows)原理分析
  13. Word - 简繁转换功能
  14. 如何在VR全景作品中添加独立热点?
  15. HBuilder连接不上逍遥Android模拟器
  16. 怎么设置CAD多段线线宽?CAD多段线线宽设置技巧
  17. 码支付源码 无授权—个人免签约支付系统二维码收款即时到账源码
  18. IDEA 修改单行的注释格式
  19. 压电传感器用于车辆测速和承重、车型识别
  20. 安装配置群晖 DS918+ NAS及常用技巧

热门文章

  1. Oracle笔记 十一、PL/SQL函数和触发器
  2. web command line : http://yubnub.org/
  3. VUE自学日志04-Data Property 和方法
  4. Oracle中日期和时间字段的日常使用
  5. 无法解析 uafxcw.lib_二级建造师《实务科目》推荐知识点习题,附中业网校答案解析...
  6. 回文串判断(string类:反转reverse)
  7. 安居客西安房源爬取 + pyecharts 数据展示
  8. 使用LINQ遇到的问题,请高手解答下原理
  9. Eureka核心知识点
  10. ssm数据库异常问题