diff --git a/src/Messenger/Middleware/BaggageSchemaMiddleware.php b/src/Messenger/Middleware/BaggageSchemaMiddleware.php index 5a064d2..77c77f1 100644 --- a/src/Messenger/Middleware/BaggageSchemaMiddleware.php +++ b/src/Messenger/Middleware/BaggageSchemaMiddleware.php @@ -28,7 +28,11 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope ->setSchema($stamp->schema) ->setBaggage($this->baggageCodec->decode($stamp->baggage)); - return $stack->next()->handle($envelope, $stack); + $result = $stack->next()->handle($envelope, $stack); + + $this->baggageSchemaResolver->reset(); + + return $result; } $schema = $this->baggageSchemaResolver->getSchema(); diff --git a/src/Service/BaggageSchemaResolver.php b/src/Service/BaggageSchemaResolver.php index 28108f8..b33e4ea 100644 --- a/src/Service/BaggageSchemaResolver.php +++ b/src/Service/BaggageSchemaResolver.php @@ -41,4 +41,10 @@ public function getSchema(): ?string { return $this->schema; } + + public function reset(): void + { + $this->baggage = null; + $this->schema = null; + } } diff --git a/tests/Messenger/Middleware/BaggageSchemaMiddlewareTest.php b/tests/Messenger/Middleware/BaggageSchemaMiddlewareTest.php index d4a6944..40326ee 100644 --- a/tests/Messenger/Middleware/BaggageSchemaMiddlewareTest.php +++ b/tests/Messenger/Middleware/BaggageSchemaMiddlewareTest.php @@ -32,7 +32,13 @@ public function testSchemaIsSetFromStamp(): void $nextMiddleware = new class implements MiddlewareInterface { public function handle(Envelope $envelope, StackInterface $stack): Envelope { - return $envelope; + /** @var BaggageSchemaStamp|null $stamp */ + $stamp = $envelope->last(BaggageSchemaStamp::class); + + return new Envelope((object) [ + 'schema' => $stamp?->schema, + 'baggage' => $stamp?->baggage, + ]); } }; @@ -40,10 +46,14 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope ->method('next') ->willReturn($nextMiddleware); - $middleware->handle($envelope, $stack); + $envelope = $middleware->handle($envelope, $stack); + + $result = (array) $envelope->getMessage(); - $this->assertSame($schema, $resolver->getSchema()); - $this->assertSame($baggage, $resolver->getBaggage()); + $this->assertSame($schema, $result['schema']); + $this->assertSame($baggage, $baggageCodec->decode($result['baggage'])); + $this->assertNull($resolver->getSchema()); + $this->assertNull($resolver->getBaggage()); } public function testSchemaStampIsInjectedIfMissing(): void