国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

RabbitMQ使用延遲插件,代碼量直接減少一半!

這篇具有很好參考價值的文章主要介紹了RabbitMQ使用延遲插件,代碼量直接減少一半!。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

今天介紹一下使用RabbitMQ的延遲插件方便實現(xiàn)延遲消息的方案。

RabbitMQ 是一個由 Erlang 語言開發(fā)的?AMQP(高級消息隊列協(xié)議) 的開源實現(xiàn)。

RabbitMQ 是輕量級且易于部署的,能支持多種消息協(xié)議。

RabbitMQ 可以部署在分布式和聯(lián)合配置中,以滿足高規(guī)模、高可用性的需求。

具體特點包括:

  • 可靠性(Reliability):RabbitMQ 使用一些機制來保證可靠性,如持久化、傳輸確認、發(fā)布 確認。

  • 靈活的路由(Flexible Routing):在消息進入隊列之前,通過 Exchange 來路由消息的。對 于典型的路由功能,RabbitMQ 已經(jīng)提供了一些內(nèi)置的 Exchange 來實現(xiàn)。針對更復雜的路由功能,可以將多個 Exchange 綁定在一起,也通過插件機制實現(xiàn)自己的 Exchange 。

  • 消息集群(Clustering):多個 RabbitMQ 服務(wù)器可以組成一個集群,形成一個邏輯 Broker。

  • 高可用(Highly Available Queues):隊列可以在集群中的機器上進行鏡像,使得在部分節(jié) 點出問題的情況下隊列仍然可用。

  • 多種協(xié)議(Multi-protocol):RabbitMQ 支持多種消息隊列協(xié)議,比如 STOMP、MQTT等等。

  • 多語言客戶端(Many Clients):RabbitMQ 幾乎支持所有常用語言,比如 Java、.NET、 Ruby 等等。

  • 管理界面(Management UI):RabbitMQ 提供了一個易用的用戶界面,使得用戶可以監(jiān)控 和管理消息 Broker 的許多方面。

  • 跟蹤機制(Tracing):如果消息異常,RabbitMQ 提供了消息跟蹤機制,使用者可以找出發(fā)生 了什么。

  • 插件機制(Plugin System):RabbitMQ 提供了許多插件,來從多方面進行擴展,也可以編 寫自己的插件。

RabbitMQ的消息模型

rabbitmq延遲隊列插件,java-rabbitmq,rabbitmq,分布式

rabbitmq延遲隊列插件,java-rabbitmq,rabbitmq,分布式

Why use rabbitMQ ?

下面,我以一個(花店)商家的角色來向大家形象地舉例:

異步

之前顧客來店里下單,我會叫顧客等一下,同時叫店員準備訂單,準備好送到顧客手上了顧客才能離開

現(xiàn)在顧客打電話給我:"我要買xxx,地址是:xxx,你幫我送一下"

我拿個小本子記下:顧客a,電話:xxx,地址:xxx

店員有空后就會準備訂單并配送

解耦

以前有新訂單時,我會親自找每一個店員(負責準備花束的,負責記賬的,負責送花的等),告訴他們有新訂單了,有空了處理一下

如果有店員入職,我通知的時候會多通知一個人;離職時,少通知一個人(維護一個需要通知的人員列表)

現(xiàn)在,有新訂單的時候,我只需要記到小本子上,店員有空了自己來看

削峰

去年七夕,很多電話打給我,我把每一個訂單告訴店員,但是店員忙不過來,客戶又一直打電話來催,最后店員累成狗直接罷工

今年七夕節(jié)我學乖了,電話打進來我會告訴顧客:"我知道了,會盡快安排處理",然后記到小本子上就行,店員有空時按順序來處理訂單就好

另外還有一種思路,引導客戶不一定要在七夕才開始下單,可以提前先買(淘寶的雙十一預售就是出于這樣的削峰思路)

以上是rabbitMQ解決的核心問題。

How to use rabbitMQ ?

基操安裝方式

MAC端

brew?install?rabbitmq

Windows端

  1. 安裝Erlang,下載地址:erlang.org/download/ot…

rabbitmq延遲隊列插件,java-rabbitmq,rabbitmq,分布式

  1. 安裝RabbitMQ,下載地址:dl.bintray.com/rabbitmq/al…

rabbitmq延遲隊列插件,java-rabbitmq,rabbitmq,分布式

  1. 安裝完成后,進入RabbitMQ安裝目錄下的sbin目錄

rabbitmq延遲隊列插件,java-rabbitmq,rabbitmq,分布式

  1. 在地址欄輸入cmd并回車啟動命令行,然后輸入以下命令啟動管理功能:

