У меня проблема с публикацией сообщений на RabbitMQ.Наше приложение должно работать на транзакционном уровне.
Но я не понимаю одного случая: если я сначала запущу транзакцию и передам ее, все последующие сообщения не будут опубликованы в RabbitMQ.
$connection = new \AMQPConnection([
'host' => 'rabbitmq',
'port' => 5672,
'login' => 'guest',
'password' => 'guest',
]);
$connection->connect();
$channel = new \AMQPChannel($connection);
$exchange = new \AMQPExchange($channel);
$exchange->setName('some_test');
$exchange->setFlags(AMQP_DURABLE);
$exchange->setType(AMQP_EX_TYPE_DIRECT);
$exchange->declareExchange();
$queue = new \AMQPQueue($channel);
$queue->setFlags(AMQP_DURABLE);
$queue->setName('some_test_queue');
$queue->declareQueue();
$queue->bind('some_test', 'some:foo:bar');
$channel->startTransaction();
$exchange->publish('some #1', 'some:foo:bar');
$exchange->publish('some #2', 'some:foo:bar');
$channel->commitTransaction();
$exchange->publish('some #3', 'some:foo:bar');
Последние сообщения не опубликованы для обмена.Но, если я позвоню по commitTransaction
в канале, последние сообщения были успешно опубликованы в очереди.
Я прочитал документацию здесь: https://www.rabbitmq.com/confirms.html#publisher-confirms
Возможно, RabbitMQ после первой транзакции пометит этот канал какТранзакционные и всегда ждать фиксации / отката после публикации каких-либо сообщений?