私の要件は、TCPからのデータをJavaオブジェクトに変換してActiveMQで送信した後にTCPからデータを取得することです。いくつかの処理を行った後に、TCP上の同じチャネル上で応答/応答コードを送信する必要があることを通知します。 この要件を満たすには、双方向通信が必要なため、tcp-outbound-gatewayを使用しています。ActiveMQでtcp-outbound-gatewayを使用して返信チャネルでデータを送信することができません
問題ActiveMQで確認応答を送信できません。私がActiveMQの部分をコメントアウトしてreplyChannelにダミーの文字列を書くと、それは見えますが、アクティブなMQキューにオブジェクトを送信すると、メッセージが返ってきます"返信なしで返信しました"。
新しいキューを使用して応答を取得し、応答をtcp-outbound-gateの応答チャネルに入れようとしていますが、エラーメッセージはです。output-channelまたはreplyChannelヘッダーはありません。
私はMessageHeadersの詳細を受信メッセージで取得し、キュー経由でcopyHeaderを使用して送信しました。私は、ヘッダーを設定し、Messageオブジェクトのpaylodを見ることができます。返信チャンネルにInterceptosを適用して同じことを確認しましたが、同じエラーが発生しました。output-channelまたはreplyChannelヘッダーはありません。
コードは次のとおりです。
<int:gateway id="gw" default-reply-channel="replyChannel" default-reply-timeout="10000" service-interface= "com.telnet.core.integration.connection.ParseTcpConfiguration$SimpleGateway"
default-request-channel="${server.inboundChannel}"/>
<int:channel id="telnetLandingChannel" />
<ip:tcp-connection-factory id="serverFactory" type="server" host="${server.host}" port="${server.port}" single-use="false"
serializer="${server.serializer}" deserializer="${server.serializer}" task-executor="serverFactoryTaskExecutor"/>
<ip:tcp-inbound-gateway id="serverInboundAdpater" request-channel="telnetLandingChannel" reply-channel="replyChannel"
connection-factory="serverFactory" error-channel="errorChannel" reply-timeout="1000000" auto-startup="false"/>
<int:channel id="replyChannel"></int:channel>
<beans:bean id="acknowledgementHandler" class= "com.telnet.core.integration.AcknowledgementHandler">
</beans:bean>
<int:channel id="incidentDispatchMessageChannel" datatype="${incident.interaction.dispatch.response.datatype}"></int:channel>
<int-jms:message-driven-channel-adapter id="incidentDispatchMessageChannelAdapter" error-channel="errorChannel"
connection-factory="mqConnectionFactory"
destination-name="${incident.processing.tcp.dispatch.response.queues}"
channel="incidentDispatchMessageChannel"/>
<int:transformer id="incidentMessageActivator"
input-channel="incidentDispatchMessageChannel"
output-channel="replyChannel"
ref="acknowledgementHandler" method="incidentAck">
</int:transformer>
public Message incidentAck(final DefaultIncidentAcknowledgeMessage defaultIncidentAcknowledgeMessage){
MessageHeaders ms = (MessageHeaders)defaultIncidentAcknowledgeMessage.getProperties().get("MessageHeader");
Message<String> message = MessageBuilder.withPayload("1").copyHeaders(ms).build();
return message;
}
どのチャンネルでヘッダーエンリッチャーを使用する必要があります –
メッセージがActiceMQで送信されない場合は、確認メッセージが表示されます。どのようにゲートウェイが返信チャネルまたはチャネルが閉じられたときに応答を得ることができないかのように見えます。 Active MQの場合、ゲートウェイ上で送信する必要のある応答を処理する方法がありますか。現時点ではActive MQのため、同期呼び出しではありません。 –
私の答えでUPDATEを参照してください –