[英]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.