Я пытаюсь использовать Camel с rabbitMQ в Spring MVC следующим образом:
camel-context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd">
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
<routeBuilder ref="routeBuilder" />
</camelContext>
</beans>
класс routeBuilder:
@Service(value = "routeBuilder")
public class CamelContextRouteBuilder extends RouteBuilder {
@Value("${flag:true}")
private boolean flag;
@Override
public void configure() throws Exception{
if (flag) {
createRoutes();
}
}
private void createRoutes() {
from(String.format("spring-amqp:...))
.throttle(...).timePeriodMillis(...)
.bean("msgProcessor");
}
}
и класс процессора:
@Component(value = "msgProcessor")
public class MsgProcessor implements Processor {
public MsgProcessor() {}
@Override
public void process(final Exchange exchange) throws Exception {
Message message = exchange.getMessage();
...
}
}
зависимости:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-javaconfig</artifactId>
<version>2.25.0</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test-spring</artifactId>
<version>2.25.0</version>
<exclusions>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring</artifactId>
<version>2.25.0</version>
<exclusions>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-aop</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>jaxb-impl</artifactId>
<groupId>com.sun.xml.bind</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.bluelock</groupId>
<artifactId>camel-spring-amqp</artifactId>
<version>1.7.0</version>
<exclusions>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-rabbit</artifactId>
<groupId>org.springframework.amqp</groupId>
</exclusion>
<exclusion>
<artifactId>jackson-mapper-asl</artifactId>
<groupId>org.codehaus.jackson</groupId>
</exclusion>
</exclusions>
</dependency>
Мне удалось создать проект и запустить его, я вижу, что очередь кроликов имеет потребителей, поэтому маршруты создаются, но когда сообщение обрабатывается (не удалось добраться до слушателя), возникает следующее исключение:
CamelContext должен быть указан в: Message []
{имя файла: CamelLogger.java, белье: 213, stacktrace: org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException: Слушатель сгенерировал исключение
в org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.wrapToListenerExecutionFailedExceptionIfNeeded (AbstractMessageListenerContainer.java:1498)
в org.springframework.amqp.bbit.listener.springframework.amqp.bbit.listener.
в org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.actualInvokeListener (AbstractMessageListenerContainer.java:1329)
в sun.reflect.NativeMethodAccessorImpl.invoke0 (Собственный метод.Imor.pl. NativeMethodAccessorImpl.java:62)
в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
в java.lang.reflect.Method.invoke (Method.java:498)
в org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection (AopUtils.java:344)
в org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint (ReflectiveMethodInvocation.invokeJoinpoint (ReflectiveMethodava)
или springframework.retry.support.RetryTemplate.doExecute (RetryTemplate.java:286)
на org.springframework.retry.support.RetryTemplate.execute (RetryTemplate.java:210)
на org.springframework.retry. interceptor.StatefulRetryOperationsInterceptor.invoke (StatefulRetryOperationsInterceptor.java:173)
Слушатель сгенерировал исключение], отметка времени: 2020-10-30 14: 29: 48,876, exception_message: Слушатель сгенерировал исключение}
- Хорошо, используя следующее соединение:
Where does the CamelContext usage is missing?