成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

php-amqplib庫操作RabbitMQ

Godtoy / 899人閱讀

摘要:安裝操作庫在你的項(xiàng)目目錄下的文件中增加下面內(nèi)容增加這行然后接著執(zhí)行。分別為規(guī)則說明精準(zhǔn)推送廣播。推送到綁定到此交換機(jī)下的所有隊(duì)列組播。

mq的安裝和php的擴(kuò)扎在另外文章說明


RabbitMQ基本原理

首先,建議去大概了解下RabbitMQ(以下簡稱mq)的基本工作原理,可以參考這篇文章
最主要的幾個(gè)對象如下

對象名稱
borker 相當(dāng)于mq server
channel 通道或者頻道
exchange 交換機(jī)
queue 隊(duì)列
vhost 虛擬主機(jī)(項(xiàng)目隊(duì)列隔離使用)

這幾個(gè)對象在上面的文章說描述的已經(jīng)非常清楚,這里不要敘述了。

安裝操作庫

在你的項(xiàng)目目錄下的composer.json文件中增加下面內(nèi)容

{
  "require": {
      "php-amqplib/php-amqplib": "2.7.*" //增加這行
  }
}

然后接著執(zhí)行composer update php-amqplib/php-amqplib。更加方便的做法是如果你的項(xiàng)目已經(jīng)有了composer.json那么執(zhí)行執(zhí)行
composer require php-amqplib/php-amqplib便可以直接進(jìn)行安裝了

示例演示

首先需要定義交換機(jī)、隊(duì)列以及路由關(guān)鍵字(routing key) 下面是示例代碼

 "127.0.0.1",
        "port" => 5672,
        "user" => "kd_dev",
        "pwd" => "kd_dev",
        "vhost" => "/",
];
$exchangeName = "kd_sms_send_ex"; //交換機(jī)名
$queueName = "kd_sms_send_q"; //隊(duì)列名稱
$routingKey = "sms_send"; //路由關(guān)鍵字(也可以省略)

$conn = new AMQPStreamConnection( //建立生產(chǎn)者與mq之間的連接
    $conf["host"], $conf["port"], $conf["user"], $conf["pwd"], $conf["vhost"]
);
$channel = $conn->channel(); //在已連接基礎(chǔ)上建立生產(chǎn)者與mq之間的通道


$channel->exchange_declare($exchangeName, "direct", false, true, false); //聲明初始化交換機(jī)
$channel->queue_declare($queueName, false, true, false, false); //聲明初始化一條隊(duì)列
$channel->queue_bind($queueName, $exchangeName, $routingKey); //將隊(duì)列與某個(gè)交換機(jī)進(jìn)行綁定,并使用路由關(guān)鍵字

$msgBody = json_encode(["name" => "iGoo", "age" => 22]);
$msg = new AMQPMessage($msgBody, ["content_type" => "text/plain", "delivery_mode" => 2]); //生成消息
$r = $channel->basic_publish($msg, $exchangeName, $routingKey); //推送消息到某個(gè)交換機(jī)
$channel->close();
$conn->close();

有幾個(gè)地方需要注意:

$routingKey其實(shí)是可以省略的,但是一般都帶上方便交換機(jī)對消息進(jìn)行不同隊(duì)列的推送

如果綁定的時(shí)候使用了$routingKey,那么在bashic_publish的時(shí)候也要指定$routingKey,不然交換機(jī)無法路由到指定隊(duì)列,默認(rèn)就推送到不使用關(guān)鍵字的隊(duì)列了(這在我實(shí)驗(yàn)的時(shí)候遇到的一個(gè)坑)

上面的exchange_declare和queue_declare以及queue_bind其實(shí)也不是必須的,如果在代碼運(yùn)行之前這行交換機(jī)和隊(duì)列名稱以及通過管理后臺(tái)的方式手動(dòng)添加在mq上,那么可以執(zhí)行使用,而不需要上面的這3句代碼。

執(zhí)行上面的代碼后你也可以在mq管理后臺(tái)看到對應(yīng)的顯示,如下圖
添加后的交換機(jī)顯示

添加后的隊(duì)列顯示

隊(duì)列與交換機(jī)的綁定關(guān)系,以及綁定的路由關(guān)鍵字

路由匹配

上面的代碼中,當(dāng)我們聲明初始化交換機(jī)的時(shí)候第二個(gè)參數(shù)使用direct參數(shù),其實(shí)還有另外3種參數(shù)可選。分別為

規(guī)則 說明
direct 精準(zhǔn)推送
fanout 廣播。推送到綁定到此交換機(jī)下的所有隊(duì)列
topic 組播。比如上面我綁定的關(guān)鍵字是sms_send,那么他可以推送到*.sms_send的所有隊(duì)列
headers 這個(gè)目前不知道是如何推送的

下一篇在簡單的演示一下客戶端如何消費(fèi)隊(duì)列

