5
5
use Enqueue \Consumption \Context \End ;
6
6
use Enqueue \Consumption \Context \MessageResult ;
7
7
use Enqueue \Consumption \Context \PostConsume ;
8
+ use Enqueue \Consumption \Context \Start ;
8
9
use Enqueue \Consumption \EndExtensionInterface ;
9
10
use Enqueue \Consumption \MessageResultExtensionInterface ;
10
11
use Enqueue \Consumption \PostConsumeExtensionInterface ;
12
+ use Enqueue \Consumption \StartExtensionInterface ;
11
13
use Enqueue \Consumption \Result ;
12
- use Enqueue \RdKafka \RdKafkaMessage ;
13
- use Interop \Queue \Context ;
14
+ use Interop \Queue \Consumer ;
14
15
use Interop \Queue \Message ;
15
16
16
17
/**
17
18
* Class CommitRateReducer
18
19
*/
19
- class CommitRateReducer implements MessageResultExtensionInterface, EndExtensionInterface, PostConsumeExtensionInterface
20
+ class CommitRateReducer implements MessageResultExtensionInterface, EndExtensionInterface, PostConsumeExtensionInterface, StartExtensionInterface
20
21
{
21
22
/**
22
23
* @var int
@@ -28,17 +29,30 @@ class CommitRateReducer implements MessageResultExtensionInterface, EndExtension
28
29
*/
29
30
private $ uncommited ;
30
31
32
+ /**
33
+ * @var Consumer
34
+ */
35
+ private $ consumer ;
36
+
37
+ /**
38
+ * @param Start $context
39
+ */
40
+ public function onStart (Start $ context ): void
41
+ {
42
+ $ this ->stamp = time ();
43
+ }
44
+
31
45
/**
32
46
* @param MessageResult $context
33
47
*/
34
48
public function onResult (MessageResult $ context ): void
35
49
{
36
- if ($ context -> getResult () !== Result:: ACK ) {
37
- return ;
50
+ if (null === $ this -> consumer ) {
51
+ $ this -> consumer = $ context -> getConsumer () ;
38
52
}
39
53
40
- if (null === $ this -> stamp ) {
41
- $ this -> stamp = time () ;
54
+ if ($ context -> getResult () !== Result:: ACK ) {
55
+ return ;
42
56
}
43
57
44
58
if ($ this ->stamp === time ()) {
@@ -61,7 +75,7 @@ public function onPostConsume(PostConsume $context): void
61
75
return ;
62
76
}
63
77
64
- $ this ->commit ($ context -> getContext (), $ this ->uncommited );
78
+ $ this ->commit ($ this ->uncommited );
65
79
}
66
80
67
81
/**
@@ -73,17 +87,15 @@ public function onEnd(End $context): void
73
87
return ;
74
88
}
75
89
76
- $ this ->commit ($ context -> getContext (), $ this ->uncommited );
90
+ $ this ->commit ($ this ->uncommited );
77
91
}
78
92
79
93
/**
80
- * @param Context $context
81
- * @param RdKafkaMessage $message
94
+ * @param Message $message
82
95
*/
83
- private function commit (Context $ context , Message $ message ): void
96
+ private function commit (Message $ message ): void
84
97
{
85
- // TODO: offset should be committed here
86
-
98
+ $ this ->consumer ->acknowledge ($ message );
87
99
$ this ->uncommited = null ;
88
100
}
89
101
}
0 commit comments