@@ -37,6 +37,7 @@ class Connection
37
37
private $ connection ;
38
38
private $ stream ;
39
39
private $ queue ;
40
+ private $ tempQueue ;
40
41
private $ group ;
41
42
private $ consumer ;
42
43
private $ autoSetup ;
@@ -58,9 +59,10 @@ public function __construct(array $configuration, array $connectionCredentials =
58
59
}
59
60
60
61
$ this ->stream = $ configuration ['stream ' ] ?? self ::DEFAULT_OPTIONS ['stream ' ];
61
- $ this ->queue = $ this ->stream .'_queue ' ;
62
62
$ this ->group = $ configuration ['group ' ] ?? self ::DEFAULT_OPTIONS ['group ' ];
63
63
$ this ->consumer = $ configuration ['consumer ' ] ?? self ::DEFAULT_OPTIONS ['consumer ' ];
64
+ $ this ->queue = $ this ->stream .'__queue ' ;
65
+ $ this ->tempQueue = $ this ->stream .'__queue__ ' .$ this ->group .'__ ' .$ this ->consumer ;
64
66
$ this ->autoSetup = $ configuration ['auto_setup ' ] ?? self ::DEFAULT_OPTIONS ['auto_setup ' ];
65
67
$ this ->maxEntries = $ configuration ['stream_max_entries ' ] ?? self ::DEFAULT_OPTIONS ['stream_max_entries ' ];
66
68
}
@@ -117,12 +119,14 @@ public function get(): ?array
117
119
$ queuedMessageCount = $ this ->connection ->zcount ($ this ->queue , 0 , time ());
118
120
119
121
if ($ queuedMessageCount ) {
120
- foreach ($ this ->connection ->zpopmin ($ this ->queue , $ queuedMessageCount ) as $ queuedMessage => $ time ) {
121
- $ queuedMessage = json_encode ($ queuedMessage , true );
122
- // if a futured placed message is actually popped because of a race condition with
123
- // another running message consumer, the message is readded to the queue by add function
124
- // else its just added stream and will be available for all stream consumers
125
- $ this ->add ($ queuedMessage ['body ' ], $ queuedMessage ['headers ' ], (time () - $ time ) * 1000 );
122
+ for ($ i =0 ;$ i <$ queuedMessageCount ;$ i ++) {
123
+ foreach ($ this ->connection ->zpopmin ($ this ->queue , 1 ) as $ queuedMessage => $ time ) {
124
+ $ queuedMessage = json_encode ($ queuedMessage , true );
125
+ // if a futured placed message is actually popped because of a race condition with
126
+ // another running message consumer, the message is readded to the queue by add function
127
+ // else its just added stream and will be available for all stream consumers
128
+ $ this ->add ($ queuedMessage ['body ' ], $ queuedMessage ['headers ' ], (time () - $ time ) * 1000 );
129
+ }
126
130
}
127
131
}
128
132
0 commit comments