`

rabbitMQ使用

 
阅读更多


    官方文档地址:http://www.rabbitmq.com/tutorials/tutorial-one-python.html

 

    安装配置:http://www.ttlsa.com/linux/install-rabbitmq-on-linux/

 

    1.hello world  The simplest thing that doessomething

 

       send.php

<?php
//简单的发布消息
include_once __DIR__."/vendor/autoload.php";
use PhpAmqpLib\Connection\AMQPConnection;
use PhpAmqpLib\Message\AMQPMessage;

$connection = new AMQPConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
//定义队列
$channel->queue_declare('hello', false, false, false, false);
//定义普通消息
$msg = new AMQPMessage('Hello World!');
//发布消息
$channel->basic_publish($msg, '', 'hello');

echo " [x] Sent 'Hello World!'\n";

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

    client.php

    

<?php
//简单的接收队列消息
include_once __DIR__."/vendor/autoload.php";
use PhpAmqpLib\Connection\AMQPConnection;
use PhpAmqpLib\Message\AMQPMessage;

$connection = new AMQPConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
//定义消息
$channel->queue_declare('hello', false, false, false, false);

echo ' [*] Waiting for messages. To exit press CTRL+C', "\n";

//输入消息方法
$callback = function($msg)
{
  echo " [x] Received ".$msg->body."\n";
};

//队列消耗
$channel->basic_consume('hello', '', false, true, false, false, $callback);

while(count($channel->callbacks))
{
   $channel->wait();
}

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

 

   2.Work queues

 

    new_task.php

 

   

<?php
//队列分配发布
include_once __DIR__."/vendor/autoload.php";
use PhpAmqpLib\Connection\AMQPConnection;
use PhpAmqpLib\Message\AMQPMessage;

$connection = new AMQPConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();


$channel->queue_declare('task_queue', false, true, false, false);


$data = implode(" ",array_splice($argv,1));
if(empty($data)) $data = 'hello world';
$msg = new AMQPMessage($data,
            array('delivery_mode'=>2)#定义分配模式
);

$channel->basic_publish($msg,'','task_queue');

echo " [x] Sent ", $data, "\n";

  woker.php

 

<?php
//队列分配接收
include_once __DIR__."/vendor/autoload.php";
use PhpAmqpLib\Connection\AMQPConnection;
use PhpAmqpLib\Message\AMQPMessage;

$connection = new AMQPConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

//定义
$channel->queue_declare('task_queue', false, true, false, false);


$data = implode(" ",array_splice($argv,1));
if(empty($data)) $data = 'hello world';
$msg = new AMQPMessage($data,
            array('delivery_mode'=>2)#定义分配模式
);

$channel->basic_publish($msg,'','task_queue');

echo " [x] Sent ", $data, "\n";

 

   3. Publish/Subscribe

  

<?php
//增加分配 
include_once __DIR__."/vendor/autoload.php";
use PhpAmqpLib\Connection\AMQPConnection;
use PhpAmqpLib\Message\AMQPMessage;

$connection = new AMQPConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();


$channel->exchange_declare('logs', 'fanout', false, false, false);





$data = implode(" ",array_splice($argv,1));
if(empty($data)) $data = 'hello world';
$msg = new AMQPMessage($data,
            array('delivery_mode'=>2)#make message persistent
);

$channel->basic_publish($msg, 'logs');

echo " [x] Sent ", $data, "\n";

    log_client.php

   

<?php
//分配接收
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPConnection;

$connection = new AMQPConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->exchange_declare('logs', 'fanout', false, false, false);

list($queue_name, ,) = $channel->queue_declare("", false, false, true, false);

$channel->queue_bind($queue_name, 'logs');

echo ' [*] Waiting for logs. To exit press CTRL+C', "\n";

$callback = function($msg){
  echo ' [x] ', $msg->body, "\n";
};

$channel->basic_consume($queue_name, '', false, true, false, false, $callback);

while(count($channel->callbacks)) {
    $channel->wait();
}

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

    4.Routing

   

<?php
//根据severity不同发布
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPConnection;
use PhpAmqpLib\Message\AMQPMessage;

$connection = new AMQPConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->exchange_declare('direct_logs', 'direct', false, false, false);

$severity = $argv[1];
if(empty($severity)) $severity = "info";

$data = implode(' ', array_slice($argv, 2));
if(empty($data)) $data = "Hello World!";

$msg = new AMQPMessage($data);

$channel->basic_publish($msg, 'direct_logs', $severity);

echo " [x] Sent ",$severity,':',$data," \n";

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

?>

    log_direct_client.php

    

<?php
//根据severity不同接收
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPConnection;

$connection = new AMQPConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->exchange_declare('direct_logs', 'direct', false, false, false);

list($queue_name, ,) = $channel->queue_declare("", false, false, true, false);

$severities = array_slice($argv, 1);
if(empty($severities )) {
    file_put_contents('php://stderr', "Usage: $argv[0] [info] [warning] [error]\n");
    exit(1);
}

foreach($severities as $severity) {
    $channel->queue_bind($queue_name, 'direct_logs', $severity);
}

echo ' [*] Waiting for logs. To exit press CTRL+C', "\n";

$callback = function($msg){
  echo ' [x] ',$msg->delivery_info['routing_key'], ':', $msg->body, "\n";
};

$channel->basic_consume($queue_name, '', false, true, false, false, $callback);

while(count($channel->callbacks)) {
    $channel->wait();
}

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

?>

 

分享到:
评论

相关推荐

    RabbitMQ使用总结

    ### RabbitMQ 使用总结 #### 一、安装与配置 **1. 安装顺序** - **ERLANG安装**: 首先确保安装了Erlang环境。安装时注意选择带有`windowdll`选项的版本,这有助于后续RabbitMQ的稳定运行。 - **RabbitMQ安装**: ...

    RabbitMq使用手册

    RabbitMq 使用手册 本文档为 RabbitMq 使用手册,介绍了 RabbitMq 的应用场景和开发指导。RabbitMq 是一个由 Erlang 开发的 AMQP(Advanced Message Queue)流行的开源消息队列系统。RabbitMq 的结构图如下: ...

    RabbitMQ使用手册V1.0.0.pdf

    最后,文档中还涵盖了一些RabbitMQ使用过程中的常见问题,以及它们的解决方法,来帮助用户更好地理解和运用RabbitMQ。 值得注意的是,文档中提到的某些部分可能由于OCR技术导致识别错误或遗漏,但基于上述描述,...

    RabbitMQ使用文档.PDF

    MQ全称为Message Queue,即消息队列, RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开 发中应用...

    RabbitMQ使用参考-YS.zip

    这份"RabbitMQ使用参考-YS"文档,很可能是为了帮助用户理解和掌握RabbitMQ的基本概念、安装配置、使用方法以及最佳实践。 首先,我们需要了解RabbitMQ的基本概念。RabbitMQ的核心是消息 broker,它接收、存储和转发...

    RabbitMQ使用指南.pdf

    RabbitMQ适用于多种操作系统,文档中提及了基于华为云使用CentOS 7.6(64位)系统部署RabbitMQ 3.8.2版本的实例。该服务软件的安装和配置被记录在官方手册中,为用户提供了一个较为完整的指南。 安装RabbitMQ通常...

    消息中间件RabbitMQ使用.zip

    消息中间件RabbitMQ使用

    RabbitMQ使用规范

    RabbitMQ使用规范 概述 RabbitMQ是基于AMQP高性能的开源消息队列服务器,可以用来实现消息的发布、订阅和routing。该规范旨在为RabbitMQ的使用提供一个统一的标准,确保RabbitMQ的使用符合公司的技术架构和安全要求...

    springboot中rabbitmq使用demo

    本篇将详细介绍如何在Spring Boot项目中集成并使用RabbitMQ。 首先,我们需要在Spring Boot项目中添加RabbitMQ的相关依赖。在`pom.xml`文件中,加入以下Maven依赖: ```xml &lt;groupId&gt;org.springframework.boot ...

    C++/QT 使用RabbitMQ

    本文将详细介绍如何在C++和QT环境下集成并使用RabbitMQ,以便于开发者构建实时通信和高并发的应用。 首先,安装RabbitMQ需要在系统上设置Erlang环境,因为RabbitMQ是用Erlang语言编写的。确保已下载并安装了Erlang ...

    springboot2.7.0集成rabbitmq使用消息中间件MQ.zip

    springboot2.7.0集成rabbitmq使用消息中间件MQ

    RabbitMQ 入门教程(JAVA)

    RabbitMQ 和消息传递系统通常会使用特定的术语来描述其中的关键组件。 - **生产者(Producer)**:生产者是指发送消息的程序或应用。在RabbitMQ 的图形表示中,我们通常用 "P" 来标记它。 - **队列(Queue)**:队列是...

    C#的Demo项目:RabbitMQ封装和使用

    在本文中,我们将深入探讨如何在C#环境中封装和使用RabbitMQ,这是一个基于AMQP(Advanced Message Queuing Protocol)的消息中间件。首先,我们来看看RabbitMQ是什么以及它的核心功能。 RabbitMQ是一个开源的消息...

    rabbitmq使用环境【安装包、Erlang环境】

    在IT行业中,RabbitMQ是一个广泛使用的开源消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol)协议,用于在分布式系统中高效处理和路由消息。要使用RabbitMQ,首先需要确保你的环境已经正确...

    学习rabbitMQ时用的所有软件及常见问题解决办法.rar

    此外,RabbitMQ默认使用5672端口,如果该端口已被其他服务占用,需要更改RabbitMQ的配置文件(rabbitmq.config)来指定一个未使用的端口。同时,记得检查你的防火墙设置,确保允许RabbitMQ服务的入站和出站通信。 ...

    使用Java编写的RabbitMQ连接池方法

    RabbitMQ客户连接池的Java实现。我们刚开始也是采用这种方式来实现的,但做压力测试时,发现这种每次新建Connection和新建Channel是非常耗时的,在大并发下,一般都要8毫秒左右,慢的话,好多都是几十毫秒。因此我们...

    JavaScript连接消息(RabbitMQ)

    在JavaScript中使用RabbitMQ,首先需要一个客户端库,如`amqplib`,这是一个官方支持的JavaScript客户端,可以与RabbitMQ服务器建立连接。安装该库可以通过npm(Node.js的包管理器)执行以下命令: ```bash npm ...

    rabbitMQ3.7.8windows安装软件包

    **四、RabbitMQ使用基础** 1. 生产者与消费者:RabbitMQ的核心概念包括生产者(发送消息的客户端)、消费者(接收消息的客户端)以及队列(存储消息的数据结构)。生产者将消息发布到队列,消费者从队列中获取并...

    使用RabbitMQ+延迟队列实现分布式事务的最终一致性方案

    在本方案中,我们将利用RabbitMQ的延迟队列特性来实现在订单和库存系统中的分布式事务最终一致性。 RabbitMQ是基于AMQP(Advanced Message Queuing Protocol)的消息中间件,它提供了一种可靠的消息传递机制,使得...

    RabbitMQ连接池+SpringBoot实现

    RabbitMQ连接池+SpringBoot实现。通过连接池实现将高效的管理RabbitMQ的Connection,并与springboot进行整合,实现消息发送,获取队列列表等功能。基于此可以进行更多功能的扩充。

Global site tag (gtag.js) - Google Analytics