前言
RabbitMQ是一個在AMQP基礎(chǔ)上完整的,可復(fù)用的企業(yè)消息系統(tǒng)。他遵循Mozilla Public License開源協(xié)議。
MQ全稱為Message Queue, 消息隊(duì)列(MQ)是一種應(yīng)用程序?qū)?yīng)用程序的通信方法。應(yīng)用程序通過讀寫出入隊(duì)列的消息(針對應(yīng)用程序的數(shù)據(jù))來通信,而無需專用連接來鏈接它們。消 息傳遞指的是程序之間通過在消息中發(fā)送數(shù)據(jù)進(jìn)行通信,而不是通過直接調(diào)用彼此來通信,直接調(diào)用通常是用于諸如遠(yuǎn)程過程調(diào)用的技術(shù)。排隊(duì)指的是應(yīng)用程序通過 隊(duì)列來通信。隊(duì)列的使用除去了接收和發(fā)送應(yīng)用程序同時執(zhí)行的要求。
應(yīng)用場景:
RabbitMQ無疑是目前最流行的消息隊(duì)列之一,對各種語言環(huán)境的支持也很豐富,作為一個.NET developer有必要學(xué)習(xí)和了解這一工具。消息隊(duì)列的使用場景大概有3種:
1、系統(tǒng)集成,分布式系統(tǒng)的設(shè)計(jì)。各種子系統(tǒng)通過消息來對接,這種解決方案也逐步發(fā)展成一種架構(gòu)風(fēng)格,即“通過消息傳遞的架構(gòu)”。
2、當(dāng)系統(tǒng)中的同步處理方式嚴(yán)重影響了吞吐量,比如日志記錄。假如需要記錄系統(tǒng)中所有的用戶行為日志,如果通過同步的方式記錄日志勢必會影響系統(tǒng)的響應(yīng)速度,當(dāng)我們將日志消息發(fā)送到消息隊(duì)列,記錄日志的子系統(tǒng)就會通過異步的方式去消費(fèi)日志消息。
     3、系統(tǒng)的高可用性,比如電商的秒殺場景。當(dāng)某一時刻應(yīng)用服務(wù)器或數(shù)據(jù)庫服務(wù)器收到大量請求,將會出現(xiàn)系統(tǒng)宕機(jī)。如果能夠?qū)⒄埱筠D(zhuǎn)發(fā)到消息隊(duì)列,再由服務(wù)器去消費(fèi)這些消息將會使得請求變得平穩(wěn),提高系統(tǒng)的可用性。
一、安裝環(huán)境
首先是在 Linux 上安裝 rabbitmq
# 環(huán)境為CentOS 7yum install rabbitmq-server # 安裝RabbitMQsystemctl start rabbitmq-server # 啟動systemctl enable rabbitmq-server # 開機(jī)自啟systemctl stop firewall-cmd # 臨時關(guān)閉防火墻
然后用 pip 安裝 Python3 的開發(fā)包
pip3 install pika
安裝好軟件之后可以訪問http://115.xx.xx.xx:15672/來訪問自帶的 web 頁面來查看和管理 RabbitMQ。默認(rèn)管理員的用戶密碼都是guest
二、簡單的向隊(duì)列中加入消息
#!/usr/bin/env python3# coding=utf-8# @Time : 2017/6/13 19:25# @Author : Shawn# @Blog : https://blog.just666.cn# @Email : shawnbluce@gmail.com# @purpose : RabbitMQ_Producerimport pika# 創(chuàng)建連接對象connection = pika.BlockingConnection(pika.ConnectionParameters(host='115.xx.xx.xx'))# 創(chuàng)建頻道對象channel = connection.channel()# 指定一個隊(duì)列,如果該隊(duì)列不存在則創(chuàng)建channel.queue_declare(queue='test_queue')# 提交消息for i in range(10): channel.basic_publish(exchange='', routing_key='test_queue', body='hello,world' + str(i)) print("sent...")# 關(guān)閉連接connection.close()            
新聞熱點(diǎn)
疑難解答
圖片精選