首頁 > 軟體

Ubuntu 16.04設定 RabbitMQ 服務

2020-06-16 16:54:46

1.首先,新增相應的源

Ubuntu 16.04 下

echo "deb https://dl.bintray.com/rabbitmq/debian xenial main" | sudo tee /etc/apt/sources.list.d/bintray.rabbitmq.list

在 Ubuntu 17.10 下

echo "deb https://dl.bintray.com/rabbitmq/debian artful main" | sudo tee /etc/apt/sources.list.d/bintray.rabbitmq.list

2.設定公鑰

wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -

3. 更新並安裝服務

sudo apt-get update

sudo apt-get install rabbitmq-serve

安裝結束後預設是執行的

invoke-rc.d rabbitmq-server stop/start  //可以執行,該程式碼進行開啟或關閉

開啟頁面管理

rabbitmq-plugins enable rabbitmq_management

執行該程式碼即可存取 http://localhost:15672/ 進行頁面管理

以上,安裝RabbitMQ 服務就完成了。

RabbitMQ一些基本函數介紹

1.連線

// 連線服務,獲取控制代碼
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
 
$connection->isConnected() or die("Cannot connect to the broker!n");
 
$channel = $connection->channel();

2.定義

//direct:在direct型別的exchange中,只有這兩個routingkey完全相同,exchange才會選擇對應的binging進行訊息路由。
//fanout:此exchange的路由規則很簡單直接將訊息路由到所有系結的佇列中,無須對訊息的routingkey進行匹配操作。
//topic:此型別exchange和上面的direct型別差不多,這裡的routingkey可以有萬用字元:'*','#' ,其中'*'表示匹配一個單詞,
// '#'則表示匹配沒有或者多個單詞,對 key 進行模式匹配,比如 ab* 可以傳遞到所有 ab* 的 queue
// headers : 不常用
$channel->exchange_declare('demo', 'direct'); //宣告交換機,相當於定義規則

//passive: 消極處理, 判斷是否存在佇列,存在則返回,不存在直接丟擲 PhpAmqpLibExceptionAMQPProtocolChannelException 異常
//durable:true、false true:在伺服器重新啟動時,能夠存活
//exclusive :是否為當前連線的專用佇列,在連線斷開後,會自動刪除該佇列,生產環境中應該很少用到吧。
//autodelete:當沒有任何消費者使用時,自動刪除該佇列
//nowait : 相當於一個async版的宣告佇列,可以看到是沒有返回的。調完方法就結束。也不等佇列建立結果
//auto_delete: 當所有消費用戶端連線斷開後,是否自動刪除佇列
//arguments: 附加引數,規則設定
$channel->queue_declare('kzae', false, false, false, false);

//佇列系結交換機
$channel->queue_bind('hello','amq.direct', 'bbb');

3.傳送

//mandatory標誌告訴伺服器至少將該訊息route到一個佇列中,否則將訊息返還給生產者;
//immediate標誌告訴伺服器如果該訊息關聯的queue上有消費者,則馬上將訊息投遞給它,如果所有queue都沒有消費者,
//直接把訊息返還給生產者,不用將訊息入佇列等待消費者了
$channel->basic_publish($msg, 'amq.direct', 'bbb');

4.接收

//採用 no-ack 的方式進行確認,也就是說,每次 Consumer 接到資料後,不管是否處理完成,RabbitMQ Server 會立即把這個 Message 標記為完成,然後從 Queue 中刪除
$channel->basic_consume('hello', '', false, false, false, false, $callback);

5.回撥

$callback = function(PhpAmqpLibMessageAMQPMessage $msg) {
    echo " [x] Received ", $msg->body, "n";
 
    //delivery_info['channel']: PhpAmqpLibChannelAMQPChannel
    var_dump($msg->delivery_info);
    $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']); //確認ack
};

6. 結束

$channel->close();
$connection->close();

CentOS 7.2 下 RabbitMQ 叢集搭建 http://www.linuxidc.com/Linux/2016-12/137812.htm 

CentOS7環境安裝使用專業的訊息佇列產品RabbitMQ http://www.linuxidc.com/Linux/2016-11/13673.htm 

RabbitMQ入門教學  http://www.linuxidc.com/Linux/2015-02/113983.htm 

在CentOS7上安裝RabbitMQ 詳解  http://www.linuxidc.com/Linux/2017-05/143765.htm 

NServiceBus 結合 RabbitMQ 使用教學  http://www.linuxidc.com/Linux/2017-05/143787.htm 

CentOS 7下RabbitMQ叢集安裝設定  http://www.linuxidc.com/Linux/2017-10/147707.htm 

RabbitMQ實戰:高效部署分散式訊息佇列 中文PDF掃描版  http://www.linuxidc.com/Linux/2017-10/147592.htm 

CentOS7上RabbitMQ安裝詳述  http://www.linuxidc.com/Linux/2017-12/149202.htm 

RabbitMQ分散式叢集架構和高可用性(HA)  http://www.linuxidc.com/Linux/2017-12/149466.htm

CentOS 7下安裝設定RabbitMQ詳細教學  http://www.linuxidc.com/Linux/2018-01/150600.htm


IT145.com E-mail:sddin#qq.com