歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> RabbitMQ初探

RabbitMQ初探

日期:2017/2/28 14:30:40   编辑:Linux教程

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 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved