2021-09-17 闲聊rabbitmq

写在文章前面的话:

为啥要写这篇像是技术又不是严肃技术总结的文章呢,主要起因是这样的。我最近新接触消息中间件rabbitmq,而我之前是用过activemq和kafka,虽然消息中间件都是大同小异,但既然要在项目中使用,那就还是需要认真学习一下的。

面对不熟悉的技术组件,我这是这样告诫自己的。新接触的东西不熟悉很正常,可以一时拿没用过来答复自己或他人,但十天半个月之后,如果还以这种姿势示人,就值得好好反省一下了。因为东西不怕新,也不怕不熟悉,就怕你不用心不去主动了解它。要知道,陌生的事物里有令人畏惧的挑战,但同样也有助人成长蜕变的机遇,怎么看怎么想完全取决于我们如何做。

正是抱着这样的想法,我督促自己抓紧时间学习,为此抽时间看了不少相关的技术文章,但看得多了,了解的多了一些,但对于自己不清楚的点,也更加清晰了。但如果真要去系统地输出技术文章的话,我又不知道该如何下手了,总觉得真要写的话,肯定不是一俩小时能够搞定的。但一直在阅读文章,却又不输出的话,我就心痒痒,毕竟感觉走了,下次就不好找了。索性那就用自己口语化的方式,闲谈一下自己最近学习产生的一些认识和想法。

这样相对轻松的方式,并没有严格经过我的考证,所以难免会存在一些错误和偏差,如果哪位读者看出其中的错误,还请不吝赐教,帮忙指出,我将不胜感激。

下面开始我的内容:

rabbitmq 消息中间件,相比kafka,吞吐量差一些,但稳定性明显更高一些,最显著的点,就是rabbitmq支持事务,但这一点处于效率的考虑,好想又很少用。

kafka中的生产者发送消息,直接向指定的topic发送就可以了,消费者们以不同的group加入,就广播的效果,如果属于同一个group,而topic又包括很多partion分区的话,就可以提高并行消费的能力,进而提升吞吐量,这也是kafka吞吐量大的原因之一。

在我看来,不用rabbitmq的事务的话,但相比于kafka,rabbitmq明显就逊色很多了。因为发送消息比较麻烦,不是单纯指定队列名称就可以,而是要指定交换器和routingkey,另外通过交换器和routingkey进行绑定binding到指定的队列上。

如果要是点对点的或是广播的模式,就要创建不同类型的交换器exchange。点对点就用direct类型的exchange,通过指定的routingkey绑定到指定的queue上;如果是广播就用fanout类型的exchange,此时只要将多个queue绑定到这个exchange上(无需指定routingkey),当生产者通过指定exchange发送消息时,所有绑定在exchange上的queue都可以拿到消息了,这样就起到了一个广播的效果。

稳定性保证

rabbitmq生产者在消息发送的时候,有confirm确认机制,在rabbitmq queue收到消息并完成持久化(如果开启持久化的话)会回调对应的方法,告知生产者消息发送成功,如果发送失败的话,也会回调告知异常失败信息,但这点是保证不了的,毕竟如果断电的话,根本是无力回天。

在进行消息发送的时候,可以指定一个消息的唯一id,在消息发送结果告知回调的时候,也可以拿到messageid,如此可以借助该信息完成消息发送的标记及重试等操作。

消费者ack机制

事务

镜像队列

死信队列

消息进入死信队列的时机
1 队列溢出;2 消息过期;3 消息被nack或breject,设置了requeue为true。

延迟队列

如何通过死信队列实现一个延迟任务队列的功能

通过死信队列实现延迟队列有什么弊端和缺点

如何规避这些弊端和缺点

延迟队列的其他实现方式

queue的结构

queue内部数据流动的流程

镜像队列

类似一种主从的关系,也是为了保证消息的可靠性。

如何提升消息处理速度?
批量拉取消息,但随之而来就有ack的问题。

疑问点:
1.消息的prefech设置多个时,消息的ack如何进行,部分成功部分失败时,如何ack?
2.fanout模式的exchange,在进行广播发送的时候,消息是进行复制的方式,发送到了多个queue中吗,那岂不是存在很多重复吗?答:肯定是这样的,毕竟不同的队列,可以对应不同的配置,如果数据只是存一份的话,不是不可以,但那样就要像kafka一样,维护一个类似偏移量的东西,但好像rabbitmq并不是这样处理的,毕竟rabbitmq现在消息就是放在队列里面的,在consumer ack消息之后,就会把消息从队列中清除掉了,所以显然rabbitmq在广播的时候,是使用的复制数据,而不是保留一份,然后走维护偏移量的方式。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容