---更新---
更新一下在創(chuàng)建交換機(jī)和隊(duì)列的時(shí)候各個(gè)常用參數(shù)說明

    name: $queue    // should be unique in fanout exchange. [隊(duì)列名稱]
    passive: false  // don"t check if a queue with the same name exists [是否檢測同名隊(duì)列]
    durable: false // the queue will not survive server restarts [是否開啟隊(duì)列持久化]
    exclusive: false // the queue might be accessed by other channels [隊(duì)列是否可以被其他隊(duì)列訪問]
    auto_delete: true //the queue will be deleted once the channel is closed. [通道關(guān)閉后是否刪除隊(duì)列]
    name: $exchange [交換機(jī)名稱]
    type: direct [路由類型]
    passive: false []
    durable: true [交換機(jī)是否開啟持久化]
    auto_delete: false //the exchange won"t be deleted once the channel is closed.

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/26182.html

相關(guān)文章

  • RabbitMQ+PHP 教程一(Hello World)

    摘要:在中間的框是一個(gè)隊(duì)列的消息緩沖區(qū),保持代表的消費(fèi)。本教程介紹,這是一個(gè)開放的通用的協(xié)議消息。我們將在本教程中使用,解決依賴管理。發(fā)送者將連接到,發(fā)送一條消息,然后退出。注意,這與發(fā)送發(fā)布的隊(duì)列匹配。 介紹 RabbitMQ是一個(gè)消息代理器:它接受和轉(zhuǎn)發(fā)消息。你可以把它當(dāng)作一個(gè)郵局:當(dāng)你把郵件放在信箱里時(shí),你可以肯定郵差先生最終會(huì)把郵件送到你的收件人那里。在這個(gè)比喻中,RabbitMQ就...

    silencezwm 評論0 收藏0
  • RabbitMQ使用

    摘要:的定義是使用語言開發(fā)的開源消息隊(duì)列系統(tǒng),完整的實(shí)現(xiàn)了高級抽象層消息通信協(xié)議。交換機(jī)接受發(fā)送的消息,并根據(jù)綁定規(guī)則轉(zhuǎn)發(fā)到對應(yīng)的隊(duì)列。默認(rèn)是無名交換使用空字符串標(biāo)識(shí)。消息隊(duì)列是內(nèi)部對象,用于存儲(chǔ)未被消費(fèi)的消息。 RabbitMQ的定義 RabbitMQ是使用erlang語言開發(fā)的開源消息隊(duì)列系統(tǒng),完整的實(shí)現(xiàn)了AMPQ(高級抽象層消息通信協(xié)議)。 Mac下RabbitMQ安裝 使用Hom...

    codeKK 評論0 收藏0
  • centos 下安裝RabbmitMQ+PHP RabbmitMQ應(yīng)用

    摘要:你或許在思考數(shù)據(jù)分發(fā)無阻塞作業(yè)或者消息推送。所有的這些模式,都是消息隊(duì)列的一部分。這部分代碼可以改寫應(yīng)用作簡單的異步隊(duì)列任務(wù)的場景,但到了高并發(fā)高可用需求下就要進(jìn)行額外的一些處理。在之后的文章中我會(huì)講到的競爭消費(fèi)模式和的用法。 你或許在思考數(shù)據(jù)分發(fā)、無阻塞作業(yè)或者消息推送?;蛘吣阆胍M(jìn)行發(fā)布/訂閱,異步任務(wù),工作隊(duì)列。所有的這些模式,都是消息隊(duì)列的一部分。 1.安裝RabbmitMQ ...

    simpleapples 評論0 收藏0
  • php 使用rabbitmq 踩坑記錄

    摘要:當(dāng)關(guān)閉的時(shí)候,隊(duì)列將被刪除??帐亲詣?dòng)刪除綁定隊(duì)列和交換機(jī),生成發(fā)送消息到隊(duì)列持久化,重啟不會(huì)丟失,默認(rèn)為,重啟會(huì)丟失 環(huán)境 1.安裝rabbit php使用 安裝包,直接安裝composer 安裝php-amqplib/php-amqplib 這個(gè)包 生產(chǎn)著 連接mq server require_once __DIR__./vendor/autoload.php; use PhpAm...

    leiyi 評論0 收藏0
  • PHP RabbitMQ

    摘要:消息隊(duì)列,用于存儲(chǔ)還未被消費(fèi)者消費(fèi)的消息。由在與時(shí)指定,而由發(fā)送時(shí)指定,兩者的匹配方式由決定。需要為每一個(gè)創(chuàng)建,協(xié)議規(guī)定只有通過才能執(zhí)行的命令。建議客戶端線程之間不要共用,至少要保證共用的線程發(fā)送消息必須是串行的,但是建議盡量共用。 安裝 rabbitmq 在 mac 下可以直接用 brew 安裝默認(rèn)安裝在 /usr/local/Cellar/下命令被軟連接加入到了/usr/local...

    anRui 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<