即使发生错误,我也配置为处理错误和响应错误消息。 所以,我在inbound-adapter中设置了错误通道。
我使用Message收集了失败消息的标题信息。
MessageTransformationException exBody = (MessageTransformationException) message.getPayload();
message = exBody.getFailedMessage();
但问题是ip_connection_id改变如下。
ip_connection_id = 127.0.0.1:51049:dd62fed7-00d2-4a7e-8f99-908b4766b862
ip_connection_id = 127.0.0.1:51051:d09d5273-a0e9-4ab9-ac73-f1963febf997
请告诉我如何使ip_connection_id不可变。 我必须同步响应来电者。感谢。
答案 0 :(得分:0)
必然会有其他事情发生; ip_connection_id 是不可变的,因为它总是反映接收消息的连接的id,它在连接的构造函数中设置并且从不更改。如果您的消息具有不同的连接ID,则它来自不同的连接。
我刚刚在此处修改了示例https://github.com/SpringSource/spring-integration-samples/tree/master/basic/tcp-client-server,以将连接ID添加到错误消息...
<int:transformer id="errorHandler"
input-channel="errorChannel"
expression="payload.failedMessage.payload + ':' + payload.cause.message + ':' + payload.failedMessage.headers.ip_connection_id"/>
一切都按预期工作......
preSend on channel 'toSA' ... ip_connection_id=localhost:48161:ef1b59ce-1495-417f-93d3-e38e935922f3
...
preSend on channel 'errorChannel'...
...
TcpNetConnection - TcpNetConnection - Message sent [Payload=FAIL:Failure Demonstration:localhost:48161:ef1b59ce-1495-417f-93d3-e38e935922f3
我建议您使用DEBUG日志记录运行并通过您的流程跟踪消息。