基于 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. 转发超时

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

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

七、总结

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

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

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

  • 增加鉴权与签名校验
  • 增加 JSON 字段提取与动态路由
  • 增加异常处理与标准错误响应封装
相关推荐
candyTong5 小时前
Claude Code 的 Edit 工具是怎么工作的
javascript·后端·架构
GetcharZp6 小时前
GitHub 2.4 万 Star!D2 正在重新定义程序员画图方式
后端
zhangxingchao8 小时前
多 Agent 架构到底怎么选?从 Claude Agent Teams、Cognition/Devin 到工程落地原则
前端·人工智能·后端
IT_陈寒8 小时前
SpringBoot那个自动配置的坑,害我排查到凌晨三点
前端·人工智能·后端
ServBay8 小时前
OpenCode 和它的7款必备插件
后端·github·ai编程
ping某8 小时前
逐字节拆解 tcpdump
后端
阿凡9807308 小时前
花 100 dollar,用 Claude 打通 EasyEDA&Fusion 双向同步
后端·程序员
irving同学462388 小时前
从零搭建生产级 RAG:Embedding、Chunking、Hybrid Search 与 Reranker
前端·后端
她的男孩8 小时前
从零搭一个企业后台,为什么我把能力拆成 Starter 和 Plugin
java·后端·架构
胡志辉8 小时前
本地 AI 编码助手从 0 配起来:先选模型,再接 Ollama、VS Code、Claude Code 和 Codex
前端·后端