예제 #1
0
 /**
  * @param AMQPMessage $amqpMessage The message to convert
  *
  * @return MessageInterface
  */
 public static function toMessage(AMQPMessage $amqpMessage)
 {
     $properties = array('content_type', 'content_encoding', 'app_id', 'correlation_id', 'delivery_tag', 'message_id', 'priority', 'reply_to', 'routing_key', 'exchange_name', 'timestamp', 'type', 'user_id');
     $propertyValues = array_map(function ($propertyName) use($amqpMessage) {
         if ($amqpMessage->has($propertyName)) {
             return $amqpMessage->get($propertyName);
         }
         return false;
     }, $properties);
     $headers = $amqpMessage->has('application_headers') ? $amqpMessage->get('application_headers')->getNativeData() : array();
     $message = new \Amqp\Message();
     $message->setPayload($amqpMessage->body)->setDeliveryMode($amqpMessage->get('delivery_mode'))->setHeaders($headers)->setProperties(array_combine($properties, $propertyValues));
     return $message;
 }
예제 #2
0
<?php

use Amqp\Adapter\ExtAdapter;
use Amqp\Consumer;
use Amqp\Message\MessageInterface;
use Amqp\Publisher;
require_once __DIR__ . '/../vendor/autoload.php';
$config = (require_once __DIR__ . '/config.php');
$adapter = new ExtAdapter($config);
$publisher = new Publisher();
$publisher->setAdapter($adapter);
$routing_keys = ['foo', 'bar', 'foo.bar', 'bar.foo', null];
echo "[ ] Publishing...", PHP_EOL;
for ($i = 0; $i < 10; $i++) {
    $msg = new Amqp\Message();
    $msg->setPayload('Message ' . $i);
    $publisher->publish('global', $msg, $routing_keys[rand(0, count($routing_keys) - 1)]);
    echo '[+] ', $msg->getPayload(), PHP_EOL;
}
echo "[!] Published!", PHP_EOL, str_repeat('-', 16), PHP_EOL;
$consumer = new Consumer();
$consumer->setAdapter($adapter);
$i = 0;
echo "[ ] Listening...", PHP_EOL;
$consumer->listen('debug', function (MessageInterface $msg, Amqp\Message\Result $result) use(&$i) {
    echo "[+] ", $msg->getPayload(), PHP_EOL;
    $result->ack();
    if (++$i == 10) {
        return $result->stop();
    }
}, ['multi_ack' => true]);
예제 #3
0
<?php

require_once __DIR__ . '/../../vendor/autoload.php';
$config = (require_once __DIR__ . '/../config.php');
$adapter = new \Amqp\Adapter\AmqplibAdapter($config);
$msg = new \Amqp\Message();
$msg->setDeliveryMode(2);
$msg->setHeaders(['x-foo' => 'sfgsd']);
$msg->setPayload(uniqid());
$adapter->publish('global', $msg);