Completed
Push — master ( 1fe8c2...13f8a0 )
by Dominik
02:39
created

RabbitMQSend::send()   A

Complexity

Conditions 2
Paths 4

Size

Total Lines 16
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 16
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 11
nc 4
nop 1
1
<?php
2
3
namespace Saxulum\MessageQueue\RabbitMQ;
4
5
use PhpAmqpLib\Connection\AMQPStreamConnection;
6
use PhpAmqpLib\Message\AMQPMessage;
7
use Saxulum\MessageQueue\MessageInterface;
8
use Saxulum\MessageQueue\MessageSendException;
9
use Saxulum\MessageQueue\MessageSendInterface;
10
11
final class RabbitMQSend implements MessageSendInterface
12
{
13
    /**
14
     * @var AMQPStreamConnection
15
     */
16
    private $connection;
17
18
    /**
19
     * @var string
20
     */
21
    private $queue;
22
23
    /**
24
     * @param AMQPStreamConnection $connection
25
     * @param string               $queue
26
     */
27
    public function __construct(AMQPStreamConnection $connection, string $queue)
28
    {
29
        $this->connection = $connection;
30
        $this->queue = $queue;
31
    }
32
33
    /**
34
     * @param MessageInterface $message
35
     *
36
     * @return MessageSendInterface
37
     *
38
     * @throws MessageSendException
39
     */
40
    public function send(MessageInterface $message): MessageSendInterface
41
    {
42
        try {
43
            $channel = $this->connection->channel();
44
            $channel->queue_declare($this->queue, false, false, false, false);
45
            $channel->basic_publish(new AMQPMessage($message->toJson()), '', $this->queue);
46
        } catch (\Exception $e) {
47
            throw new MessageSendException(
48
                MessageSendException::MESSAGE_SEND_FAILED.'('.$e->getMessage().')',
49
                MessageSendException::CODE_SEND_FAILED,
50
                $e
51
            );
52
        }
53
54
        return $this;
55
    }
56
}
57