Spring mvc 5.2.0 + RabbtMQ + Camel - необходимо указать CamelContext Исключение

Я пытаюсь использовать 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?

person Reshef    schedule 30.10.2020    source источник


Ответы (1)


устаревший пакет:

from("spring-amqp"...)

удалив его и используя вместо этого следующее:

<groupId>com.bluelock</groupId>

решил вопрос.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-rabbitmq</artifactId>
    <version>${camel.version}</version>
</dependency>
from("rabbitmq:...")

в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:186) \ n \ tat org.springframework.aop.framework.JdkDynamicAopProxy.invoke (tdkDynamicAopProxy.invoke (jdkDynamic.invoke) .rabbit.listener. $ Proxy342.invokeListener (Неизвестный источник) \ n \ tat org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener (AbstractMessageListenerContainer.java:1316) \ n \ tat orgrame.spring.listener .AbstractMessageListenerContainer.executeListener (AbstractMessageListenerContainer.java:1295) \ n \ tat org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute (SimpleMessageListenerContainer.doReceiveAndExecute (SimpleMessageListenerContainer.doReceiveAndExecute (SimpleMessageListenerContainer. .receiveAndExecute (SimpleMessageListenerContainer.java:730) \ n \ tat org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access $ 500 (SimpleMessageListenerContainer.java:74) \ n \ tat orgrameworpring k. spring.camel.component.SpringAMQPConsumer $ SpringAMQPExecutorTask.run (SpringAMQPConsumer.java:316) \ n \ tat java.lang.Thread.run (Thread.java:748) \ n Причина: java.lang.IllegalArgumentException: CamelContext on: Сообщение [] \ n \ tat org.apache.camel.util.ObjectHelper.notNull (ObjectHelper.java:340) \ n \ tat org.apache.camel.impl.DefaultMessage.createHeaders (DefaultMessage.java:255) \ n \ tat org.apache.camel.impl.DefaultMessage.getHeaders (DefaultMessage.java:216) \ n \ tat amqp.spring.camel.component.SpringAMQPHeader.setBasicPropertiesToHeaders (SpringAMQPHeader.java:61 amq.java:61 amq.java:61) \ npHeader.java:61 .camel.component.SpringAMQPMessage.fromAMQPMessage (SpringAMQPMessage.java:53) \ n \ tat amqp.spring.camel.component.SpringAMQPConsumer $ RabbitMQMessageListener.onMes sage (SpringAMQPConsumer.java:197) \ n \ tat org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener (AbstractMessageListenerContainer.java:1406) \ n \ t ... еще 24, уровень: WARN, класс исключения. springframework. ListenerExecutionFailedException

person Reshef    schedule 01.11.2020