濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > redis中隊(duì)列消息實(shí)現(xiàn)應(yīng)用解耦的方法

redis中隊(duì)列消息實(shí)現(xiàn)應(yīng)用解耦的方法

熱門標(biāo)簽:地圖標(biāo)注工廠入駐 一個(gè)地圖標(biāo)注多少錢 四川穩(wěn)定外呼系統(tǒng)軟件 b2b外呼系統(tǒng) 400電話辦理的口碑 高碑店市地圖標(biāo)注app 廊坊外呼系統(tǒng)在哪買 南京手機(jī)外呼系統(tǒng)廠家 臺(tái)灣電銷

消息隊(duì)列的場(chǎng)景

我們都知道,消息是在兩臺(tái)計(jì)算機(jī)之間傳送的數(shù)據(jù)單位,這個(gè)“消息”可以非常簡(jiǎn)單,例如只包含文本字符串,也可以更復(fù)雜,可能包含嵌入對(duì)象。而所謂的“消息隊(duì)列”是在消息的傳輸過(guò)程中保存消息的容器。在web程序中,可能我們需要將用戶的請(qǐng)求數(shù)據(jù)更新或者添加到數(shù)據(jù)庫(kù)中,但是在高炳發(fā)的情況下,雖然作為用戶的我們不知道后臺(tái)是什么原因,但是依舊會(huì)抱怨或者吐槽這個(gè)程序反應(yīng)緩慢,比如在過(guò)去的幾年里,你有沒有吐槽過(guò)12306搶票很難?反應(yīng)很慢?有沒有在使用某個(gè)程序的時(shí)候收到“service is too busy”,而這其實(shí)是因?yàn)楫?dāng)時(shí)的并發(fā)訪問過(guò)量,超過(guò)了系統(tǒng)的最大負(fù)載能力。當(dāng)然我們可以通過(guò)添加服務(wù)器集群中服務(wù)器的數(shù)量來(lái)增加程序的負(fù)載能力。

過(guò)度耦合的缺點(diǎn):php應(yīng)用中,過(guò)度的耦合使得系統(tǒng)拓展性變?nèi)酰?lián)動(dòng)性錯(cuò)誤。

今天我給大家介紹的是利用redis的隊(duì)列消息實(shí)現(xiàn)模塊間的解耦。

應(yīng)用場(chǎng)景:用戶在采購(gòu)模塊下單買了一批貨物回來(lái),簽收時(shí)要在倉(cāng)庫(kù)模塊添加相應(yīng)的庫(kù)存,普通的做法就是在簽收完成的時(shí)候通過(guò)接口給倉(cāng)庫(kù)模塊推送數(shù)據(jù)執(zhí)行入庫(kù)操作。但是這么做如果倉(cāng)庫(kù)模塊發(fā)送錯(cuò)誤,沒有入庫(kù)成功就會(huì)導(dǎo)致采購(gòu)模塊簽收失敗,這就是耦合給系統(tǒng)帶來(lái)的缺點(diǎn)。

解決方案:運(yùn)用php+redis隊(duì)列消息的技術(shù),當(dāng)用戶簽收成功的時(shí)候,把數(shù)據(jù)放入隊(duì)列中,入列成功采購(gòu)模塊則返回簽收成功的提示給用戶,后續(xù)的操作都不需要采購(gòu)模塊操心,然后倉(cāng)庫(kù)系統(tǒng)可以通過(guò)redis的訂閱發(fā)布模式來(lái)進(jìn)行監(jiān)聽,當(dāng)有數(shù)據(jù)入列,則倉(cāng)庫(kù)系統(tǒng)就執(zhí)行入庫(kù)邏輯代碼的

運(yùn)行。

關(guān)鍵點(diǎn):

1、如果redis服務(wù)器掛掉了怎么辦???

在采購(gòu)模塊的簽收邏輯代碼中做判斷,如果入列成功則返回簽收完成,如果入列失敗這運(yùn)行傳統(tǒng)方法,通過(guò)接口入庫(kù)的方法。如果redis也掛了,倉(cāng)庫(kù)模塊也掛了怎么辦啊,那你就收拾包袱回家吧。

2、如何實(shí)現(xiàn)傳統(tǒng)方式那樣實(shí)時(shí)入庫(kù)啊?

采用redis的訂閱發(fā)布模式就可以解決。訂閱的代碼放在倉(cāng)庫(kù)模塊,發(fā)布的代碼放在采購(gòu)模塊。

訂閱代碼sub.php

?php
$redis = new Redis();
$redis->connect('localhost', 6379);
$redis->subscribe(['ruku'], function ($redis, $chan, $msg) {//訂閱入庫(kù)頻道   if($msg==2500){   //如果監(jiān)聽到有發(fā)布信息則從隊(duì)列中拿取信息進(jìn)行入庫(kù)操作    。。。。。。。  }  
});

發(fā)布代碼pub.php

?php
$redis = new Redis();
$redis->connect('localhost', 6379);
$order = ['id' => 1, 'name' => '小米6', 'price' => 2499, 'created_at' => '2017-07-14'];$redis->lpush('order',$order);
$redis->publish("ruku", 2500);

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • 詳解Redis用鏈表實(shí)現(xiàn)消息隊(duì)列
  • SpringBoot利用redis集成消息隊(duì)列的方法
  • PHP使用php-resque庫(kù)配合Redis實(shí)現(xiàn)MQ消息隊(duì)列的教程
  • Java利用Redis實(shí)現(xiàn)消息隊(duì)列的示例代碼
  • phpredis提高消息隊(duì)列的實(shí)時(shí)性方法(推薦)
  • PHP基于Redis消息隊(duì)列實(shí)現(xiàn)發(fā)布微博的方法
  • php+redis消息隊(duì)列實(shí)現(xiàn)搶購(gòu)功能
  • 深入理解redis分布式鎖和消息隊(duì)列
  • 詳解redis是如何實(shí)現(xiàn)隊(duì)列消息的ack
  • PHP+Redis 消息隊(duì)列 實(shí)現(xiàn)高并發(fā)下注冊(cè)人數(shù)統(tǒng)計(jì)的實(shí)例

標(biāo)簽:泰州 河源 伊春 畢節(jié) 甘南 定州 南寧 拉薩

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《redis中隊(duì)列消息實(shí)現(xiàn)應(yīng)用解耦的方法》,本文關(guān)鍵詞  redis,中,隊(duì)列,消息,實(shí)現(xiàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《redis中隊(duì)列消息實(shí)現(xiàn)應(yīng)用解耦的方法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于redis中隊(duì)列消息實(shí)現(xiàn)應(yīng)用解耦的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    开封市| 九江市| 丰都县| 青州市| 盈江县| 晋城| 侯马市| 定远县| 太仓市| 修水县| 望奎县| 禹州市| 故城县| 广元市| 高碑店市| 剑川县| 武强县| 许昌市| 白水县| 左云县| 抚州市| 辰溪县| 长武县| 麦盖提县| 延庆县| 尚志市| 扬中市| 巴彦淖尔市| 闽清县| 翁源县| 丽水市| 涿州市| 库尔勒市| 芒康县| 台北县| 济源市| 武川县| 崇左市| 洛扎县| 河西区| 呼玛县|