日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php订单模块解耦,PHP快速使用RabbitMQ实现项目中部分业务的解耦

發布時間:2023/12/19 php 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php订单模块解耦,PHP快速使用RabbitMQ实现项目中部分业务的解耦 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PHP快速使用RabbitMQ實現項目中部分業務的解耦

步驟:

1.?Linux安裝完rabbitMQ后,沒有配置文件,需要去github(https://github.com/rabbitmq/rabbitmq-server/tree/master/docs)上將rabbitmq.conf.example復制下載下來改為rabbitmq.conf。

3.?進入到管控臺后,先創建vhost,點擊admin,側欄框點擊Virtual Hosts。

4.?添加Exchanges,先選擇對應的Vhost

6.?隊列添加完畢后選擇其中一個添加的名稱進入。

8.?成功后就可以通過PHP代碼生產消息到該虛擬機,然后經過交換機路由到該隊列中。

namespace rabbitmq;

class Amq

{

/**

* @var object 對象實例

*/

protected static $instance;

protected $exchange="router_visit"; // 交換機(需要在隊列中綁定)

protected $queue ="visit_log"; // 隊列

protected $route ="router_visit"; // 路由key(需要在隊列中綁定)

protected $consumer_tag="consumer";

protected $config = [

"host" => "146.53.206.264",

"port" => 5672,

"login" => "guest",//guest

"password" => "guest",//Na18gR@9tf

"vhost" => "log",

"amqp_debug" => true

];

protected $exchange_index = 0;

protected $exchange_type = [

"direct",

"fanout",

"topic",

"headers"

];

/**

* @note 實例化

* @author: beiqiaosu

* @since: 2019/11/13 16:10

*/

public static function getInstance()

{

if (!(self::$instance instanceof self)) {

self::$instance = new self();

}

return self::$instance;

}

/**

* @Notes: 消息生產

*/

public function publisher($message,$config=[]) {

//如果有配置就用新配置

$this->config ["vhost"] = $config["vhost"]?? $this->config ["vhost"];

$this->exchange = $config["exchange"]?? $this->exchange;

$this->queue = $config["queue"]?? $this->queue;

$this->consumer_tag = $config["consumer_tag"]?? $this->consumer_tag;

$this->route = $config["route"]?? $this->route;

$this->exchange_index = $config["exchange_index"]?? $this->exchange_index;

$cnn = new AMQPConnection($this->config);

if (!$cnn->connect()) {

echo "Cannot connect to the broker";

exit();

}

$channel = new AMQPChannel($cnn);

$ex = new AMQPExchange($channel);

$ex->setName($this->exchange);

$ex->setType(AMQP_EX_TYPE_DIRECT); //direct類型

$ex->setFlags(AMQP_DURABLE); //持久化

$ex->declareExchange();

return "Send Message:".$ex->publish($message, $this->route, AMQP_NOPARAM, array("delivery_mode" => 2))."

";

}

/**

* @note 消費

* @author: tata

* @since: 2019/11/13 16:10

*/

public function consumer() {

$exchange="router_visit"; //交換機

$queue ="visit_log"; //隊列

$route ="router_visit"; //路由

//連接broker

$cnn = new AMQPConnection($this->config);

if (!$cnn->connect()) {

echo "Cannot connect to the broker";

exit();

}

$channel = new AMQPChannel($cnn);

$ex = new AMQPExchange($channel);

//設置交換機名稱

$ex->setName($exchange);

//設置交換機類型

//AMQP_EX_TYPE_DIRECT:直連交換機

//AMQP_EX_TYPE_FANOUT:扇形交換機

//AMQP_EX_TYPE_HEADERS:頭交換機

//AMQP_EX_TYPE_TOPIC:主題交換機

$ex->setType(AMQP_EX_TYPE_DIRECT);

//設置交換機持久

$ex->setFlags(AMQP_DURABLE);

//聲明交換機

$ex->declareExchange();

//創建一個消息隊列

$q = new AMQPQueue($channel);

//設置隊列名稱

$q->setName($queue);

//設置隊列持久

$q->setFlags(AMQP_DURABLE);

//聲明消息隊列

//$q->declareQueue();

//交換機和隊列通過$route進行綁定

$q->bind($exchange, $route);

$ret = $q->consume(function($envelope, $queue) {

// 取出消息主題轉為數組

// $origin_data = json_decode($envelope->getBody(),true);

// dump($envelope->getBody());die;

/**對消息主題執行業務**/

$res = true;

/**對消息主題執行業務**/

// 業務處理完畢發送給MQ消費掉該消息

if ($res) $queue->ack($envelope->getDeliveryTag()); //手動發送ACK應答

});

dump($ret);die;

$cnn->disconnect();

}

}

9. 每執行一次生產或消費代碼,可以在Queue中的統計或圖表中看到,測試代碼是否成功。

PHP快速使用RabbitMQ實現項目中部分業務的解耦相關教程

總結

以上是生活随笔為你收集整理的php订单模块解耦,PHP快速使用RabbitMQ实现项目中部分业务的解耦的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。