rabbitmq原理,RabbitMQ的基礎知識與使用

 2023-10-18 阅读 14 评论 0

摘要:一.MQ引言1.1MQ是什么?MQ(Message Quene),翻譯為消息隊列,通過典型的生產者和消費者模型,生產者不斷向消息隊列中生產消息,消費者不斷從隊列獲取消息。因為消息的生產和消費都是異步的,而且只關心消息的發送和接收,沒有業務
一.MQ引言1.1MQ是什么?MQ(Message Quene),翻譯為消息隊列,通過典型的生產者和消費者模型,生產者不斷向消息隊列中生產消息,消費者不斷從隊列獲取消息。因為消息的生產和消費都是異步的,而且只關心消息的發送和接收,沒有業務邏輯的侵入,輕松實現系統間解耦。別名:消息中間件,通過利用高效可靠的消息傳遞機制進行平臺無關的數據交流,并基于數據通信來進行分布式系統的集成。1.2MQ有哪些?ActiveMQ,RabbitMQ,kafka(Apache),RocketMQ(阿里)等。1.3不同MQ的特點ActiveMQ
ActiveMQ是Apache出品的最流行的,完全支持JMS(Java Message Service)的消息中間件,有豐富的API,但是性能受限,吞吐量并不高。
Kafka
Kafka目前屬于Apache下的頂級項目,它追求高吞吐量,追求高效率。設計之初是為了用在大數據領域做日志的收集和傳輸,但是對消息的事務,一致性方面并沒有很好。
RocketMQ
RocketMQ屬于阿里的開源消息中間件,純Java編寫的,具有高吞吐,高可用的特性,它的設計起源與kafka,但并不是對kafka的copy,它對消息的可靠傳輸以及事務做了優化。目前被應用到阿里集團的交易,充值,流計算,消息推送,日志流處理等場景。
開源版本已經交給Apach托管,但是不支持事務,需要購買其官方版本才提供這個服務。
RabbitMQ
使用Erlang語言(1991年由愛立信公司提出的第一個版本,目前適用于linux,windows,unix等主流系統)開發,處理并發時性能不錯,而且基于AMQP協議(JMS和AMQP的區別  https://blog.csdn.net/hpttlook/article/details/23391967)
可以和spring框架做默認對接,spring框架默認支持RabbitMQ
最重要的一點是RabbitMQ對數據的一致性,穩定性和可靠性支持性很高
數據一致性:RabbitMQ > kafka
吞吐量:       kafka > RabbitMQ
二.RabbitMQ是什么?1.RabbitMQ是實現了高級消息隊列協議(AMQP)的開源消息代理軟件(亦稱面向消息的中間件)。RabbitMQ服務器是用Erlang語言編寫的,而集群和故障轉移是構建在開放電信平臺框架上的。所有主要的編程語言均有與代理接口通訊的客戶端庫。一些基礎的應用場景:①:登錄/修改密碼 成功,登錄用戶要收到短信   1對1②:淘寶/京東下訂單后,通知庫房,積分變動,物流系統等等,一對多③:日志系統:對于info,warning,error不同級別日志系統的處理。

在這里插入圖片描述
2.RabbitMQ的幾種模型 https://www.rabbitmq.com/
在這里插入圖片描述

三.多種模式1.點對點模式2.工作隊列模式默認平均分配,若要實現能者多勞的效果,需要①:關閉自動確認     channel.basicConsume("work", false, new DefaultConsumer(channel) {}②:channel.basicQos(1);//一次只接收一條消息③:channel.basicAck(envelope.getDeliveryTag(), false);//每次執行完任務手動確認

在這里插入圖片描述

3.發布訂閱模式
訂閱了此channel的隊列都能收到消息4.Routing之訂閱模型(direct)在不同的場景下,我們希望不同的消息被不同的隊列消費,這時就用到Direct類型的Exchange。在Direct模型下:①:隊列與交換機的綁定不能再是任意綁定了,而是要指定一個RoutingKey(路由key)②:消息再向交換機發送消息時,也必須指定消息的RoutingKey③:交換機不再把消息交給每一個綁定的隊列,而是根據路由key進行判斷,只有消息的路由key與隊列的路由key完全一致,才會接收到消息5.Routing之訂閱模型(Topic)Topic類型的交換機和Direct類型的相比,都可以根據RoutingKey把消息路由到不同的隊列,只不過Topic類型的交換機在定義RoutingKey的時候支持使用通配符。*:代表匹配一個    例如:user.info.save     user.info.delete    都可以被RoutingKey為 *.info.*的交換機接收到#:代表匹配多個   例如:user.info.save      user.info    user   都可以被RoutingKey為 user.#的交換機接收到

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/148791.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息