使用Apache骆驼在Spring Boot中创建消息队列

时间:2019-03-28 10:52:29

标签: spring spring-boot apache-camel

我是这个消息队列的新手,刚刚开始学习一些基本知识。

因此,对于我们的春季启动应用程序,我们采用了类似于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 {

   }
}

任何人都可以为我提供一些满足我的需求或任何想法的教程链接。

1 个答案:

答案 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