错误:端点上没有可用的消费者:direct://myRoute。兑换[]

问题描述 投票:0回答:1

我开始学习camel,我正在尝试用java spring boot 编写一个简单的代码。 这是我的代码:

package camel;

import org.apache.camel.CamelContext;
import org.apache.camel.Configuration;
import org.apache.camel.Consume;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;

@Configuration
public class CamelConfig extends RouteBuilder {

     @Autowired
        private CamelContext camelContext;

        @Override
        public void configure() throws Exception {
            from("direct:myRoute")
//              from("timer:myTimer?period=5000")
                .setBody().constant("Hello, world!")
                .to("log:output");
            
        }
                


        @Bean
        public ProducerTemplate producerTemplate() {
            return camelContext.createProducerTemplate();
        }


    
}

控制器:

     @Autowired
        private ProducerTemplate producerTemplate;

        @GetMapping("/hello")
        public String sayHello() {
            producerTemplate.start();
            producerTemplate.sendBody("direct:myRoute", "Hello from REST API!");
            return "Message sent to Camel route";
        }
    

pom.xml

<dependency>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>camel-servlet-starter</artifactId>
        <version>3.21.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>camel-jackson-starter</artifactId>
        <version>3.21.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>camel-swagger-java-starter</artifactId>
        <version>3.21.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>camel-spring-boot-starter</artifactId>
        <version>3.21.0</version>
    </dependency>    

当我尝试发送 get 请求时,出现状态 500 失败并出现以下错误:端点:direct://myRoute 上没有可用的消费者。交换[] 有人知道为什么吗?

java spring-boot apache-camel
1个回答
0
投票

问题可能是您混合了 Camel 和 Spring 注释。 尝试使用 spring

@Configuration
中的
import org.springframework.context.annotation.Configuration
而不是
import org.apache.camel.Configuration

一般来说,我建议将 Spring 配置与 Camel 路由配置分开。如果你使用的是 springboot 和

camel-spring-boot-starter
那么你可以跳过

@Bean
        public ProducerTemplate producerTemplate() {
            return camelContext.createProducerTemplate();
        }

Spring 会为你做这件事。 只要让你的课程像这样:

@Component  // from org.springframework.stereotype.Component;
public class CamelConfig extends RouteBuilder {

           @Override
        public void configure() throws Exception {
            from("direct:myRoute")
                .setBody().constant("Hello, world!")
                .to("log:output");
            }
      
}
© www.soinside.com 2019 - 2024. All rights reserved.