3
3
namespace Enqueue \Consumption \Extension ;
4
4
5
5
use Enqueue \Consumption \Context ;
6
+ use Enqueue \Consumption \Context \PreConsume ;
6
7
use Enqueue \Consumption \EmptyExtensionTrait ;
7
8
use Enqueue \Consumption \ExtensionInterface ;
9
+ use Psr \Log \LoggerInterface ;
8
10
9
11
class LimitConsumedMessagesExtension implements ExtensionInterface
10
12
{
@@ -23,51 +25,41 @@ class LimitConsumedMessagesExtension implements ExtensionInterface
23
25
/**
24
26
* @param int $messageLimit
25
27
*/
26
- public function __construct ($ messageLimit )
28
+ public function __construct (int $ messageLimit )
27
29
{
28
- if (false == is_int ($ messageLimit )) {
29
- throw new \InvalidArgumentException (sprintf (
30
- 'Expected message limit is int but got: "%s" ' ,
31
- is_object ($ messageLimit ) ? get_class ($ messageLimit ) : gettype ($ messageLimit )
32
- ));
33
- }
34
-
35
30
$ this ->messageLimit = $ messageLimit ;
36
31
$ this ->messageConsumed = 0 ;
37
32
}
38
33
39
- /**
40
- * {@inheritdoc}
41
- */
42
- public function onBeforeReceive (Context $ context )
34
+ public function onPreConsume (PreConsume $ context ): void
43
35
{
44
36
// this is added here to handle an edge case. when a user sets zero as limit.
45
- $ this ->checkMessageLimit ($ context );
37
+ if ($ this ->shouldBeStopped ($ context ->getLogger ())) {
38
+ $ context ->interruptExecution ();
39
+ }
46
40
}
47
41
48
- /**
49
- * {@inheritdoc}
50
- */
51
42
public function onPostReceived (Context $ context )
52
43
{
53
44
++$ this ->messageConsumed ;
54
45
55
- $ this ->checkMessageLimit ($ context );
46
+ if ($ this ->shouldBeStopped ($ context ->getLogger ())) {
47
+ $ context ->setExecutionInterrupted (true );
48
+ }
56
49
}
57
50
58
- /**
59
- * @param Context $context
60
- */
61
- protected function checkMessageLimit (Context $ context )
51
+ protected function shouldBeStopped (LoggerInterface $ logger ): bool
62
52
{
63
53
if ($ this ->messageConsumed >= $ this ->messageLimit ) {
64
- $ context -> getLogger () ->debug (sprintf (
54
+ $ logger ->debug (sprintf (
65
55
'[LimitConsumedMessagesExtension] Message consumption is interrupted since the message limit reached. ' .
66
56
' limit: "%s" ' ,
67
57
$ this ->messageLimit
68
58
));
69
59
70
- $ context -> setExecutionInterrupted ( true ) ;
60
+ return true ;
71
61
}
62
+
63
+ return false ;
72
64
}
73
65
}
0 commit comments