Linux 튜토리얼: 우분투에서 php-amqp 확장 튜토리얼 수동 컴파일

WBOY
풀어 주다: 2016-07-29 09:14:42
원래의
1201명이 탐색했습니다.

Linux 튜토리얼: 우분투에서 php-amqp 확장 튜토리얼 수동 컴파일

우선 Shenma amqp인가요? 소개는 여기까지입니다. 간단히 말하면 고급 queue 프로토콜입니다. 이 확장은 PHP가 amqp 프로토콜 및 관련 서비스 통신을 지원할 수 있도록 하기 위한 것입니다.

장점: 서버 처리의 동시성 문제를 해결할 수 있습니다.
AMQP(Advanced Messaging Queuing Protocol)는 비동기 메시징에 사용되는 애플리케이션 계층 프로토콜 사양입니다. API(예: JMS)가 아닌 와이어 계층 프로토콜로서 AMQP 클라이언트는 소스에 관계없이 임의로 메시지를 보내고 받을 수 있습니다. 이제 다양한 플랫폼에 사용할 수 있는 서버와 클라이언트가 이미 꽤 많이 있습니다.

(1) 기본 개념

RabbitMQ는 Erlang 언어로 개발된 인기 있는 오픈 소스 메시징

대기열

시스템입니다. RabbitMQ는 AMQP(Advanced Message Queuing Protocol)의 표준 구현입니다. AMQP에 익숙하지 않다면 RabbitMQ 문서를 직접 읽기 어려울 것입니다. 그러나 여기에는 몇 가지 핵심 개념만 간략하게 소개되어 있습니다. 몇 가지 개념 설명:

브로커: 간단히 말하면 메시지

대기열

서버 엔터티입니다.
  • 교환: 메시지가 라우팅되는 규칙과 대기열을 지정하는 메시지 교환입니다.
  • 큐: 메시지 캐리어, 각 메시지는 하나 이상의
  • 에 저장됩니다. 바인딩(Binding): 바인딩, 그 기능은 라우팅 규칙에 따라 Exchange와 대기열을 바인딩하는 것입니다. Routing Key: 라우팅 키워드, Exchange는 이 키워드를 기반으로 메시지를 전달합니다.
  • 가상 호스트: 가상 호스트. 여러 사용자에 대한 권한을 분리하기 위해 브로커에서 여러 가상 호스트를 열 수 있습니다.
  • 프로듀서: 메시지 프로듀서는 메시지를 전달하는 프로그램입니다.
  • 소비자: 메시지 소비자는 메시지를 받아들이는 프로그램입니다.
  • 채널: 클라이언트의 각 연결에서 여러 채널을 설정할 수 있으며 각 채널은 세션 작업을 나타냅니다.
  • (2) 사용과정
  • 즉, Client - AMQP Server - Client
왼쪽 클라이언트가 오른쪽 클라이언트에게 메시지를 보냅니다. 프로세스는

Get Connection

Get Channel
  • Define Exchange, Queue
  • 은 RoutingKey를 사용하여 Queue를 Exchange에 바인딩합니다.
  • Exchange와 RoutingKey를 지정하여 해당 Queue에 메시지를 보냅니다.
  • 수신자도 수신 시 연결을 얻습니다. 채널을 얻은 다음 관심 있는 큐에서 메시지를 직접 가져오도록 큐를 지정합니다. Exchange, RoutingKey 및 바인딩 방법은 신경 쓰지 않고 해당 큐에서 메시지를 가져오는 것이 좋습니다.
  • 우분투의 기본 소스로 인해 php5-amqp 패키지가 없기 때문에 amqp를 사용하려면 수동으로 컴파일해야 합니다.
  • 준비 작업
:

php 컴파일 도구 설치

rabbitmq 라이브러리 설치

Linux 배포판에는 미리 만들어진 librabbitmq-dev 패키지가 없으므로 소스 코드를 다운로드하여 컴파일하고 설치할 수 있습니다
<code>sudo apt<span>-get</span> install php5<span>-dev</span></code>
로그인 후 복사

그런 다음 git이 설치되어 있지 않은 경우 git을 구해야하므로 git을 설치하십시오. 공식 저장소의 소스 코드

<code>sudo apt<span>-get</span> install librabbitmq<span>-dev</span></code>
로그인 후 복사
소스 코드 복제 및 컴파일

컴파일 라이브러리

그런 다음 PHP 확장의 소스 코드를 다운로드해야 합니다. , 주소는 다음과 같습니다.
<code>git <span>clone</span> git:<span>//<strong>github</strong>.com/alanxz/rabbitmq-c.git</span>
cd rabbitmq-c
git submodule init
git submodule update</code>
로그인 후 복사

http ://pecl.php.net/package/amqp

<code>autoreconf -i && ./configure && <span>make</span> && sudo <span>make</span> install</code>
로그인 후 복사
최신 버전은 1.4.0

구성 만들기 file

그런 다음 웹 서버나 php-fpm을 다시 시작하고 phpinfo를 인쇄합니다. 다음 내용이 표시되면 확장 프로그램이 설치된 것입니다.
<code>wget http://pecl<span>.php</span><span>.net</span>/get/amqp-<span>1.4</span><span>.0</span><span>.tgz</span>tar zxf amqp-<span>1.4</span><span>.0</span><span>.tgz</span>
cd amqp-<span>1.4</span><span>.0</span>/

phpize && ./configure --with-amqp && make && sudo make install</code>
로그인 후 복사

<code><span>sudo</span><span>echo</span><span>"extension = amqp.so"</span> > /etc/php5/conf.d/amqp.ini</code>
로그인 후 복사
제작 소비자측

