MQ转HTTP Reply时返回‘Need return context info’错误的技术求助
问题分析与解决方案
问题描述
业务流程:仅向外部MQ发送BLOB消息,对方将BLOB消息回复至本地队列;本地队列获取消息后格式化为JSON,通过HTTP Reply返回,需从回复的BLOB前8位提取httpId返回。当前流程为MQ node → Compute node → HTTP Reply → Log node,日志显示HTTP Reply返回错误:'Need return context info'。
当前Compute节点代码:
BROKER SCHEMA response Path shared; CREATE COMPUTE MODULE PolicyUpdateResponse CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN DECLARE httpId BLOB SUBSTRING(CAST(InputRoot.BLOB.BLOB AS CHARACTER CCSID 1208) FROM 1 FOR 8); SET OutputLocalEnvironment.Destination.HTTP.ReplyIdentifier = CAST(httpId AS BLOB CCSID 1208); SET OutputRoot.Properties.MessageFormat = ''; SET OutputRoot.JSON = InputBody; SET OutputRoot.JSON.Data.Status = 'Success'; SET OutputRoot.JSON.Data.Message = CAST(InputRoot.BLOB.BLOB AS CHARACTER CCSID 1208); RETURN TRUE; END; END MODULE;
错误原因
'Need return context info'错误核心在于HTTP Reply节点无法匹配到关联的原始HTTP请求上下文,具体问题点:
- httpId提取逻辑错误:先将BLOB转字符再截取、转回BLOB的操作会破坏原始二进制数据完整性,导致提取的标识与原始HTTP请求的ReplyIdentifier不匹配
- ReplyIdentifier设置不符合要求:错误的转换导致最终设置的标识无法被HTTP Reply节点识别为有效请求上下文
解决方案
1. 修正httpId提取逻辑
直接截取BLOB的前8位二进制数据,跳过不必要的字符转换,保证数据完整性:
DECLARE httpId BLOB SUBSTRING(InputRoot.BLOB.BLOB FROM 1 FOR 8);
2. 修正后的完整Compute代码
BROKER SCHEMA response Path shared; CREATE COMPUTE MODULE PolicyUpdateResponse CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN -- 直接提取BLOB前8位作为httpId,保留原始二进制数据 DECLARE httpId BLOB SUBSTRING(InputRoot.BLOB.BLOB FROM 1 FOR 8); -- 正确设置ReplyIdentifier,匹配原始HTTP请求的标识 SET OutputLocalEnvironment.Destination.HTTP.ReplyIdentifier = httpId; SET OutputRoot.Properties.MessageFormat = ''; SET OutputRoot.JSON = InputBody; SET OutputRoot.JSON.Data.Status = 'Success'; -- 若需展示BLOB内容,确保字符转换编码正确 SET OutputRoot.JSON.Data.Message = CAST(InputRoot.BLOB.BLOB AS CHARACTER CCSID 1208); RETURN TRUE; END; END MODULE;
3. 额外检查项
- 验证MQ节点接收的消息前8位确实是原始HTTP请求的ReplyIdentifier二进制值(可通过MQ Explorer查看消息内容确认)
- 检查HTTP Reply节点配置,确保启用“从LocalEnvironment获取ReplyIdentifier”的选项,避免节点使用默认上下文查找逻辑
- 确认流程中无其他节点修改或清除LocalEnvironment中的HTTP相关上下文
内容的提问来源于stack exchange,提问作者Euphoria
相关产品推荐
相关产品推荐

