1. MQ是什麼
MQ全稱為Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通信方法。應用程序通過寫和檢索出入列隊的針對應用程序的數據(消息)來通信,而無需專用連接來鏈接它們。消 息傳遞指的是程序之間通過在消息中發送數據進行通信,而不是通過直接調用彼此來通信,直接調用通常是用於諸如遠程過程調用的技術。排隊指的是應用程序通過 隊列來通信。隊列的使用除去了接收和發送應用程序同時執行的要求。其中較為成熟的MQ產品有IBM WEBSPHERE MQ。
2. MQ的特點
MQ的消費-生產者模型的一個典型的代表,一端往消息隊列中不斷的寫入消息,而另一端則可以讀取或者訂閱隊列中的消息。MQ和JMS類似,但不同的是JMS是SUN JAVA消息中間件服務的一個標准和API定義,而MQ則是遵循了AMQP協議的具體實現和產品。
3. 使用場景
最近在項目中,將一些無需即時返回且耗時的操作提取出來,進行了異步處理,而這種異步處理的方式大大的節省了服務器的請求響應時間,從而提高了系統的吞吐量。
4. RabbitMQ是什麼
rabbitMQ是一個在AMQP基礎上完整的,可服用的企業消息系統。他遵循Mozilla Public License開源協議。
5. RabbitMQ安裝
5.1) 安裝ERLANG
在CentOS上編譯安裝Erlang R15B http://www.linuxidc.com/Linux/2012-03/57663.htm
在 CentOS 5.7 上通過 YUM 安裝 Erlang 過程 http://www.linuxidc.com/Linux/2012-12/75622.htm
CentOS 5.5 下源代碼編譯安裝 Erlang http://www.linuxidc.com/Linux/2011-07/39156.htm
首先,因為RabbitMQ由ERLANG實現,下載ERLANG(http://www.erlang.org/download.html)源代碼。
解壓源代碼至ERLANG至文件夾$ERLANG
安裝依賴包:
Yum install tk
Yun install tcl
Yum install unixODBC
進入$ERLANG.編譯ERLANG
./configure –prefix=/usr/local/erlang
./make
./make install
並將erlang bin目錄加至PATH
5.2) 安裝rabbitMQ
下載RabbitMQ(http://www.rabbitmq.com/download.html),解壓至$RMQ。
啟動RabbitMQ
./bin/rabbitmq-server
6. 編寫RabbitMQ生產者客戶端
package org.corey.mq;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.ConnectionParameters;
import com.rabbitmq.client.MessageProperties;
public class MQTestor {
public static void main(String[] args) throws Exception {
ConnectionParameters params = new ConnectionParameters();
params.setUsername("guest");
params.setPassword("guest");
params.setVirtualHost("/");
params.setRequestedHeartbeat(0);
ConnectionFactory factory = new ConnectionFactory(params);
Connection conn = factory.newConnection("192.168.1.101", 5672);
Channel channel = conn.createChannel();
channel.exchangeDeclare("ex1", "direct", true);
channel.queueDeclare("q1",true);
channel.queueBind("q1", "ex1", "m1");
byte[] msg = "hello world".getBytes();
channel.basicPublish("ex1", "m1", MessageProperties.PERSISTENT_TEXT_PLAIN, msg);
channel.close();
conn.close();
}
}
7. 編寫消費者客戶端
ConnectionParameters params = new ConnectionParameters();
params.setUsername("guest");
params.setPassword("guest");
params.setVirtualHost("/");
params.setRequestedHeartbeat(0);
ConnectionFactory factory = new ConnectionFactory(params);
Connection conn = factory.newConnection("192.168.1.101", 5672);
Channel channel = conn.createChannel();
GetResponse res=channel.basicGet("q1", false);
if(res!=null){
System.out.println(new String(res.getBody()));
channel.basicAck(res.getEnvelope().getDeliveryTag(), false);
}else{
System.out.println("No message!");
}
8. RabbitMQ的幾個概念
Exchange:交換機,決定了消息路由規則;
Queue:消息隊列;
Channel:進行消息讀寫的通道;
Bind:綁定了Queue和Exchange,意即為符合什麼樣路由規則的消息,將會放置入哪一個消息隊列;
9. RabbitMQ消息持久化
1) 將交換機置為可持久;
2) 將通道置為可持久
3) 消息發送時設置可持久。
當我們“生產”了一條可持久化的消息,嘗試中斷MQ服務,啟動消費者獲取消息,消息依然能夠恢復。相反,則拋出異常。
CentOS 5.6 安裝RabbitMQ http://www.linuxidc.com/Linux/2013-02/79508.htm
RabbitMQ客戶端C++安裝詳細記錄 http://www.linuxidc.com/Linux/2012-02/53521.htm
用Python嘗試RabbitMQ http://www.linuxidc.com/Linux/2011-12/50653.htm
RabbitMQ集群環境生產實例部署 http://www.linuxidc.com/Linux/2012-10/72720.htm
Ubuntu下PHP + RabbitMQ使用 http://www.linuxidc.com/Linux/2010-07/27309.htm
在CentOS上安裝RabbitMQ流程 http://www.linuxidc.com/Linux/2011-12/49610.htm
RabbitMQ 的詳細介紹:請點這裡
RabbitMQ 的下載地址:請點這裡