只需要下面簡單的幾行代碼泪电,我們就可以把我們本地數(shù)據(jù)發(fā)送到 ActiveMQ 上面去般妙。
defsend_mq(data):? ? hosts = [(AMQHOST, AMQPORT)]? ? conn = stomp.Connection(host_and_ports=hosts, auto_content_length=False)? ? conn.connect(username=AMQUSER, passcode=AMQPASS, wait=True)? ? conn.send(body=json.dumps(data), destination=TOPICNAME)? ? conn.disconnect()
上面需要根據(jù)你自己的服務器配置情況配置參數(shù)。
在跨平臺數(shù)據(jù)交換的時候相速,我們其實有很多可以實現(xiàn)的方法碟渺。
我們可以構建一個 API 服務器,讓不同的客戶端調用不同的端口來實現(xiàn)數(shù)據(jù)交換突诬。
我們也可以使用消息服務器苫拍,讓不同的工具獲得自己的數(shù)據(jù)后發(fā)送約定好的數(shù)據(jù)格式到消息服務器上,然后讓我們后臺部署的數(shù)據(jù)服務器來從消息服務器上獲得數(shù)據(jù)并且進行處理旺隙。
使用消息服務器的好處是顯而易見的绒极,當有多個客戶端的時候,我們可以通過消息服務器來作為緩存蔬捷。
非常重要的一個作用就是解耦垄提。
用戶的數(shù)據(jù)只負責獲得數(shù)據(jù),比如說我們常用的例子周拐,我們會使用不同的工具來做爬蟲程序铡俐。
當爬蟲獲得數(shù)據(jù)后,爬蟲程序將會把已經(jīng)獲得數(shù)據(jù)組裝成消息妥粟,然后發(fā)送到消息服務器上审丘。
相比較我們讓爬蟲程序直接調用接口,這樣的耦合度更低勾给。
爬蟲程序不需要了解接口是怎么定義的滩报,只需要發(fā)送我們約定好的數(shù)據(jù)格式就行。
同時假設我們有多個爬蟲程序的話锦秒,多個程序的 API 調用將會對后端的 API 程序造成負載露泊,而且爬蟲程序的啟動時間是不一樣的,有可能短期有大量的數(shù)據(jù)涌入旅择,這樣我們可以通過消息服務器讓程序自動運行惭笑,當沒有消息的時候,后端程序屬于空閑,可以消費積壓的消息沉噩。
當大量消息涌入的時候捺宗,因為消息服務器的消峰功能,不會讓后端的數(shù)據(jù)處理程序出現(xiàn)問題川蒙,保持更好的吞吐量蚜厉。