Ich verwende spring 4
Annotation-basierte Konfiguration, und möchte einen einfachen Telnet/Socket-Client einrichten.Wie wird ein Socket-Client mit Federintegration eingerichtet?
Dies ist, was ich bisher:
@MessageEndpoint
public class MySocket {
@Bean
public TcpConnectionFactoryFactoryBean clientFactory() {
TcpConnectionFactoryFactoryBean fact = new TcpConnectionFactoryFactoryBean();
fact.setType("client");
fact.setHost(host);
fact.setPort(port);
fact.setUsingNio(true);
fact.setSingleUse(true);
fact.setSoTimeout(timeout);
return fact;
}
@Bean
public MessageChannel clientChannel() {
return new DirectChannel();
}
@Bean
@ServiceActivator(inputChannel = "clientChannel")
public TcpOutboundGateway outGateway(TcpNioClientConnectionFactory factory,
@Qualifier("clientChannel") MessageChannel clientChannel) throws Exception {
TcpOutboundGateway gate = new TcpOutboundGateway();
gate.setConnectionFactory(factory);
gate.setReplyChannel(clientChannel);
return gate;
}
}
@Component
public class MyMessageService {
@Autowired
@Qualifier("clientChannel")
private MessageChannel clientChannel;
public void run() {
Message<String> msg = MessageBuilder.withPayload("test").build();
Message<?> rsp = new MessagingTemplate(clientChannel).sendAndReceive(msg);
}
}
Ergebnis: org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers
Was soll ich hier fehlt die Nachricht über die Buchse zu senden und die Antwort erhalten?
Sie meinen wahrscheinlich eine 'AbstractClientConnectionFactory' als scf Parameter? Ich habe den 'TcpOutboundGateway' zu meinem obigen Beitrag hinzugefügt. Aber jetzt kommt der Fehler: 'Parameter 0 der Methode outGateway in MySocket benötigt eine Bean vom Typ 'org.springframework.integration.ip.tcp.connection. AbstractClientConnectionFactory 'konnte nicht gefunden werden. Ist der '@ ServiceActivator' auf dem Gateway korrekt? – membersound
Entschuldigung; Ja, ich meinte Klient. Ja, '@ ServiceActivator' umschließt das Gateway in einer Consumer-Bean. Ich schlage vor, Sie ändern die 'clientFactory' Bean, um eine' TcpNioClientConnectionFactory' direkt zu erstellen, anstatt den FB zu verwenden. –
Wenn ich dies tue, erhalte ich immer noch einen Fehler. Etwas muss noch fehlen. Der Anwendungs-Startfehler msg ist (kurz): 'Die Abhängigkeiten einiger Beans im Anwendungskontext bilden einen Zyklus: MyMessageService> MySocket> outGateway> clientChannel'. – membersound