rabbitmq-plugins?enable?rabbitmq_management

rabbitmq延遲隊列插件,java-rabbitmq,rabbitmq,分布式

  1. 訪問地址查看是否安裝成功:http://localhost:15672/

rabbitmq延遲隊列插件,java-rabbitmq,rabbitmq,分布式

CentOS端

安裝erlang

#?rabbitmq依賴erlang?需要自己去自行下載
cd?/path/to/erlang-sound-code?&&?./configure?--prefix=/usr/local/erlang
make?&&?make?install?

vim?/etc/profile
#?添加
export?PATH=$PATH:/usr/local/erlang/bin

source?/etc/profile
#?輸入erl,會出現(xiàn)版本信息,即安裝成功


安裝rabbitmq

?#下載?abbitmq_server-3.8.16?并移動到/usr/local/下
vim?/etc/profile
?#?添加
export?PATH=$PATH:/usr/local/rabbitmq_server-3.8.16/sbin
source?/etc/profile

cd?/usr/local/rabbitmq_server-3.8.16/sbin?
#?啟動
./rabbitmq-server?start

功能實現(xiàn)

RabbitMQ實現(xiàn)延遲消息的方式有兩種,一種是使用死信隊列實現(xiàn),另一種是使用延遲插件實現(xiàn)。

死信隊列的實現(xiàn)網(wǎng)上較多,本文介紹更簡單的,使用延遲插件實現(xiàn)(mac環(huán)境,java版本)。

另外的安裝方式(建議使用這種)

首先準備需要用到的安裝文件及插件(rabbitmq_delayed_message_exchange),版本需要匹配,不匹配的版本可能裝不上或?qū)е录嫒輪栴}。

rabbitmq延遲隊列插件,java-rabbitmq,rabbitmq,分布式

