U47 Spring Integration 消息流实验
实验使用 Liberica JDK 21、Boot 4.0.9 BOM 管理的 Spring Integration 7.0.7(spring-boot-starter-integration,spring-messaging/Framework 7.0.10 同链)。纯进程内实验:无外部服务、无持久化资源,AnnotationConfigApplicationContext 关闭即结束。
实验代码bash
python3 labs/spring-integration-u47/run.pyrunner 离线使用 Maven 本地缓存并核对依赖版本(spring-integration-core 7.0.7、spring-messaging/context 7.0.10);观察行以 U47 前缀逐字回收,失败不覆盖已有成功证据。
场景与观察(6 组):
| 场景 | 观察 |
|---|---|
| DirectChannel 同线程语义 | 处理器异常包装为 MessageDeliveryException 抛回发送方,同线程,不进错误通道 |
@Transformer 变换 | CSV 字符串经通道间变换为三元素列表 |
| QueueChannel + 轮询错误通道 | poison 消息轮询失败后按 errorChannel 头进自定义错误队列,ErrorMessage 携带 failedMessage |
| 重试 advice | maxRetries=2 实测首次 + 2 次重试共 3 次 attempts,第 3 次成功 |
| 重试耗尽与恢复 | ErrorMessageSendingRecoverer 把失败(含原始 failedMessage)送入错误队列;主流程修复后重新投递成功 |
| 失败表达式路由 | ExpressionEvaluatingRequestHandlerAdvice 的 failureChannel 收到 ErrorMessage(payload 为 advice 异常),表达式结果在 getEvaluationResult();trapException=true 异常不穿透 |
边界:未运行 JMS/HTTP/Mail 等真实适配器、跨进程/持久化通道、ExecutorChannel 并发轮询、多实例共享队列与生产容量;重试次数语义为本组合 7.0.7 观察。