Allow multiple "AsMessageHandler" attributes

This commit is contained in:
Ferdinand Kuhl 2023-01-05 18:40:02 +01:00
parent dc00f8b7d6
commit df4d3b5fa9

View file

@ -54,8 +54,9 @@ class HandlersLocatorFactory
$asHandlerClasses = $this->reflectionService
->getClassNamesByAnnotation(AsMessageHandler::class);
foreach ($asHandlerClasses as $asHandlerClass) {
/** @var AsMessageHandler $annotation */
$annotation = $this->reflectionService->getClassAnnotation($asHandlerClass, AsMessageHandler::class);
/** @var AsMessageHandler[] $annotations */
$annotations = $this->reflectionService->getClassAnnotations($asHandlerClass, AsMessageHandler::class);
foreach ($annotations as $annotation) {
$config['from_transport'] = $annotation->fromTransport;
$config['priority'] = $annotation->priority;
$method = $annotation->method ?? '__invoke';
@ -67,11 +68,13 @@ class HandlersLocatorFactory
if ($annotation->bus !== null && $annotation->bus !== $busName) {
continue;
}
$handler = $this->objectManager->get($asHandlerClass);
$handlerDescriptors[$messageName][] = new HandlerDescriptor(
$this->objectManager->get($asHandlerClass),
$config
);
}
}
// TODO: Maybe we can allow handlers to be added to bus or globally by configuration?
return new HandlersLocator($handlerDescriptors);