Quarkus集成Camel调用外部端点报错:需配置servlet路径映射规则
问题根因
启动报错是因为你引入了camel-quarkus-servlet依赖,但没有按照Quarkus Camel的规则配置Servlet的路径映射,同时REST路由指定的组件和引入的依赖不匹配。
解决方案
1. 修正application.properties配置
删除原有servlet相关配置,替换为Quarkus Camel规定的配置项:
quarkus.http.port=8056 # 配置Camel Servlet的路径映射 quarkus.camel.servlet.url-patterns=/services/*
如果需要自定义Servlet名称,也可以用指定名称的配置方式:
quarkus.camel.servlet.CamelServlet.url-patterns=/services/*
2. 修正REST路由的组件配置
你当前路由配置的REST组件是restlet,但pom中没有引入对应依赖,直接将组件改为你已经引入的servlet即可,同时不需要手动指定host和port,会自动读取quarkus.http.port的配置:
package com.example.control; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.model.rest.RestBindingMode; import javax.enterprise.context.ApplicationScoped; import javax.ws.rs.core.Response; @ApplicationScoped public class CompanyRouter extends RouteBuilder { @Override public void configure() { restConfiguration().component("servlet") .bindingMode(RestBindingMode.auto); rest("/api/people") .get() .outType(Response.class) .to("bean:getCompaniesBean"); } }
可选:外部HTTP接口调用配置
你后续需要调用携带token、别名等自定义请求头的外部端点,可以先在pom中添加HTTP组件依赖:
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-http</artifactId> <version>2.3.0</version> </dependency>
调用外部接口时可以通过设置Header传递自定义参数,示例如下:
from("direct:callExternalApi") // 设置自定义请求头 .setHeader("Authorization", constant("Bearer 实际token值")) .setHeader("自定义别名头", constant("实际别名值")) .to("http://outside.endpoint.com") // 自动将响应JSON转换为Java对象 .unmarshal().json(JsonLibrary.Jackson, 你的响应对象类.class) .log("外部接口返回结果:${body}");
内容的提问来源于stack exchange,提问作者Van-Romel Alves Sena
相关产品推荐
相关产品推荐

