Skip to content

Commit 29b3a6c

Browse files
author
dmitriy
committed
updated composer.lock, configured rabbitmq, added message-handler example.
1 parent cac6036 commit 29b3a6c

File tree

13 files changed

+1512
-633
lines changed

13 files changed

+1512
-633
lines changed

composer.lock

Lines changed: 676 additions & 331 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/packages/messenger.yaml

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,28 @@ framework:
2626
failure_transport: failed
2727

2828
transports:
29+
async_priority_high:
30+
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
31+
options:
32+
exchange:
33+
name: high
34+
queues:
35+
messages_high: ~
36+
async_priority_low:
37+
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
38+
options:
39+
exchange:
40+
name: low
41+
queues:
42+
messages_low: ~
43+
2944
# Uncomment the following line to enable a transport named "amqp"
30-
async: '%env(MESSENGER_TRANSPORT_DSN)%'
45+
# async: '%env(MESSENGER_TRANSPORT_DSN)%'
3146
failed: 'doctrine://default?queue_name=failed'
3247

3348
routing:
34-
# async is whatever name you gave your transport above
35-
'*': async
49+
App\Message\Interfaces\MessageHighInterface: async_priority_high
50+
App\Message\Interfaces\MessageLowInterface: async_priority_low
51+
52+
# Route your messages to the transports
53+
# 'App\Message\YourMessage': async

config/services.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,5 +63,8 @@ services:
6363
class: App\EventSubscriber\BlameableDecorator
6464
decorates: stof_doctrine_extensions.listener.blameable
6565

66+
App\Service\Interfaces\MessageServiceInterface:
67+
class: App\Service\MessageService
68+
6669
# add more service definitions when explicit configuration is needed
6770
# please note that last definitions always *replace* previous ones
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace App\Message\Interfaces;
5+
6+
/**
7+
* Interface MessageHighInterface
8+
*
9+
* @package App\Message\Interfaces
10+
*/
11+
interface MessageHighInterface
12+
{
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace App\Message\Interfaces;
5+
6+
/**
7+
* Interface MessageLowInterface
8+
*
9+
* @package App\Message\Interfaces
10+
*/
11+
interface MessageLowInterface
12+
{
13+
}

src/Message/TestMessage.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace App\Message;
5+
6+
use App\Message\Interfaces\MessageHighInterface;
7+
8+
/**
9+
* Class TestMessage
10+
* TODO: This is message example, you can delete it.
11+
*
12+
* @package App\Message
13+
*/
14+
class TestMessage implements MessageHighInterface
15+
{
16+
private string $someId;
17+
18+
/**
19+
* @param string $someId
20+
*/
21+
public function __construct(string $someId)
22+
{
23+
$this->someId = $someId;
24+
}
25+
26+
/**
27+
* @return string
28+
*/
29+
public function getSomeId(): string
30+
{
31+
return $this->someId;
32+
}
33+
}

src/MessageHandler/TestHandler.php

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace App\MessageHandler;
5+
6+
use App\Message\TestMessage;
7+
use Symfony\Component\Messenger\Handler\MessageSubscriberInterface;
8+
use Psr\Log\LoggerInterface;
9+
use Throwable;
10+
11+
/**
12+
* Class TestHandler
13+
* TODO: This is handler example, you can delete it.
14+
*
15+
* @package App\MessageHandler
16+
*/
17+
class TestHandler implements MessageSubscriberInterface
18+
{
19+
private LoggerInterface $logger;
20+
21+
/**
22+
* Constructor
23+
*
24+
* @param LoggerInterface $logger
25+
*/
26+
public function __construct(LoggerInterface $logger)
27+
{
28+
$this->logger = $logger;
29+
}
30+
31+
/**
32+
* @param TestMessage $message
33+
*
34+
* @throws Throwable
35+
*/
36+
public function __invoke(TestMessage $message): void
37+
{
38+
$this->handleMessage($message);
39+
}
40+
41+
/** @inheritDoc */
42+
public static function getHandledMessages(): iterable
43+
{
44+
// handle this message on __invoke
45+
yield TestMessage::class;
46+
47+
/*yield ...Message::class => [
48+
'method' => 'handle...',
49+
];*/
50+
}
51+
52+
/**
53+
* @param TestMessage $message
54+
*
55+
* @throws Throwable
56+
*/
57+
private function handleMessage(TestMessage $message): void
58+
{
59+
// some actions here
60+
$this->logger->info('Test message processed');
61+
}
62+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
declare(strict_types = 1);
3+
/**
4+
* /src/Service/Interfaces/MessageServiceInterface.php
5+
*/
6+
7+
namespace App\Service\Interfaces;
8+
9+
/**
10+
* Interface MessageServiceInterface
11+
*
12+
* @package App\Service\Interfaces
13+
*/
14+
interface MessageServiceInterface
15+
{
16+
// TODO: implement it
17+
}

src/Service/MessageService.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
declare(strict_types = 1);
3+
/**
4+
* /src/Service/MessageService.php
5+
*/
6+
7+
namespace App\Service;
8+
9+
use App\Message\TestMessage;
10+
use Symfony\Component\Messenger\Envelope;
11+
use Symfony\Component\Messenger\MessageBusInterface;
12+
use App\Service\Interfaces\MessageServiceInterface;
13+
14+
/**
15+
* Class MessageService
16+
*
17+
* @package App\Service
18+
*/
19+
class MessageService implements MessageServiceInterface
20+
{
21+
private MessageBusInterface $bus;
22+
23+
/**
24+
* Constructor
25+
*
26+
* @param MessageBusInterface $bus
27+
*/
28+
public function __construct(MessageBusInterface $bus)
29+
{
30+
$this->bus = $bus;
31+
}
32+
33+
/**
34+
* @inheritDoc
35+
* TODO: This is example for creating test message, you can delete it.
36+
*/
37+
public function sendTestMessage(string $someId): self
38+
{
39+
$this->bus->dispatch(new Envelope(new TestMessage($someId)));
40+
41+
return $this;
42+
}
43+
}

0 commit comments

Comments
 (0)