本人使用的erl_25.0和rabbitMQ-3.10.0(可以到官網(wǎng)下載或者私信作者獲?。J褂眠@種方式安裝的優(yōu)點在于本地安裝和服務(wù)器安裝流程完全一致,不過服務(wù)器需要開放安全端口5672,15672視情況,一般建議測試環(huán)境開放,生產(chǎn)環(huán)境關(guān)閉。關(guān)注公眾號:碼猿技術(shù)專欄,回復關(guān)鍵詞:1111 獲取阿里內(nèi)部Java性能調(diào)優(yōu)手冊

安裝erl和rabbitMQ,具體步驟略(這個應(yīng)該沒人不會吧,逃~)。

將插件文件復制到RabbitMQ安裝目錄的plugins目錄下,執(zhí)行以下命令后重啟rabbitMQ:

rabbitmq-plugins?enable?rabbitmq_delayed_message_exchange

實現(xiàn)延遲消息

以一個實際業(yè)務(wù)場景舉例:當客服狀態(tài)為在線且3分鐘未回復客戶消息時,自動重啟im會話機器人接管會話。這是一個常見的延遲消息使用場景。

首先在pom.xml文件中添加AMQP相關(guān)依賴

<!--消息隊列相關(guān)依賴-->
<dependency>
????<groupId>org.springframework.boot</groupId>
????<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

application.yml添加RabbitMQ的相關(guān)配置

spring:
??rabbitmq:
????host:?localhost?#?rabbitmq的連接地址
????port:?5672?#?rabbitmq的連接端口號
????virtual-host:?/mall?#?rabbitmq的虛擬host
????username:?im?#?rabbitmq的用戶名
????password:?xxxxxx?#?rabbitmq的密碼
????publisher-confirms:?true?#如果對異步消息需要回調(diào)必須設(shè)置為true

接下來創(chuàng)建RabbitMQ的java配置,主要用于配置交換機、隊列和綁定關(guān)系

/**
?*?消息隊列配置
?*/
@Configuration
public?class?RabbitMqConfig?{
????/**
?????*?機器人消息重啟插件消息隊列所綁定的交換機
?????*/
????@Bean
????CustomExchange?chatPluginDirect()?{
????????//創(chuàng)建一個自定義交換機,可以發(fā)送延遲消息
????????Map<String,?Object>?args?=?new?HashMap<>();
????????args.put("x-delayed-type",?"direct");
????????return?new?CustomExchange(QueueEnum.QUEUE_RESET_MESSAGE_CANCEL.getExchange(),?"x-delayed-message",?true,?false,?args);
????}

????/**
?????*?機器人消息重啟插件隊列
?????*/
????@Bean
????public?Queue?chatPluginQueue()?{
????????return?new?Queue(QueueEnum.QUEUE_RESET_MESSAGE_CANCEL.getName());
????}

????/**
?????*?將機器人消息重啟插件隊列綁定到交換機
?????*/
????@Bean
????public?Binding?chatPluginBinding(CustomExchange?chatPluginDirect,?Queue?chatPluginQueue)?{
????????return?BindingBuilder
????????????????.bind(chatPluginQueue)
????????????????.to(chatPluginDirect)
????????????????.with(QueueEnum.QUEUE_RESET_MESSAGE_CANCEL.getRouteKey())
????????????????.noargs();
????}
}

創(chuàng)建一個消息的發(fā)出者,通過給消息設(shè)置x-delay頭來設(shè)置消息從交換機發(fā)送到隊列的延遲時間

/**
?*?機器人重啟隊列發(fā)出者
?*/
@Component
@Slf4j
public?class?ChatQueueSender?{
????private?static?Logger?LOGGER?=?LoggerFactory.getLogger(ChatQueueSender.class);
????@Autowired
????private?AmqpTemplate?amqpTemplate;

????public?void?sendMessageToChat(Long?cmid,?final?long?delayTimes)?{
????????//給延遲隊列發(fā)送消息
????????amqpTemplate.convertAndSend(QueueEnum.QUEUE_RESET_MESSAGE_CANCEL.getExchange(),?QueueEnum.QUEUE_RESET_MESSAGE_CANCEL.getRouteKey(),?cmid,?new?MessagePostProcessor()?{
????????????@Override
????????????public?Message?postProcessMessage(Message?message)?throws?AmqpException?{
????????????????//給消息設(shè)置延遲毫秒值
????????????????message.getMessageProperties().setHeader("x-delay",?delayTimes);
????????????????return?message;
????????????}
????????});
????}
}

創(chuàng)建一個消息的接收者,用于處理延遲插件隊列中的消息。

/**
?*?機器人重啟隊列處理者
?*/
@Component
@Slf4j
@RabbitListener(queues?=?"im.chat.cancel")
public?class?ChatQueueReceiver?{
????@Autowired
????private?ChatRestartRobotService?chatRestartRobotService;

????@RabbitHandler
????public?void?handleOnChat(Long?cmid)?{
//????????log.info("機器人會話重啟");
????????chatRestartRobotService.restartRobot(cmid);
????}
}

最后,在對應(yīng)的地方調(diào)用即可:

rabbitmq延遲隊列插件,java-rabbitmq,rabbitmq,分布式文章來源地址http://www.zghlxwxcb.cn/news/detail-706037.html

 

到了這里,關(guān)于RabbitMQ使用延遲插件,代碼量直接減少一半!的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • RabbitMQ+springboot用延遲插件實現(xiàn)延遲消息的發(fā)送

    RabbitMQ+springboot用延遲插件實現(xiàn)延遲消息的發(fā)送

    延遲隊列:其實就是死信隊列中消息過期的特殊情況 延遲隊列應(yīng)用場景: 可以用死信隊列來實現(xiàn),不過死信隊列要等上一個消息消費成功,才會進行下一個消息的消費,這時候就需要用到延遲插件了,不過要線在docker上裝一個插件 前置條件是在Docker中部署過RabbitMq。 1、打開

    2024年02月10日
    瀏覽(24)
  • [超詳細]RabbitMQ安裝延遲消息插件

    [超詳細]RabbitMQ安裝延遲消息插件

    Community Plugins — RabbitMQ https://www.rabbitmq.com/community-plugins.html 進入以上地址以后,找到Routing里邊的rabbitmq_delayed_message_exchange然后點擊Releases ? 下載完成以后 ?然后解壓到plugins文件中 ?然后再sbin目錄下運行?rabbitmq-plugins enable rabbitmq_delayed_message_exchange ?查看交換機類型中是否有

    2024年02月07日
    瀏覽(25)
  • liunx+docker+rabbitmq安裝延遲隊列插件

    liunx+docker+rabbitmq安裝延遲隊列插件

    前言 在這篇文章中,我們將討論如何在 Linux 系統(tǒng)上安裝 Docker 和 RabbitMQ,并設(shè)置延遲隊列。 Docker 是一個開放源代碼的軟件,它可以使應(yīng)用程序的部署更加簡單,而 RabbitMQ 是一個開放源代碼的消息代理軟件,它接受和轉(zhuǎn)發(fā)消息。 延遲隊列是一種在特定的延遲之后才開始處理

    2024年02月11日
    瀏覽(19)
  • Docker版RabbitMQ安裝延遲隊列插件及延遲隊列項目應(yīng)用實戰(zhàn)

    Docker版RabbitMQ安裝延遲隊列插件及延遲隊列項目應(yīng)用實戰(zhàn)

    在項目中經(jīng)常有延遲業(yè)務(wù)處理的背景,此時可以借助于Rabbitmq的延遲隊列進行實現(xiàn),但Rabbitmq本身并不支持延遲隊列,但可以通過安裝插件的方式實現(xiàn)延遲隊列 首先確認目前項目使用的Rabbitmq的版本,這里博主的版本是3.9.15的。 訪問 Rabbitmq的github網(wǎng)址,檢索 delay 找到插件 rabb

    2024年02月02日
    瀏覽(27)
  • RabbitMQ延遲插件【安裝windows/Linux(Docker)】

    RabbitMQ延遲插件【安裝windows/Linux(Docker)】

    死信隊列: 就是正常消費者在一定時間內(nèi)沒有進行消費的消息會發(fā)送到死信隊列中,而會有消費者在監(jiān)聽死信隊列。消費者在 消息被拒絕、消息TTL過期、隊列達到最大長度 這三種情況下 ,消息會被消費者轉(zhuǎn)發(fā)到死信隊列。 延遲隊列: 其實就是死信隊列中消息過期的特殊情

    2024年02月09日
    瀏覽(17)
  • Docker中為RabbitMQ安裝rabbitmq_delayed_message_exchange延遲隊列插件

    Docker中為RabbitMQ安裝rabbitmq_delayed_message_exchange延遲隊列插件

    1、前言 rabbitmq_delayed_message_exchange是一款向RabbitMQ添加延遲消息傳遞(或計劃消息傳遞)的插件。 插件下載地址:https://www.rabbitmq.com/community-plugins.html 1、下載插件 首先需要確定我們當前使用的RabbitMQ的版本,我們可以直接登錄Web端的管理界面查看版本 ? 也可以在RabbitMQ容器中

    2024年02月12日
    瀏覽(27)
  • Linux安裝rabbitMq RPM安裝 以及帶延遲插件

    Linux安裝rabbitMq RPM安裝 以及帶延遲插件

    文檔中rabbitmq下載鏈接 以及延遲插件 網(wǎng)盤下載 目前下載文件中版本已經(jīng)過多個服務(wù)器安裝測試 完全成功 rpm -ivh openssl-libs-1.0.2k-19.el7.x86_64.rpm --force --nodeps rpm -ivh libnsl-2.34-28.el9_0.x86_64.rpm --force --nodeps rpm -ivh erlang-23.3-2.el7.x86_64.rpm --force --nodeps rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm --fo

    2024年02月03日
    瀏覽(24)
  • RabbitMQ-延遲隊列的使用

    RabbitMQ-延遲隊列的使用

    目錄 一、使用場景 ?二、第一種方式:創(chuàng)建具有超時功能且綁定死信交換機的消息隊列 三、第二種方式:創(chuàng)建通用延時消息 四、第三種方式:使用rabbitmq的延時隊列插件,實現(xiàn)同一個隊列中有多個不同超時時間的消息,并按時間超時順序出隊 4.1?下載延遲插件 4.2?安裝插件

    2024年04月14日
    瀏覽(17)
  • RabbitMQ系列(27)--RabbitMQ使用Federation Exchange(聯(lián)邦交換機)解決異地訪問延遲問題

    RabbitMQ系列(27)--RabbitMQ使用Federation Exchange(聯(lián)邦交換機)解決異地訪問延遲問題

    前言: (broker北京)、(broker深圳)彼此之間相距甚遠,網(wǎng)絡(luò)延遲是一個不得不面對的問題。有一個在北京的業(yè)務(wù)(Client北京)需要連接(broker北京),向其中的交換器exchangeA發(fā)送消息,此時的網(wǎng)絡(luò)延遲很小,(Client北京)可以迅速將消息發(fā)送至exchangeA 中,就算在開啟了publisherconfirm機制或

    2024年02月13日
    瀏覽(18)
  • 【RabbitMQ】 RabbitMQ 消息的延遲 —— 深入探索 RabbitMQ 的死信交換機,消息的 TTL 以及延遲隊列

    【RabbitMQ】 RabbitMQ 消息的延遲 —— 深入探索 RabbitMQ 的死信交換機,消息的 TTL 以及延遲隊列

    消息隊列是現(xiàn)代分布式應(yīng)用中的關(guān)鍵組件,用于實現(xiàn)異步通信、解耦系統(tǒng)組件以及處理高并發(fā)請求。消息隊列可以用于各種應(yīng)用場景,包括任務(wù)調(diào)度、事件通知、日志處理等。在消息隊列的應(yīng)用中,有時需要實現(xiàn)消息的延遲處理、處理未能成功消費的消息等功能。 本文將介紹

    2024年02月05日
    瀏覽(95)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包