1

Message インターフェイスを実装して、サーバー側の HeaderValueRouter で使用するヘッダーをいくつか含めました。

これは 1 つの VM 内で機能します (2 つのエンドポイント間のフィルターを使用してテストされています)。

しかし、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"/>
4

1 に答える 1

1

使用しているバージョンは、(カスタム) ヘッダーのシリアル化をサポートしていません。解決策は、必要なすべての情報を含むリクエストを作成し、それをペイロードとして渡すことです。バージョン 2.0.x の新しい REST ベースの http サポートは、ヘッダー マッピングをサポートし、メッセージ (ヘッダーを含む) を変換するための拡張ポイントも公開します。

補足として、カスタム メッセージを実装する必要があることは非常にまれであるため、その代わりに MessageBuilder を使用してメッセージを作成します。

MessageBuilder.withPayload("foo").setHeader("taskId", "someTaskId").build();

一般に、すべてのヘッダーをすべてのプロトコルで転送できるわけではないため、分散システムを使用する場合は、通常、送信する必要があるすべての情報をペイロードにパックする方が柔軟です。

于 2010-07-16T19:51:11.787 に答える