PHP Conference Nagoya 2025

Stomp::ack

stomp_ack

(PECL stomp >= 0.1.0)

Stomp::ack -- stomp_ackПодтверждает получение сообщения

Описание

Объектно-ориентированный стиль (метод):

public Stomp::ack(mixed $msg, array $headers = ?): bool

Процедурный стиль:

stomp_ack(resource $link, mixed $msg, array $headers = ?): bool

Подтверждает факт получения сообщения из очереди, используя подтверждение клиента.

Список параметров

link

Только для процедурного стиля: идентификатор соединения stomp, полученный из stomp_connect().

msg

Сообщение/идентификатор сообщения, получение которого должно быть подтверждено.

headers

Ассоциативный массив, содержащий дополнительные заголовки (пример: receipt).

Возвращаемые значения

Функция возвращает true в случае успешного выполнения или false, если возникла ошибка.

Примеры

Пример #1 Объектно-ориентированный стиль

<?php

$queue
= '/queue/foo';
$msg = 'bar';

/* подключение */
try {
$stomp = new Stomp('tcp://localhost:61613');
} catch(
StompException $e) {
die(
'Ошибка соединения: ' . $e->getMessage());
}

/* отправка сообщения в очередь 'foo' */
$stomp->send($queue, $msg);

/* подписка на сообщения из очереди 'foo' */
$stomp->subscribe($queue);

/* чтение фрейма */
$frame = $stomp->readFrame();

if (
$frame->body === $msg) {
/* подтверждение получения фрейма */
$stomp->ack($frame);
}

/* отмена подписки к очереди */
$stomp->unsubscribe($queue);

/* закрытие подключения */
unset($stomp);

?>

Пример #2 Процедурный стиль

<?php

$queue
= '/queue/foo';
$msg = 'bar';

/* подключение */
$link = stomp_connect('ssl://localhost:61612');

/* проверка соединения */
if (!$link) {
die(
'Ошибка соединения: ' . stomp_connect_error());
}

/* начало транзакции */
stomp_begin($link, 't1');

/* отправка сообщения в очередь 'foo' */
stomp_send($link, $queue, $msg, array('transaction' => 't1'));

/* подтверждение транзакции */
stomp_commit($link, 't1');

/* подписка на сообщения из очереди 'foo' */
stomp_subscribe($link, $queue);

/* чтение фрейма */
$frame = stomp_read_frame($link);

if (
$frame['body'] === $msg) {
/* подтверждение получения фрейма */
stomp_ack($link, $frame['headers']['message-id']);
}

/* отмена подписки к очереди */
stomp_unsubscribe($link, $queue);

/* закрытие подключения */
stomp_close($link);

?>

Примечания

Замечание:

Также может быть указан заголовок транзакции, означающий что приём сообщения должен являться частью именованной транзакции.

Подсказка

Stomp асинхронен по своей сути. Синхронная связь может быть реализована добавлением receipt-заголовка. Это заставит методы ничего не возвращать, пока сервер не подтвердит получение сообщения или не будет превышено время ожидания сообщения.

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top