私は、スプリング統合を使用して既存のサーバに接続するtcpクライアントを実装しようとしています。まだ技術に慣れていないので、私はhttps://github.com/spring-projects/spring-integration-samplesの春の例に従っています。Spring統合によるサーバからクライアントへのリクエストの送信
クライアントがサーバーに接続してから要求を送信し、サーバーから応答を返す単純なケースを実装することができました。しかし、私たちのサーバーが実装されているため、次のような場合を実装する必要があります。クライアントはサーバーに接続し、サーバーからの要求を待ってから応答データで応答する必要があります。
どうすれば実装できますか?ゲートウェイでは、応答データを取得する前に要求を送信する必要があるため、クライアント側でゲートウェイを使用できるようには見えません。次に、入力チャネルとしてtcp-outbound-gatewayのreply-channelを使用してサービスアクティベータを設定することを検討しました。ただし、サービスの実装では応答は受信されません。クライアントからの最初のリクエストを送信すると、チャンネルが開かれたように見えます。
Spring構成:
<int-ip:tcp-connection-factory id="client"
type="client"
host="localhost"
port="12345"
single-use="false"
so-timeout="10000"
deserializer="javaSerializerDeserializer"
serializer="javaSerializerDeserializer" />
<bean id="javaSerializerDeserializer"
class="org.springframework.integration.ip.tcp.serializer.ByteArrayLfSerializer" />
<int-ip:tcp-outbound-gateway id="outGateway"
request-channel="input"
reply-channel="clientBytes2StringChannel"
connection-factory="client"
request-timeout="10000"
reply-timeout="10000" />
<int:object-to-string-transformer id="clientBytes2String"
input-channel="clientBytes2StringChannel" />
<int:service-activator input-channel="clientBytes2StringChannel" ref="thinclientService" />
<bean id="thinclientService" class="tcp.service.ThinClientService" />
ThinClientService:
@Component
public class ThinClientService {
private static final Logger LOGGER = LoggerFactory.getLogger(ThinClientService.class);
public String receive(String recv) {
LOGGER.info("*****************Recv: {}", recv);
return "echo";
}
}
主な方法:
@SpringBootApplication
public class Application {
public static void main(String args[]) throws Exception {
GenericXmlApplicationContext context = new GenericXmlApplicationContext();
context.load("classpath:META-INF/beans.xml");
context.registerShutdownHook();
context.refresh();
System.out.println("Running test");
SpringApplication.run(Application.class, args);
}
}
現在、私は次のことを持っています
データを送信したくない場合でも、このクライアントを強制的にサーバーに接続できますか?
素晴らしいことです!だから、自分の答えでさえ受け入れることができます! –
インターフェイスでは、2日後に自分の回答のみを受け入れることができます。 – mdewit