Skip to content

Commit f748780

Browse files
committed
new event
1 parent 10a0377 commit f748780

File tree

9 files changed

+91
-30
lines changed

9 files changed

+91
-30
lines changed

README.md

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<p align="center">
2-
<img alt="chunk Logo" src="https://raw.githubusercontent.com/clivern/chunk/master/assets/img/gopher.png?v=1.0.1" width="180" />
2+
<img alt="chunk Logo" src="https://raw.githubusercontent.com/clivern/chunk/master/assets/img/gopher.png?v=1.2.0" width="180" />
33
<h3 align="center">Chunk</h3>
44
<p align="center">Asynchronous Task Queue Based on Distributed Message Passing for PHP</p>
55
<p align="center">
66
<a href="https://travis-ci.com/Clivern/Chunk"><img src="https://travis-ci.com/Clivern/Chunk.svg?branch=master"></a>
7-
<a href="https://packagist.org/packages/clivern/chunk"><img src="https://img.shields.io/badge/Version-1.0.1-red.svg"></a>
7+
<a href="https://packagist.org/packages/clivern/chunk"><img src="https://img.shields.io/badge/Version-1.2.0-red.svg"></a>
88
<a href="https://github.com/Clivern/Chunk/blob/master/LICENSE"><img src="https://img.shields.io/badge/LICENSE-MIT-orange.svg"></a>
99
</p>
1010
</p>
@@ -30,6 +30,7 @@ First create event handlers. Chunk supports these events
3030
- `EventInterface::ON_MESSAGE_FAILED_EVENT`
3131
- `EventInterface::ON_MESSAGE_HANDLED_EVENT`
3232
- `EventInterface::ON_MESSAGE_SENT_EVENT`
33+
- `EventInterface::ON_MESSAGE_SEND_FAILURE_EVENT`
3334

3435
```php
3536
use Clivern\Chunk\Contract\MessageInterface;
@@ -49,7 +50,7 @@ class MessageReceivedEvent implements EventInterface
4950
/**
5051
* {@inheritdoc}
5152
*/
52-
public function invoke(MessageInterface $message)
53+
public function invoke(MessageInterface $message, $exception = null)
5354
{
5455
var_dump(sprintf('Message Received Event: %s', (string) $message));
5556
}
@@ -68,7 +69,7 @@ class MessageFailedEvent implements EventInterface
6869
/**
6970
* {@inheritdoc}
7071
*/
71-
public function invoke(MessageInterface $message)
72+
public function invoke(MessageInterface $message, $exception = null)
7273
{
7374
var_dump(sprintf('Message Failed Event: %s', (string) $message));
7475
}
@@ -87,7 +88,7 @@ class MessageHandledEvent implements EventInterface
8788
/**
8889
* {@inheritdoc}
8990
*/
90-
public function invoke(MessageInterface $message)
91+
public function invoke(MessageInterface $message, $exception = null)
9192
{
9293
var_dump(sprintf('Message Handled Event: %s', (string) $message));
9394
}
@@ -106,16 +107,37 @@ class MessageSentEvent implements EventInterface
106107
/**
107108
* {@inheritdoc}
108109
*/
109-
public function invoke(MessageInterface $message)
110+
public function invoke(MessageInterface $message, $exception = null)
110111
{
111112
var_dump(sprintf('Message Sent Event: %s', (string) $message));
112113
}
113114
}
114115

116+
class MessageSendFailureEvent implements EventInterface
117+
{
118+
/**
119+
* {@inheritdoc}
120+
*/
121+
public function getType(): string
122+
{
123+
return EventInterface::ON_MESSAGE_SEND_FAILURE_EVENT;
124+
}
125+
126+
/**
127+
* {@inheritdoc}
128+
*/
129+
public function invoke(MessageInterface $message, $exception = null)
130+
{
131+
var_dump(sprintf('Message Send Failure Event: %s', (string) $message));
132+
var_dump(sprintf('Error raised: %s', $exception->getMessage()));
133+
}
134+
}
135+
115136
$eventHandler = new EventHandler();
116137
$eventHandler->addEvent(new MessageReceivedEvent())
117138
->addEvent(new MessageFailedEvent())
118139
->addEvent(new MessageHandledEvent())
140+
->addEvent(new MessageSendFailureEvent())
119141
->addEvent(new MessageSentEvent());
120142
```
121143

