Im Frühjahr Integration verwende ich ein paar Kanaladapter zum Senden/Empfangen von Nachrichten von einem Server-Socket. Ich erzeuge immer Client-Verbindungen mit den folgenden Adaptern:TcpSendingMessageHandler mit TcpReceivingChannelAdapter Zusammenarbeit
@Bean
public TcpReceivingChannelAdapter tcpIn(AbstractClientConnectionFactory connectionFactory) throws Exception {
TcpReceivingChannelAdapter receiver = new TcpReceivingChannelAdapter();
receiver.setOutputChannel(fromTcp());
receiver.setConnectionFactory(connectionFactory);
return receiver;
}
@Bean
@ServiceActivator(inputChannel = "toTcp")
public TcpSendingMessageHandler tcpOut(AbstractClientConnectionFactory connectionFactory) throws Exception {
TcpSendingMessageHandler sender = new TcpSendingMessageHandler();
sender.setConnectionFactory(connectionFactory);
sender.setClientMode(true);
return sender;
}
Das Problem hier ist der Server in der gleichen Buchse an den Remote-Port (mein geöffneten Socket-Port) zu beantworten. Beispiel: Wenn ich einen Socket an 127.0.0.1:4444 anschließe, antwortet der Server meinem geöffneten Port (dynamisch mit Socket tcp) 6873 statt 4444. Er verwendet denselben Socket.
könnte eine schnelle Antwort sein, ein TcpOutboundGateway
zu verwenden, aber ich habe ein paar Probleme mit diesem Szenario:
- ich ohne Berücksichtigung der Verbindungsereignisse verwalten müssen/ Sendeoperationen lesen. Zum Beispiel muss ich den Socket automatisch verbinden und öffnen, bevor ich irgendeine Nachricht sende.
- Gemäß der Dokumentation:
für hochvolumige Nachrichten, sollten Sie einen kollaborierenden Paar Channel-Adapter verwenden. Sie müssen jedoch eine Kollaboration Logik bereitstellen.
Welche Komponente sollte ich für Anforderungs-/Antwort-Sockets in einem Massenszenario verwenden?