佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > redis中隊列消息實現(xiàn)應用解耦的方法

redis中隊列消息實現(xiàn)應用解耦的方法

熱門標簽:地方門戶網(wǎng)站 AI電銷 服務外包 Linux服務器 鐵路電話系統(tǒng) 百度競價排名 網(wǎng)站排名優(yōu)化 呼叫中心市場需求

消息隊列的場景

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

過度耦合的缺點:php應用中,過度的耦合使得系統(tǒng)拓展性變?nèi)?,?lián)動性錯誤。

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

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

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

運行。

關鍵點:

1、如果redis服務器掛掉了怎么辦?。?/strong>

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

2、如何實現(xiàn)傳統(tǒng)方式那樣實時入庫?。?/strong>

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

訂閱代碼sub.php

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

發(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é)

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

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

標簽:蘭州 黃山 銅川 湖南 湘潭 仙桃 崇左 衡水

巨人網(wǎng)絡通訊聲明:本文標題《redis中隊列消息實現(xiàn)應用解耦的方法》,本文關鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    丰台区| 奎屯市| 会理县| 镇赉县| 木兰县| 海阳市| 高青县| 宁晋县| 河源市| 泸溪县| 荆州市| 寿宁县| 于田县| 嵊州市| 繁峙县| 沂南县| 马尔康县| 滨海县| 桐梓县| 乌鲁木齐市| 巩留县| 通道| 门头沟区| 曲沃县| 洛阳市| 绥滨县| 华容县| 明溪县| 克山县| 宣武区| 凌云县| 合作市| 沂水县| 白城市| 班玛县| 南城县| 伊春市| 衡阳县| 台州市| 天全县| 安康市|