서버 쪽에서 HeaderValueRouter와 함께 사용할 일부 헤더를 포함하도록 Message 인터페이스를 구현했습니다.MessageHeaders가 HttpOutboundGateway에서 분실 됨
하나의 VM에서이 기능은 작동합니다 (두 개의 끝점 사이에 필터를 사용하여 테스트 됨).
그러나 HttpOutboundGatway를 통해 메시지를 보내면 내 필드가 삭제됩니다 (HttpRequest에 포함되지 않음). 따라서 라우팅 정보는 서버 측에서 손실됩니다.
헤더를 조작하지 않아도됩니까?
public class TaskMessage implements Message<String> {
private MessageHeaders headers;
private String payload;
public TaskMessage(String taskId, String boxId, String payload) {
super();
this.taskId = taskId;
this.boxId = boxId;
this.payload = payload;
StringMessage sm = new StringMessage(payload);
Set<String> keySet = sm.getHeaders().keySet();
HashMap<String, Object> map = new HashMap<String, Object>();
for (String key : keySet) {
map.put(key, sm.getHeaders().get(key));
}
map.put("taskId", taskId);
map.put("boxId", boxId);
headers = new MessageHeaders(map);
}
@Override
public MessageHeaders getHeaders() {
return headers;
}
@Override
public String getPayload() {
return payload;
}
}
편집 :
버전 내 구성의 일부는 1.0.3
입니다 :
<si:inbound-channel-adapter ref="jdbcInputAdapter" method="fetchData" channel="msgChannel">
<si:poller max-messages-per-poll="1">
<si:interval-trigger interval="5000" />
</si:poller>
</si:inbound-channel-adapter>
<http:outbound-gateway id="httpChannelAdapter" auto-startup="true" request-timeout="1000" request-channel="msgChannel" reply-channel="replyChannel" default-url="http://localhost:8080/taskserver/gateway"/>
@iwein 질문에 버전 및 구성 (부분)을 추가했습니다. 나는 왜 내 머리글이 내 메시지에서 제거되었는지 알고 싶습니다. 미리 감사드립니다. – stacker
답변 됨 그에 따라 업데이트 됨 – iwein
@iwein 감사합니다. 나는 문자열의지도 o payload를 바꿨습니다. 문자열이 이제 작동합니다. – stacker