我是这个消息队列的新手,刚刚开始学习一些基本知识。
因此,对于我们的春季启动应用程序,我们采用了类似于contoller对话到service以及将service对话到存储库的体系结构,因此在这里我必须创建一个控制器,该控制器将接受DTO类作为json并将这些信息发布到在中指定的消息队列中阿帕奇骆驼。 我正在关注这个link!供我参考,效果很好,但是当我尝试在项目中实现它时,它说下面列出了一个错误。
错误
上下文初始化期间遇到异常-取消 刷新尝试: org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名称为'trackerQueueController'的bean时出错:不满意 通过字段'camelContext'表示的依赖关系;嵌套异常为 org.springframework.beans.factory.NoSuchBeanDefinitionException:否 可用类型为“ org.apache.camel.CamelContext”的合格bean: 期望至少有1个符合自动装配候选条件的bean。 依赖注释: {@ org.springframework.beans.factory.annotation.Autowired(required = true)}
我已经创建了一个控制器,路由和处理器,如下所示:
控制器
@RestController
@RequestMapping("/deviceinfo")
public class TrackerQueueController {
@Autowired
CamelContext camelContext;
@Autowired
private
ProducerTemplate producerTemplate;
@PostMapping()
public void startCamel(@RequestBody FieldUpdate fieldUpdate) {
producerTemplate.sendBody("activemq:topic:in", fieldUpdate);
}
}
路线
@Component
public class TrackerQueueRoutes extends RouteBuilder {
@Override
public void configure() throws Exception {
from("activemq:topic:in")
.process(new TrackerProcessor() {
@Override
public void process(Exchange exchange) throws
Exception {
log.info("I'm in");
FieldUpdate body =
exchange.getIn().getBody(FieldUpdate.class);
log.info("Hello from camel processed message!
Received payload: {}" , body.getSerialNumber());
exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE,
HttpStatus.ACCEPTED);
}
});
}
}
处理器
public class TrackerProcessor implements Processor {
@Override
public void process(Exchange exchange) throws Exception {
}
}
任何人都可以为我提供一些满足我的需求或任何想法的教程链接。
答案 0 :(得分:1)
正如克劳斯·易卜生在评论中建议的那样,您必须将这些依赖项添加到POM文件中
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
<version>[camel-version]</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
camel-spring-boot-starter
自动为您启动CamelContext
,发现路线等spring-boot-starter-web
通过侦听Web请求来保持应用程序运行。否则它将在启动后立即关闭,因为没有任何执行。由于您的Camel路由类已正确注释(@Component
)和子类(extends RouteBuilder
),因此应该由Camel SpringBoot启动程序自动发现。
有关所有这些主题和更多信息,请参见Camel-SpringBoot docs。