基于 HttpRequestSrv 的 HTTP Listener 与 Request 实战

一、背景

在 LightESB 中,HttpRequestSrv 使用 Camel Undertow 组件同时承担两类职责:

  • 对外监听 HTTP 请求(Listener)
  • 作为客户端转发请求到下游 HTTP 接口(Request)

该模式适用于"接入层快速编排":统一接收入口请求、记录链路日志、转发到后端服务并返回响应。

二、服务配置总览

HttpRequestSrv/v1.0.0/common.config.properties 中的关键配置:

  • server.port=18083:服务监听端口
  • HTTP.Listener=true:启用 HTTP 监听
  • system.components=undertowhttp:启用 undertow 相关组件能力

HttpRequestSrv/v1.0.0/service.config.properties 中定义了服务元信息:

  • service.name=HttpRequestSrv
  • service.version=1.0.0

三、HTTP Listener:接收外部请求

在 http-request-route.xml 中,入口路由如下:

xml 复制代码
<from uri="undertow:http://0.0.0.0:{{server.port}}/api/httprequest/test?httpMethodRestrict=POST" />

说明:

  • undertow:http://0.0.0.0:{{server.port}}/...:监听所有网卡地址,端口来自配置 server.port
  • httpMethodRestrict=POST:仅允许 POST,非 POST 会被拒绝
  • 对外实际入口为:http://localhost:18083/api/httprequest/test

路由中通过 servicelog 打印入口与完成日志,便于定位请求链路。

四、HTTP Request:转发到下游接口

同一条路由内,使用 HTTP 生产者向下游转发:

xml 复制代码
<to uri="http://0.0.0.0:18083/api/test?httpMethod=POST&amp;contentType=application/json&amp;bridgeEndpoint=true&amp;connectTimeout=5000&amp;socketTimeout=30000"/>

关键参数:

  • httpMethod=POST:转发请求方法
  • contentType=application/json:声明内容类型
  • bridgeEndpoint=true:桥接模式,避免 Camel 修改目标端点行为
  • connectTimeout=5000:连接超时 5 秒
  • socketTimeout=30000:读超时 30 秒

该下游地址由本服务内另一条测试路由承接:

xml 复制代码
<from uri="undertow:http://0.0.0.0:{{server.port}}/api/test?httpMethodRestrict=POST"/>
<setBody>
    <simple>{"message": "HTTP Response Test"}</simple>
</setBody>

因此,入口请求会被转发到本服务的 /api/test,最终得到 JSON 响应。

五、端到端请求示例

1) 调用入口 Listener

bash 复制代码
curl -X POST "http://localhost:18083/api/httprequest/test" ^
  -H "Content-Type: application/json" ^
  -d "{\"orderId\":\"A1001\",\"amount\":99.8}"

预期:

  • 请求被 http-request-route 接收
  • 路由转发到 /api/test
  • 返回:{"message": "HTTP Response Test"}

2) 直接调用测试下游接口

bash 复制代码
curl -X POST "http://localhost:18083/api/test" ^
  -H "Content-Type: application/json" ^
  -d "{}"

预期直接返回固定响应,用于验证下游可用性。

六、常见问题与排查

  1. 404 或连接失败

    • 检查服务是否启动
    • 检查 server.port 是否为 18083
    • 检查路由文件是否已被加载
  2. 405 Method Not Allowed

    • 路由限制了 POST,确认请求方法是否正确
  3. 转发超时

    • 检查 connectTimeout、socketTimeout 参数
    • 检查下游 /api/test 是否可达
  4. 日志中看不到请求体

    • 已配置 servicelog 的 showBody=true
    • 若请求体过长,调整 maxBodyLength

七、总结

HttpRequestSrv 展示了 Camel Undertow 的典型双向能力:

同一服务中既能做 HTTP Listener(接入),也能做 HTTP Request(转发)。

这套路由适合作为统一 API 接入样板,后续可以进一步扩展:

  • 增加鉴权与签名校验
  • 增加 JSON 字段提取与动态路由
  • 增加异常处理与标准错误响应封装
相关推荐
Wx-bishekaifayuan7 分钟前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
Wx-bishekaifayuan1 小时前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
WeiXin_DZbishe1 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
WeiXin_DZbishe1 小时前
基于Springboot+AI的kuall音乐广场的设计与实现-计算机毕设 附源码【课程设计】12715
vue.js·人工智能·spring boot·后端·python·php·课程设计
A接拉起0072 小时前
2026 年 JavaScript 开发者需要了解的知识
前端·javascript·后端
Bazingga2 小时前
RAG评测体系保姆级教程:生产级实践指南
后端
tachibana23 小时前
使用for range 的时候,它的地址会发生变化吗?
开发语言·后端·golang·go·语法
蜗牛互联网3 小时前
GPT-6 与 Intelligent UI:从回答到可审计操作的产品迁移
java·人工智能·后端
王中阳Go4 小时前
Go 后端转 AI:非科班怎么补?一张 3 列路线表(可保存)
开发语言·人工智能·后端·python·golang·大语言模型
IT_陈寒4 小时前
Vite热更新失效?你可能也踩了这个坑
前端·人工智能·后端