{"record":{"id":"c7b8a15fe7e4ee95","repo":"flowable/flowable-engine","slug":"could-not-register-rabbit-listener-endpoint-on-c-c7b8a1","errorCode":null,"errorMessage":"Could not register rabbit listener endpoint on [{channelDefinition}], no TaskExecutor with id '{executorBeanName}' was found in the application context","messagePattern":"Could not register rabbit listener endpoint on \\[(.+?)\\], no TaskExecutor with id '(.+?)' was found in the application context","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-event-registry-spring/src/main/java/org/flowable/eventregistry/spring/rabbit/RabbitChannelDefinitionProcessor.java","lineNumber":260,"sourceCode":"                return AcknowledgeMode.valueOf((String) ackMode);\n            } else if (ackMode instanceof AcknowledgeMode) {\n                return (AcknowledgeMode) ackMode;\n            } else {\n                throw new IllegalArgumentException(\"ackMode in definition [ \" + channelDefinition + \" ] must resolve to a String or AcknowledgeMode\");\n            }\n        } else {\n            return null;\n        }\n    }\n\n    protected TaskExecutor resolveExecutor(RabbitInboundChannelModel channelDefinition) {\n        String executorBeanName = resolve(channelDefinition.getExecutor());\n        if (StringUtils.hasText(executorBeanName)) {\n            Assert.state(this.beanFactory != null, \"BeanFactory must be set to resolve TaskExecutor by bean name\");\n            try {\n                return this.beanFactory.getBean(executorBeanName, TaskExecutor.class);\n            } catch (NoSuchBeanDefinitionException ex) {\n                throw new IllegalArgumentException(\"Could not register rabbit listener endpoint on [\" +\n                    channelDefinition + \"], no \" + TaskExecutor.class.getSimpleName() + \" with id '\" +\n                    executorBeanName + \"' was found in the application context\", ex);\n            }\n        } else {\n            return null;\n        }\n    }\n\n    protected Object resolveExpression(String value) {\n        String resolvedValue = resolve(value);\n\n        return this.resolver.evaluate(resolvedValue, this.expressionContext);\n    }\n\n    protected MessageListener createMessageListener(EventRegistry eventRegistry, InboundChannelModel inboundChannelModel) {\n        return new RabbitChannelMessageListenerAdapter(eventRegistry, inboundChannelModel);\n    }\n","sourceCodeStart":242,"sourceCodeEnd":278,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-event-registry-spring/src/main/java/org/flowable/eventregistry/spring/rabbit/RabbitChannelDefinitionProcessor.java#L242-L278","documentation":"When the channel definition names an executor bean, resolveExecutor fetches it from the BeanFactory as a TaskExecutor. If no bean with that id exists, endpoint registration fails with this IllegalArgumentException (wrapping NoSuchBeanDefinitionException).","triggerScenarios":"channelDefinition.getExecutor() resolves to a bean name that is not registered as a TaskExecutor in the application context, during createRabbitListenerEndpoint.","commonSituations":"Typo in executor bean name; executor bean defined under a different id or not at all; bean excluded by profile/condition; copying channel definitions between services with different bean names.","solutions":["Define a TaskExecutor bean with the referenced id, e.g. @Bean(\"listenerExecutor\") ThreadPoolTaskExecutor ...","Correct the executor bean name in the channel definition","Remove the executor attribute to use the container's default executor","Confirm the bean is actually created (profiles, conditional annotations)"],"exampleFix":"// before\n\"executor\": \"taskExecutor\"  // no such bean exists\n// after\n@Bean(\"taskExecutor\")\npublic TaskExecutor taskExecutor() {\n    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();\n    executor.setCorePoolSize(4);\n    return executor;\n}","handlingStrategy":"validation","validationCode":"String executorName = channelDefinition.getExecutor();\nif (executorName != null && !executorName.isBlank() && !applicationContext.containsBean(executorName)) {\n    throw new IllegalArgumentException(\"Referenced TaskExecutor bean not found: \" + executorName);\n}","typeGuard":null,"tryCatchPattern":"try {\n    processor.process(definition);\n} catch (IllegalArgumentException ex) {\n    if (ex.getMessage().contains(\"TaskExecutor\")) {\n        log.error(\"Missing TaskExecutor bean: {}\", ex.getMessage());\n    }\n    throw ex;\n}","preventionTips":["Centralize executor bean names as constants shared with @Bean definitions","Declare a shared TaskExecutor bean in common configuration","Run a startup validation pass resolving all bean references in channel definitions"],"tags":["rabbitmq","spring","beans","configuration"],"backgroundTag":"resource-not-found","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}