我开始学习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 上没有可用的消费者。交换[] 有人知道为什么吗?
问题可能是您混合了 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");
}
}