基于 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 字段提取与动态路由
  • 增加异常处理与标准错误响应封装
相关推荐
高斯林.神犇2 小时前
四、依赖注入.spring
java·后端·spring
hero.fei2 小时前
在springboot中使用Resilience4j
java·spring boot·后端
MgArcher2 小时前
Python高级特性:生成器完全指南
后端
用户3754268434032 小时前
从零构建 Go IM 系统:WebSocket + AI Agent + gRPC 全栈实践
后端
技术爬爬虾2 小时前
OpenCode详细攻略,开源版Claude Code,免费模型与神级插件
前端·后端
邦爷的AI架构笔记2 小时前
GLM-5.1 接入踩坑记录:用免费开源模型搭个 AI 代码审计小工具
后端·算法
Bernard02152 小时前
我试了下最近很火的 Hermes Agent:真正值得看的,不是会调工具,而是会把经验沉淀成 Skill
前端·后端
之歆2 小时前
API 层架构设计 — 从 RESTful 到 GraphQL 的范式演进
vue.js·后端·restful·graphql
落木萧萧8252 小时前
从架构视角看 MyBatis Plus 的设计缺陷
后端