Я создал этот верблюд маршрутыApache Camel Динамические Потребители
from("direct:pageExtraction")
.bean(PageManager.class, "setProperties(*, ${headers})")
.filter().method(PageManager.class, "exists").to("seda:pagePostProcessing").end()
.to("seda:pageImposition");
from("seda:pagePostProcessing")
.bean(PageManager.class, "extractThumbnail(*, ${headers})")
.bean(PageManager.class, "extractCMYKSeparation(*, ${headers})")
.bean(PageManager.class, "persist(*, ${headers})")
.bean(PageManager.class, "cleanUp(${headers})")
.to("seda:pageImposition");
from("seda:pageImposition")
.bean(PageManager.class, "extractImposition(*, ${headers})")
.to("seda:printQueue");
В конце концов, Седа: PrintQueue не имеет потребителей, отправив сообщение на маршруте, как это, видимо, работает отлично. Теперь я хочу ввести нового потребителя после, маршруты были инициализированы, я подумал, что можно будет создать компонент Spring bean программно и позволить Camel забрать bean-компонент, используя аннотацию @Consume(uri="seda:printQueue")
, но как только я создаю потребитель Camel жалобы
org.apache.camel.RuntimeCamelException: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named '4965d710-b5c7-41cf-97e9-a42bdfcea894' is defined]
Любые мысли?
[UPDATE]
Я проследил ошибку в класс, где этот новый потребитель создан, я инстанцирование PrintQueue
класса, а затем интегрировать его в контекст Spring с использованием AutowireCapableBeanFactory
делает factory.autowireBean(printQueueInstance)
а затем factory.initializeBean(printQueueInstance, id)
, где id
- это 4965d710-b5c7-41cf-97e9-a42bdfcea894
, который появляется в исключении выше, поэтому я думаю, что это должна быть какая-то проблема контекста, может быть, я создаю этот компонент в основном или веб-контексте Spring Spring, и он не может быть доступен в контексте Верблюда, возможно ли это?
Как вы создание '@ Consume'-Инг боб? Он входит в реестр? Есть ли причина создавать его во время выполнения, а не настраивать его заранее? – bdeniker