백엔드 개발 PHP 튜토리얼 PHP AMQP 扩充 应用

PHP AMQP 扩充 应用

Jun 13, 2016 pm 01:25 PM
amqp channel echo gt

PHP AMQP 扩展 应用
周末休息 ,闲来研究下AMQP 的PHP 扩展,花了一天时间才调试好

高级消息队列协议(AMQP)是一个异步消息传递所使用的应用层协议规范。作为线路层协议,而不是API(例如JMS),AMQP 客户端能够无视消息的来源任意发送和接受信息。现在,已经有相当一部分不同平台的服务器和客户端可以投入使用

我的AMQP服务器是使用RabbitMQ ,RabbitMQ 的安装网上很多。

重点说下 PHP 的扩展 php-amqp,我用的是最新的 amqp-1.0.1

文档是旧的 新的掺杂在一起 因此弄了好久才完成。

首先说下流程 即 Client - AMQP server - Client

左边的Client向右边的Client发送消息,流程:

1,  获取Conection

2,  获取Channel

3,  定义Exchange,Queue

4,  使用一个RoutingKey将Queue Binding到一个Exchange上

5,  通过指定一个Exchange和一个RoutingKey来将消息发送到对应的Queue上,

6,  接收方在接收时也是获取connection,接着获取channel,然后指定一个Queue直接到它关心的Queue上取消息,它对Exchange,RoutingKey及如何binding都不关心,到对应的Queue上去取消息就OK了

以下是PHP 的实现:

生产消息:

<?php //设置你的连接
$conn_args = array('host' => 'localhost', 'port' =&gt; '5672', 'login' =&gt; 'guest', 'password' =&gt; 'guest');
$conn = new AMQPConnection($conn_args);
if ($conn-&gt;connect()) {
    echo "Established a connection to the broker \n";
}
else {
    echo "Cannot connect to the broker \n ";
}
//你的消息
$message = json_encode(array('Hello World!','php','c++'));
//创建channel
$channel = new AMQPChannel($conn);
//创建exchange 
$ex = new AMQPExchange($channel);
$ex-&gt;setName('exchange');//创建名字
$ex-&gt;setType(AMQP_EX_TYPE_DIRECT);
$ex-&gt;setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
echo "exchange status:".$ex-&gt;declare();
echo "\n";
//创建队列 
$q = new AMQPQueue($channel);
//设置队列名字 如果不存在则添加
$q-&gt;setName('queue');
$q-&gt;setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
echo "queue status: ".$q-&gt;declare();
echo "\n";
echo 'queue bind: '.$q-&gt;bind('exchange','route.key');//将你的队列绑定到routingKey
echo "\n";

$channel-&gt;startTransaction();
echo "send: ".$ex-&gt;publish($message, 'route.key'); //将你的消息通过制定routingKey发送
$channel-&gt;commitTransaction();
$conn-&gt;disconnect();

?&gt;
로그인 후 복사


接收方 消费方

<?php $conn_args = array('host' => 'localhost', 'port' =&gt; '5672', 'login' =&gt; 'guest', 'password' =&gt; 'guest'
                    ,'vhost'=&gt;'/');
$conn = new AMQPConnection($conn_args);
$conn-&gt;connect();
$channel = new AMQPChannel($conn);
$q = new AMQPQueue($channel);
$q-&gt;setName('queue2');
$q-&gt;setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
echo "queue status: ".$q-&gt;declare();
echo "==========\n";
     
$messages = $q-&gt;get(AMQP_AUTOACK);
print_r($messages-&gt;getBody());
echo "\n";
// disconnect
$conn-&gt;disconnect();

?&gt;
로그인 후 복사


我是初学 消息队列这方面知识。
不知道 linux的消息队列 和AMQP 的 优缺点
我用php 的sysvmsg 函数 执行while 循环 可以挂起在服务器上,实时监听消息队列的消息,有消息则取,内存不会升高

而用amqp while 循环 监听 即使无消息  内存也会越来越高,最后导致PHP 使用内存不足而 报错。

看来这方面得多交流 多学习
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

화웨이 GT3 Pro와 GT4의 차이점은 무엇입니까? 화웨이 GT3 Pro와 GT4의 차이점은 무엇입니까? Dec 29, 2023 pm 02:27 PM

화웨이 GT3 Pro와 GT4의 차이점은 무엇입니까?

수정: Windows 11에서 캡처 도구가 작동하지 않음 수정: Windows 11에서 캡처 도구가 작동하지 않음 Aug 24, 2023 am 09:48 AM

수정: Windows 11에서 캡처 도구가 작동하지 않음

기술 세계를 탐험할 수 있도록 Go 언어 오픈 소스 프로젝트 5개를 선택했습니다. 기술 세계를 탐험할 수 있도록 Go 언어 오픈 소스 프로젝트 5개를 선택했습니다. Jan 30, 2024 am 09:08 AM

기술 세계를 탐험할 수 있도록 Go 언어 오픈 소스 프로젝트 5개를 선택했습니다.

Go 언어 개발 필수 사항: 인기 있는 프레임워크 권장 사항 5가지 Go 언어 개발 필수 사항: 인기 있는 프레임워크 권장 사항 5가지 Mar 24, 2024 pm 01:15 PM

Go 언어 개발 필수 사항: 인기 있는 프레임워크 권장 사항 5가지

iPhone에서 App Store 오류에 연결할 수 없는 문제를 해결하는 방법 iPhone에서 App Store 오류에 연결할 수 없는 문제를 해결하는 방법 Jul 29, 2023 am 08:22 AM

iPhone에서 App Store 오류에 연결할 수 없는 문제를 해결하는 방법

Golang의 웹 프레임워크인 Echo 프레임워크를 사용하여 분산 작업 스케줄링 구현 Golang의 웹 프레임워크인 Echo 프레임워크를 사용하여 분산 작업 스케줄링 구현 Jun 24, 2023 am 11:49 AM

Golang의 웹 프레임워크인 Echo 프레임워크를 사용하여 분산 작업 스케줄링 구현

Swoole이 비동기 AMQP 작업을 지원하는 방법 Swoole이 비동기 AMQP 작업을 지원하는 방법 Jun 25, 2023 am 08:22 AM

Swoole이 비동기 AMQP 작업을 지원하는 방법

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决

See all articles