@@ -205,9 +227,9 @@ $sender->connect();
205227

206228
$message = new Message();
207229
$message->setId(1)
208-
->setUuid('f9714a92-2129-44e6-9ef4-8eebc2e33958')
230+
->setUuid('f9714a92-2129-44e6-9ef4-8eebc2e33958') // or leave & chunk will generate a uuid
209231
->setPayload('something')
210-
->setHandlerType('serviceA.processOrder');
232+
->setHandlerType('serviceA.processOrder'); // same as the one defined in ProcessOrderMessageHandler class -> getType method
211233

212234
$sender->send($message);
213235
$sender->disconnect();

examples/basic/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"require": {
3-
"clivern/chunk": "^1.0.1"
3+
"clivern/chunk": "^1.2.0"
44
}
55
}

examples/basic/listener.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public function getType(): string
3131
/**
3232
* {@inheritdoc}
3333
*/
34-
public function invoke(MessageInterface $message)
34+
public function invoke(MessageInterface $message, $exception = null)
3535
{
3636
var_dump(sprintf('Message Received Event: %s', (string) $message));
3737
}
@@ -50,7 +50,7 @@ public function getType(): string
5050
/**
5151
* {@inheritdoc}
5252
*/
53-
public function invoke(MessageInterface $message)
53+
public function invoke(MessageInterface $message, $exception = null)
5454
{
5555
var_dump(sprintf('Message Failed Event: %s', (string) $message));
5656
}
@@ -69,7 +69,7 @@ public function getType(): string
6969
/**
7070
* {@inheritdoc}
7171
*/
72-
public function invoke(MessageInterface $message)
72+
public function invoke(MessageInterface $message, $exception = null)
7373
{
7474
var_dump(sprintf('Message Handled Event: %s', (string) $message));
7575
}

examples/basic/sender.php

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,44 @@ public function getType(): string
3030
/**
3131
* {@inheritdoc}
3232
*/
33-
public function invoke(MessageInterface $message)
33+
public function invoke(MessageInterface $message, $exception = null)
3434
{
3535
var_dump(sprintf('Message Sent Event: %s', (string) $message));
3636
}
3737
}
3838

39+
class MessageSendFailureEvent implements EventInterface
40+
{
41+
/**
42+
* {@inheritdoc}
43+
*/
44+
public function getType(): string
45+
{
46+
return EventInterface::ON_MESSAGE_SEND_FAILURE_EVENT;
47+
}
48+
49+
/**
50+
* {@inheritdoc}
51+
*/
52+
public function invoke(MessageInterface $message, $exception = null)
53+
{
54+
var_dump(sprintf('Message Send Failure Event: %s', (string) $message));
55+
var_dump(sprintf('Error raised: %s', $exception->getMessage()));
56+
}
57+
}
58+
3959
$broker = new RabbitMQ('127.0.0.1', 5672, 'guest', 'guest');
4060

4161
$eventHandler = new EventHandler();
42-
$eventHandler->addEvent(new MessageSentEvent());
62+
$eventHandler->addEvent(new MessageSentEvent())
63+
->addEvent(new MessageSendFailureEvent());
4364

4465
$sender = new Sender($broker, $eventHandler);
4566

4667
$sender->connect();
4768

4869
$message = new Message();
4970
$message->setId(1)
50-
->setUuid('aaaa-bbbb-cccc-dddd')
5171
->setPayload('something')
5272
->setHandlerType('serviceA.processOrder');
5373

src/Contract/EventHandlerInterface.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ public function addEvent(EventInterface $event): self;
2929
/**
3030
* Invoke an event with a message as parameter.
3131
*
32+
* @param null|mixed $exception
33+
*
3234
* @return void
3335
*/
34-
public function invokeEvent(string $type, MessageInterface $message);
36+
public function invokeEvent(string $type, MessageInterface $message, $exception = null);
3537
}

src/Contract/EventInterface.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ interface EventInterface
1818
const ON_MESSAGE_RECEIVED_EVENT = 'onMessageReceivedEvent';
1919
const ON_MESSAGE_HANDLED_EVENT = 'onMessageHandledEvent';
2020
const ON_MESSAGE_FAILED_EVENT = 'onMessageFailedEvent';
21+
const ON_MESSAGE_SEND_FAILURE_EVENT = 'onMessageSendFailureEvent';
2122

