@@ -38,6 +38,7 @@ class Connection
38
38
private $ connection ;
39
39
private $ stream ;
40
40
private $ queue ;
41
+ private $ tempQueue ;
41
42
private $ group ;
42
43
private $ consumer ;
43
44
private $ autoSetup ;
@@ -53,9 +54,10 @@ public function __construct(array $configuration, array $connectionCredentials =
53
54
$ this ->connection ->connect ($ connectionCredentials ['host ' ] ?? '127.0.0.1 ' , $ connectionCredentials ['port ' ] ?? 6379 );
54
55
$ this ->connection ->setOption (\Redis::OPT_SERIALIZER , $ redisOptions ['serializer ' ] ?? \Redis::SERIALIZER_PHP );
55
56
$ this ->stream = $ configuration ['stream ' ] ?? self ::DEFAULT_OPTIONS ['stream ' ];
56
- $ this ->queue = $ this ->stream .'_queue ' ;
57
57
$ this ->group = $ configuration ['group ' ] ?? self ::DEFAULT_OPTIONS ['group ' ];
58
58
$ this ->consumer = $ configuration ['consumer ' ] ?? self ::DEFAULT_OPTIONS ['consumer ' ];
59
+ $ this ->queue = $ this ->stream .'__queue ' ;
60
+ $ this ->tempQueue = $ this ->stream .'__queue__ ' .$ this ->group .'__ ' .$ this ->consumer ;
59
61
$ this ->autoSetup = $ configuration ['auto_setup ' ] ?? self ::DEFAULT_OPTIONS ['auto_setup ' ];
60
62
}
61
63
@@ -98,12 +100,14 @@ public function get(): ?array
98
100
$ queuedMessageCount = $ this ->connection ->zcount ($ this ->queue , 0 , time ());
99
101
100
102
if ($ queuedMessageCount ) {
101
- foreach ($ this ->connection ->zpopmin ($ this ->queue , $ queuedMessageCount ) as $ queuedMessage => $ time ) {
102
- $ queuedMessage = json_encode ($ queuedMessage , true );
103
- // if a futured placed message is actually popped because of a race condition with
104
- // another running message consumer, the message is readded to the queue by add function
105
- // else its just added stream and will be available for all stream consumers
106
- $ this ->add ($ queuedMessage ['body ' ], $ queuedMessage ['headers ' ], (time () - $ time ) * 1000 );
103
+ for ($ i =0 ;$ i <$ queuedMessageCount ;$ i ++) {
104
+ foreach ($ this ->connection ->zpopmin ($ this ->queue , 1 ) as $ queuedMessage => $ time ) {
105
+ $ queuedMessage = json_encode ($ queuedMessage , true );
106
+ // if a futured placed message is actually popped because of a race condition with
107
+ // another running message consumer, the message is readded to the queue by add function
108
+ // else its just added stream and will be available for all stream consumers
109
+ $ this ->add ($ queuedMessage ['body ' ], $ queuedMessage ['headers ' ], (time () - $ time ) * 1000 );
110
+ }
107
111
}
108
112
}
109
113
0 commit comments