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

PHP快速使用RabbitMQ实现项目中部分业务的解耦

步骤:

1. Linux安装完rabbitMQ后,没有配置文件,需要去github(https://github.com/rabbitmq/rabbitmq-server/tree/master/docs)上将rabbitmq.conf.example复制下载下来改为rabbitmq.conf。

da3124592e9a784e55d5268884b3937b.png

3. 进入到管控台后,先创建vhost,点击admin,侧栏框点击Virtual Hosts。

0d7d67407ea0f21d7f7acd35f24bcacd.png

15a8d4383afd17118490df76cb94f629.png

4. 添加Exchanges,先选择对应的Vhost

370134fd7cc9caee7b65b7f7d58977a9.png

6. 队列添加完毕后选择其中一个添加的名称进入。

186a6fbb4cd2ccf6b5bd64476ffa0a4a.png

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中的统计或图表中看到,测试代码是否成功。

9e9a4a07e04c2fd894e64cb1a001f501.png

897d36ebf618f39a56ef1930e9a813de.png

PHP快速使用RabbitMQ实现项目中部分业务的解耦相关教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值