次の構成を使用して実装された簡単なリクエスト応答テストがあります。
<int:gateway id="myGateway"
service-interface="TestGateway"
default-request-channel="sendingChannel"
default-reply-channel="replyChannel"
default-reply-timeout="2000"
/>
<int:channel id="sendingChannel" />
<int:channel id="replyChannel" />
<int-jms:outbound-gateway id="myJmsGateway"
connection-factory="jmsConnectionFactory"
request-channel="sendingChannel"
request-destination-name="outQueue"
reply-channel="replyChannel"
reply-destination-name="outQueueReply"
receive-timeout="60000"
/>
およびインターフェイス:
public interface TestGateway {
@Gateway
public String requestReply(@Header("myHeaderKey") String headerValue, String data);
}
上記の構成は「機能」しますが、次の予約があります。
構成は冗長に感じます。追加のゲートウェイと 2 つの追加チャネルが必要です。どちらのゲートウェイも応答タイムアウトを実装しています (ただし、
int:gateway
に接続されている場合はタイムアウトは発生しませんint-jms:outbound-gateway
)。ゲートウェイ メソッドのセマンティクスは、要求/応答を実装しているものによって異なります。タイムアウトに
int-jms:outbound-gateway
なると、 は例外をスローし、それが のユーザーに伝播しますTestGateway
。構成を置き換えるように変更するとint-jms:outbound-gateway
、int:gateway
null が返されます。
これを考えると、クライアント コードは null と例外の両方を同じ方法で処理する必要があります。
ゲートウェイを配線するためのより良い方法はありますか? 1 つのオプションは、追加のスレッド プールを犠牲にして、問題 2 を解決するint:channel's
をに変更することです。PollableChannel's