不喜歡用 MQ,
如果是同一個系統內的不同模塊,可以用資料庫表,來傳遞訊息;
如果是不同系統間資料介面,可以用 webservice(同步,現在好像是 gRPC 有點熱)、SFTP/FTP協議(異步) 進行資料交換,
看不出有任何使用 MQ 的需要,除非甲方指定,看在錢的面子上,勉為其難去用一下,
MQ 是異步通訊技術,與之相對的是 SFTP/FTP ,相比較而言,MQ 毫無優勢,
速度、簡易性、穩定性、標準化等各方面,MQ 完敗,
SFTP/FTP 也能輕松削峰與限流(MQ 介紹檔案常說的優點),發送方快速發,接收方慢速處理、即時或滯后處理,都可以,
使用接收方webservice,也可以收到資料后先保存在介面表中,后慢速處理,整體也相當于異步了,也能削峰與限流,
MQ 起初就是幾個 Java 軟體廠商弄出來,只為賣錢,雖然后來微軟與開源社區跟進,微軟甚至把它做進 Windows 自帶組件,實際上沒有必要用這種技術,
微軟現在也不怎么提了,Java /C#書籍提的也少了,
但執迷于其中的人,仍舊不少,特別是 Java 圈的,而 C# 圈的基本不用它,
我覺得,有時候多學幾門開發語言,交叉對比,對于技術選型,很有幫助,
比如,我做軟體專案,java-web 與 asp.net 反復交叉,時間長了,就知道 web 后端 MVC 領域,用 Apache Velocity (java-web) 與 NVelocity (asp.net) 是最優解,而微軟官方推的各種 MVC 技術、Sun/Oracle 官方推的各種 MVC 技術,包括 Google Web Toolkit (以純后端 java 代碼寫程式,之后部分代碼將編譯、轉換行成前端 html/js, 思路古怪),都可以扔在一邊了,
----2022/01/20,基于答復來補充:
補充一下,用 mq 的人,往往期望,借助 mq, 做到介面資料"不重復、不遺漏"地發到另一個系統,
一旦使用了 MQ, 理論上講,無論如何,都是做不到資料"不重復、不遺漏"的,
考慮 system_a 發資料到 mq_x, 而 system_b 從 mq_x 收資料,分析如下:
1) system_a 發資料到 mq_x, 正常情況下,mq_x 收到資料、反饋"收到",system_a 更改本系統某個資料狀態為已發送,
極端情況下,mq_x 反饋"收到"、system_a 更改本地資料狀態失敗,然后再來一次,資料就發重復了,
2) system_b 從 mq_x 收資料, 正常操作,有兩類可能:
2.1, 從 mq_x 彈出一個資料,system_b 保存資料,
極端情況下, mq_x 彈出資料成功、system_b 保存資料失敗,資料丟失,
2.2 從 mq_x 佇列頂部/底部取一個資料,system_b 保存資料,system_b 通知 mq_x 刪一個資料,
極端情況,mq_x 取資料成功、system_b 保存成功、system_b 通知 mq_x 刪資料時網路斷開,之后 system_b 會收到重復資料,
根源是 mq 操作,與資料庫操作,合在一起無法做成一個技術上的 transaction(整個流程多個操作,要么一起成功、要么一起失敗),
---- 歡迎轉載,轉載請注明出處,此博客同時發表于 https://my.oschina.net/jacklondon ,https://www.cnblogs.com/jacklondon/,https://www.zheguisoft.com/staff_blogs/jacklondon_chen ,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/417095.html
標籤:其他
上一篇:我覺得 MQ 無用的理由