2223
/**
2324
* Get Event Type.
@@ -27,7 +28,9 @@ public function getType(): string;
2728
/**
2829
* Invoke Event.
2930
*
31+
* @param null|mixed $exception
32+
*
3033
* @return void
3134
*/
32-
public function invoke(MessageInterface $message);
35+
public function invoke(MessageInterface $message, $exception = null);
3336
}

src/Core/EventHandler.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,12 @@ public function addEvent(EventInterface $event): EventHandlerInterface
5555
/**
5656
* {@inheritdoc}
5757
*/
58-
public function invokeEvent(string $type, MessageInterface $message)
58+
public function invokeEvent(string $type, MessageInterface $message, $exception = null)
5959
{
6060
if (!$this->hasEvent($type)) {
6161
throw new EventHandlerNotFound(sprintf('Error! event handler of type %s not found', $type));
6262
}
6363

64-
return $this->events[$type]->invoke($message);
64+
return $this->events[$type]->invoke($message, $exception);
6565
}
6666
}

src/Core/Listener.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,29 +78,30 @@ public function listen(): bool
7878
*/
7979
public function callback($message)
8080
{
81-
$messageObj = $this->messageObj->fromString($message->body);
81+
$this->messageObj->fromString($message->body);
8282

8383
if ($this->eventHandler->hasEvent(EventInterface::ON_MESSAGE_RECEIVED_EVENT)) {
8484
$this->eventHandler->invokeEvent(
8585
EventInterface::ON_MESSAGE_RECEIVED_EVENT,
86-
$messageObj
86+
$this->messageObj
8787
);
8888
}
8989

9090
try {
91-
$this->mapper->callHandler($messageObj);
91+
$this->mapper->callHandler($this->messageObj);
9292

9393
if ($this->eventHandler->hasEvent(EventInterface::ON_MESSAGE_HANDLED_EVENT)) {
9494
$this->eventHandler->invokeEvent(
9595
EventInterface::ON_MESSAGE_HANDLED_EVENT,
96-
$messageObj
96+
$this->messageObj
9797
);
9898
}
9999
} catch (\Exception $e) {
100100
if ($this->eventHandler->hasEvent(EventInterface::ON_MESSAGE_FAILED_EVENT)) {
101101
$this->eventHandler->invokeEvent(
102102
EventInterface::ON_MESSAGE_FAILED_EVENT,
103-
$messageObj
103+
$this->messageObj,
104+
$e
104105
);
105106
}
106107
}

src/Core/Sender.php

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Clivern\Chunk\Contract\EventInterface;
1515
use Clivern\Chunk\Contract\MessageInterface;
1616
use Clivern\Chunk\Contract\SenderInterface;
17+
use Exception;
1718
use Ramsey\Uuid\Uuid;
1819

1920
/**
@@ -58,13 +59,25 @@ public function send(MessageInterface $message)
5859
$message->setUuid(Uuid::uuid4()->toString());
5960
}
6061

61-
$this->broker->send($message);
62+
try {
63+
$this->broker->send($message);
6264

63-
if ($this->eventHandler->hasEvent(EventInterface::ON_MESSAGE_SENT_EVENT)) {
64-
$this->eventHandler->invokeEvent(
65-
EventInterface::ON_MESSAGE_SENT_EVENT,
66-
$message
67-
);
65+
if ($this->eventHandler->hasEvent(EventInterface::ON_MESSAGE_SENT_EVENT)) {
66+
$this->eventHandler->invokeEvent(
67+
EventInterface::ON_MESSAGE_SENT_EVENT,
68+
$message
69+
);
70+
}
71+
} catch (Exception $e) {
72+
if ($this->eventHandler->hasEvent(EventInterface::ON_MESSAGE_SEND_FAILURE_EVENT)) {
73+
$this->eventHandler->invokeEvent(
74+
EventInterface::ON_MESSAGE_SEND_FAILURE_EVENT,
75+
$message,
76+
$e
77+
);
78+
} else {
79+
throw new Exception($e);
80+
}
6881
}
6982
}
7083

0 commit comments

Comments
 (0)