@@ -176,6 +176,7 @@ private function getNewMessages(): \Generator
176
176
'Action ' => 'ReceiveMessage ' ,
177
177
'VisibilityTimeout ' => $ this ->configuration ['visibility_timeout ' ],
178
178
'MaxNumberOfMessages ' => $ this ->configuration ['buffer_size ' ],
179
+ 'MessageAttributeName.1 ' => 'All ' ,
179
180
'WaitTimeSeconds ' => $ this ->configuration ['wait_time ' ],
180
181
]);
181
182
}
@@ -186,9 +187,18 @@ private function getNewMessages(): \Generator
186
187
187
188
$ xml = new \SimpleXMLElement ($ this ->currentResponse ->getContent ());
188
189
foreach ($ xml ->ReceiveMessageResult ->Message as $ xmlMessage ) {
190
+ $ headers = [];
191
+ foreach ($ xmlMessage ->MessageAttribute as $ item ) {
192
+ if ('String ' !== (string ) $ item ->Value ->DataType ) {
193
+ continue ;
194
+ }
195
+ $ headers [(string ) $ item ->Name ] = (string ) $ item ->Value ->StringValue ;
196
+ }
189
197
$ this ->buffer [] = [
190
198
'id ' => (string ) $ xmlMessage ->ReceiptHandle ,
191
- ] + json_decode ($ xmlMessage ->Body , true );
199
+ 'body ' => (string ) $ xmlMessage ->Body ,
200
+ 'headers ' => $ headers ,
201
+ ];
192
202
}
193
203
194
204
$ this ->currentResponse = null ;
@@ -246,17 +256,23 @@ public function send(string $body, array $headers, int $delay = 0, ?string $mess
246
256
$ this ->setup ();
247
257
}
248
258
249
- $ messageBody = json_encode (['body ' => $ body , 'headers ' => $ headers ]);
250
-
251
259
$ parameters = [
252
260
'Action ' => 'SendMessage ' ,
253
- 'MessageBody ' => $ messageBody ,
261
+ 'MessageBody ' => $ body ,
254
262
'DelaySeconds ' => $ delay ,
255
263
];
256
264
265
+ $ index = 0 ;
266
+ foreach ($ headers as $ name => $ value ) {
267
+ ++$ index ;
268
+ $ parameters ["MessageAttribute. $ index.Name " ] = $ name ;
269
+ $ parameters ["MessageAttribute. $ index.Value.DataType " ] = 'String ' ;
270
+ $ parameters ["MessageAttribute. $ index.Value.StringValue " ] = $ value ;
271
+ }
272
+
257
273
if ($ this ->isFifoQueue ($ this ->configuration ['queue_name ' ])) {
258
274
$ parameters ['MessageGroupId ' ] = null !== $ messageGroupId ? $ messageGroupId : __METHOD__ ;
259
- $ parameters ['MessageDeduplicationId ' ] = null !== $ messageDeduplicationId ? $ messageDeduplicationId : sha1 ($ messageBody );
275
+ $ parameters ['MessageDeduplicationId ' ] = null !== $ messageDeduplicationId ? $ messageDeduplicationId : sha1 (json_encode ([ ' body ' => $ body , ' headers ' => $ headers ]) );
260
276
}
261
277
262
278
$ this ->call ($ this ->getQueueUrl (), $ parameters );
0 commit comments