/** * @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; }
<?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]);
<?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);