소비자측

<code><span>/**
 * PHP amqp(RabbitMQ) Demo - publisher
 * 生产者:发送消息
 * 逻辑:创建连接-->创建channel-->创建交换机<strong>对象</strong>-->发送消息* 
 */</span><span>//配置信息</span><span>$conn_args</span> = <span>array</span>(
    <span>'host'</span> => <span>'localhost'</span>,
    <span>'port'</span> => <span>'5672'</span>,
    <span>'login'</span> => <span>'guest'</span>,
    <span>'password'</span> => <span>'guest'</span>,
    <span>'vhost'</span>=><span>'/'</span>
);
<span>$e_name</span> = <span>'e_lamp'</span>; <span>//交换机名</span><span>$k_route</span> = <span>'key_1'</span>; <span>//路由key</span><span>//创建连接和channel</span><span>$conn</span> = <span>new</span> AMQPConnection(<span>$conn_args</span>);
<span>if</span> (!<span>$conn</span>->connect()) {
    <span>die</span>(<span>"Cannot connect to the broker!\n"</span>);
}
<span>$channel</span> = <span>new</span> AMQPChannel(<span>$conn</span>);

<span>//消息内容</span><span>$message</span> = <span>"TEST MESSAGE! 测试消息!"</span>;

<span>//创建交换机<strong>对象</strong></span><span>$ex</span> = <span>new</span> AMQPExchange(<span>$channel</span>);
<span>$ex</span>->setName(<span>$e_name</span>);

<span>//发送消息</span><span>//$channel->startTransaction(); //开始事务</span><span>for</span>(<span>$i</span>=<span>0</span>; <span>$i</span><<span>5</span>; ++<span>$i</span>){
    <span>echo</span><span>"Send Message:"</span>.<span>$ex</span>->publish(<span>$message</span>, <span>$k_route</span>).<span>"\n"</span>;
}
<span>//$channel->commitTransaction(); //提交事务</span><span>$conn</span>->disconnect();</code>
로그인 후 복사
위 내용은 우분투의 리눅스 튜토리얼에서 php-amqp 확장 튜토리얼의 수동 컴파일을 소개하고 있으며, 관련 내용도 포함되어 있어 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

<code><span>/**
 * PHP amqp(RabbitMQ) Demo - consumer
 * 消费者:接收消息
 * 逻辑:创建连接-->创建channel-->创建交换机-->创建<strong>队列</strong>-->绑定交换机/<strong>队列</strong>/路由键-->接收消息*
 */</span><span>//配置信息</span><span>$conn_args</span> = <span>array</span>(
    <span>'host'</span> => <span>'localhost'</span>,
    <span>'port'</span> => <span>'5672'</span>,
    <span>'login'</span> => <span>'guest'</span>,
    <span>'password'</span> => <span>'guest'</span>,
    <span>'vhost'</span>=><span>'/'</span>
);
<span>$e_name</span> = <span>'e_lamp'</span>; <span>//交换机名</span><span>$q_name</span> = <span>'q_lamp'</span>; <span>//<strong>队列</strong>名</span><span>$k_route</span> = <span>'key_1'</span>; <span>//路由key</span><span>//创建连接和channel</span><span>$conn</span> = <span>new</span> AMQPConnection(<span>$conn_args</span>);
<span>if</span> (!<span>$conn</span>->connect()) {
    <span>die</span>(<span>"Cannot connect to the broker!\n"</span>);
}
<span>$channel</span> = <span>new</span> AMQPChannel(<span>$conn</span>);

<span>//创建交换机</span><span>$ex</span> = <span>new</span> AMQPExchange(<span>$channel</span>);
<span>$ex</span>->setName(<span>$e_name</span>);
<span>$ex</span>->setType(AMQP_EX_TYPE_DIRECT); <span>//direct类型</span><span>$ex</span>->setFlags(AMQP_DURABLE); <span>//持久化</span><span>echo</span><span>"Exchange Status:"</span>.<span>$ex</span>-><span>declare</span>().<span>"\n"</span>;

<span>//创建<strong>队列</strong></span><span>$q</span> = <span>new</span> AMQPQueue(<span>$channel</span>);
<span>$q</span>->setName(<span>$q_name</span>);
<span>$q</span>->setFlags(AMQP_DURABLE); <span>//持久化</span><span>echo</span><span>"Message Total:"</span>.<span>$q</span>-><span>declare</span>().<span>"\n"</span>;

<span>//绑定交换机与<strong>队列</strong>,并指定路由键</span><span>echo</span><span>'Queue Bind: '</span>.<span>$q</span>->bind(<span>$e_name</span>, <span>$k_route</span>).<span>"\n"</span>;

<span>//阻塞模式接收消息</span><span>echo</span><span>"Message:\n"</span>;
<span>while</span>(<span>True</span>){
    <span>$q</span>->consume(<span>'processMessage'</span>);
    <span>//$q->consume('processMessage', AMQP_AUTOACK); //自动ACK应答</span>
}
<span>$conn</span>->disconnect();

<span>/**
* 消费回调函数
* 处理消息
*/</span><span><span>function</span><span>processMessage</span><span>(<span>$envelope</span>, <span>$queue</span>)</span> {</span><span>$msg</span> = <span>$envelope</span>->getBody();
    <span>echo</span><span>$msg</span>.<span>"\n"</span>; <span>//处理消息</span><span>$queue</span>->ack(<span>$envelope</span>->getDeliveryTag()); <span>//手动发送ACK应答</span>
}</code>
로그인 후 복사
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