Skip to content

Commit

Permalink
bug #26956 [Messenger][AmqpExt] Allow disabling the auto-setup of the…
Browse files Browse the repository at this point in the history
… connection (sroze)

This PR was squashed before being merged into the 4.1-dev branch (closes #26956).

Discussion
----------

[Messenger][AmqpExt] Allow disabling the auto-setup of the connection

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #26937
| License       | MIT
| Doc PR        | ø

Allow disabling the auto-setup of the AMQP connection. Especially useful when the messages are published to another system (see #26937)

Commits
-------

b3039fa [Messenger][AmqpExt] Allow disabling the auto-setup of the connection
  • Loading branch information
sroze committed Apr 17, 2018
2 parents fe19931 + b3039fa commit 4429c9b
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 3 deletions.
11 changes: 8 additions & 3 deletions src/Symfony/Component/Messenger/Adapter/AmqpExt/Connection.php
Expand Up @@ -94,7 +94,7 @@ public static function fromDsn(string $dsn, array $options = array(), bool $debu
*/
public function publish(string $body, array $headers = array()): void
{
if ($this->debug) {
if ($this->debug && $this->shouldSetup()) {
$this->setup();
}

Expand All @@ -108,7 +108,7 @@ public function publish(string $body, array $headers = array()): void
*/
public function get(): ?\AMQPEnvelope
{
if ($this->debug) {
if ($this->debug && $this->shouldSetup()) {
$this->setup();
}

Expand All @@ -117,7 +117,7 @@ public function get(): ?\AMQPEnvelope
return $message;
}
} catch (\AMQPQueueException $e) {
if (404 === $e->getCode()) {
if (404 === $e->getCode() && $this->shouldSetup()) {
// If we get a 404 for the queue, it means we need to setup the exchange & queue.
$this->setup();

Expand Down Expand Up @@ -215,4 +215,9 @@ private function clear(): void
$this->amqpQueue = null;
$this->amqpExchange = null;
}

private function shouldSetup(): bool
{
return !array_key_exists('auto-setup', $this->connectionCredentials) || 'false' !== $this->connectionCredentials['auto-setup'];
}
}
Expand Up @@ -147,6 +147,42 @@ public function testItAllowsToUseAPersistentConnection()
$connection = Connection::fromDsn('amqp://localhost/%2f/messages?persistent=true', array(), false, $factory);
$connection->publish('body');
}

public function testItSetupsTheConnectionWhenDebug()
{
$factory = new TestAmqpFactory(
$amqpConnection = $this->getMockBuilder(\AMQPConnection::class)->disableOriginalConstructor()->getMock(),
$amqpChannel = $this->getMockBuilder(\AMQPChannel::class)->disableOriginalConstructor()->getMock(),
$amqpQueue = $this->getMockBuilder(\AMQPQueue::class)->disableOriginalConstructor()->getMock(),
$amqpExchange = $this->getMockBuilder(\AMQPExchange::class)->disableOriginalConstructor()->getMock()
);

$amqpExchange->method('getName')->willReturn('exchange_name');
$amqpExchange->expects($this->once())->method('declareExchange');
$amqpQueue->expects($this->once())->method('declareQueue');
$amqpQueue->expects($this->once())->method('bind')->with('exchange_name', 'my_key');

$connection = Connection::fromDsn('amqp://localhost/%2f/messages?queue[routing_key]=my_key', array(), true, $factory);
$connection->publish('body');
}

public function testItCanDisableTheSetup()
{
$factory = new TestAmqpFactory(
$amqpConnection = $this->getMockBuilder(\AMQPConnection::class)->disableOriginalConstructor()->getMock(),
$amqpChannel = $this->getMockBuilder(\AMQPChannel::class)->disableOriginalConstructor()->getMock(),
$amqpQueue = $this->getMockBuilder(\AMQPQueue::class)->disableOriginalConstructor()->getMock(),
$amqpExchange = $this->getMockBuilder(\AMQPExchange::class)->disableOriginalConstructor()->getMock()
);

$amqpExchange->method('getName')->willReturn('exchange_name');
$amqpExchange->expects($this->never())->method('declareExchange');
$amqpQueue->expects($this->never())->method('declareQueue');
$amqpQueue->expects($this->never())->method('bind');

$connection = Connection::fromDsn('amqp://localhost/%2f/messages?queue[routing_key]=my_key', array('auto-setup' => 'false'), true, $factory);
$connection->publish('body');
}
}

class TestAmqpFactory extends AmqpFactory
Expand Down

0 comments on commit 4429c9b

Please sign in to comment.