如何为 Camel 组件/端点编写 Camel Quarkus 扩展?

问题描述

我有一个自己的 camel 组件/端点,我在 Spring Boot 应用程序中的许多路由中成功使用了它。 我正在尝试迁移到 camel quarkus 并在我的应用程序中使用相同的路由

在我的 camel-quarkus 应用程序 中,不可能通过简单地添加相关依赖项来使用这个组件/端点quarkus 无法像Spring Boot一样发现这个组件/端点

显而易见的解决方案是编写一个 quarkus 扩展,在引擎盖下使用这个 camel 组件quarkus extensionsjdbcfilesql 等使用相应的 camel-components 实现。

如果我们查看其运行时模块的 pom-xml of sql,我们会发现它使用等效的 camel-sql component

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-sql</artifactId>
</dependency>

我的问题是,即使按项目构建(我正在使用 eclipse),quarkus 仍然没有发现组件/端点,quarkus 显示它已经安装了我的扩展。 我在互联网上搜索了很长时间,但没有找到任何有用的来源。

解决方法

使用这个依赖项。所有 quarkus 依赖项以组 id 开头是 org.apache.camel.quarkus 和 artifactcamel-quarkus-xxx

<dependency>
  <groupId>org.apache.camel.quarkus</groupId>
  <artifactId>camel-quarkus-sql</artifactId>
</dependency>

对于 postgresql

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-jdbc-postgresql</artifactId>
</dependency>
,

显而易见的解决方案是不要编写额外的扩展。 Quarkus-Runtime 发现模块或第三方依赖项中的类当且仅当:

  1. 第三方依赖在宿主项目中被索引: 通过将以下条目添加到 .properties 文件:

quarkus.index-dependency..group-id=
quarkus.index-dependency..artifact-id=

.yaml 文件:

quarkus:  
   index-dependency:
     <name>:
        group-id: <group-id>
        artifact-id: <artifact-id> 

其中 是第三方的。

  1. jandex-maven-plugin 存在于该模块或第三方依赖项的 pom.xml
  2. 一个空的 beans.xml 存在于 该模块/依赖项的src/main/resorces/META-INF

我在这个post中找到了我的问题的答案。