PHP AMQP передает заголовки в запросе

1

Я пытаюсь отправить запрос AMQP, застрял в том, как добавить заголовок в сообщение запроса, ниже - обертка, которую мы имеем

$message = ‘{"empId": ‘.$empId.', "empName":"my name"};
 $resData = $rpcClient->call($message, self::EXCHANGE, self::ROUTING_KEY);

Как добавить заголовки к приведенному выше сообщению

метод вызова - это обертка, которую мы написали

public function call($requestMessage, $exchange, $routingKey)
{
    $this->response = null;
    $this->correlationId = uniqid('abcprod', true);

    $message = new AMQPMessage(
        strval($requestMessage),
        array('correlation_id' => $this->correlationId, 'reply_to' => $this->callbackQueue)
    );

    $this->channel
        ->basic_publish($message, $exchange, $routingKey);

    try {
        $this->channel->wait(null, false, self::REQUEST_TIMEOUT);
    } catch (AMQPTimeoutException $e) {
        return null;
    }

    return $this->response;
}
Теги:
amqp
php-amqplib

2 ответа

4

Когда вы создаете сообщение, вы должны установить свойство application_headers. Это должен быть Wire\AMQPTable который принимает в качестве аргумента конструктора массив заголовков.

Официальный пример amqp_message_headers_snd.php:

$message = new AMQPMessage($data);

$headers = new Wire\AMQPTable(array(
   'x-foo'=>'bar',
   'table'=>array('figuf', 'ghf'=>5, 5=>675),
   'num1' => -4294967295,
   'num2' => 5,
   'num3' => -2147483648,
   'true' => true,
   'false' => false,
   'void' => null,
   'date' => new DateTime(),
   'array' => array(null, 'foo', 'bar', 5, 5674625, 'ttt', array(5, 8, 2)),
   'arr_with_tbl' => array(
      'bar',
      5,
      array('foo', 57, 'ee', array('foo'=>'bar', 'baz'=>'boo', 'arr'=>array(1,2,3, true, new DateTime()))),
      67,
      array(
         'foo'=>'bar',
         5=>7,
         8=>'boo',
         'baz'=>3
      )
   ),
   '64bitint' => 9223372036854775807,
   '64bit_uint' => '18446744073709600000',
   '64bitint_neg' => -pow(2, 40)
));
$headers->set('shortshort', -5, Wire\AMQPTable::T_INT_SHORTSHORT);
$headers->set('short', -1024, Wire\AMQPTable::T_INT_SHORT);

$message->set('application_headers', $headers);
1

Взгляните на этот пример из демонстрационной папки библиотеки: https://github.com/videlalvaro/php-amqplib/blob/master/demo/amqp_message_headers_snd.php#L55

Ещё вопросы

Сообщество Overcoder
Наверх
Меню