[英]Creating message queue in spring boot using apache camel
我是这个消息队列的新手,并且刚刚开始学习一些基本知识。
因此,对于我们的春季启动应用程序,我们遵循了类似于contoller对话到service以及将service对话到存储库的体系结构,因此在这里我必须创建一个控制器,该控制器将接受类DTO作为json并将这些信息发布到apache骆驼中指定的消息队列中。 。 我正在关注此链接 ! 供我参考,效果很好,但是当我尝试在项目中实现它时,它说下面列出了一个错误。
错误
上下文初始化期间遇到异常-取消刷新尝试: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 {
}
}
任何人都可以为我提供一些满足我的需求或任何想法的教程链接。
正如克劳斯·易卜生在评论中建议的那样,您必须将这些依赖项添加到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文档 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.