У меня есть приложение Spring Integration, которое использует комбинацию входящего / исходящего адаптера для отправки и получения TCP-сообщений. Я пытаюсь сопоставить сообщение, отправленное с ответом, полученным для этого запроса, но у меня возникают некоторые проблемы.
Моя текущая конфигурация выглядит следующим образом ...
@Bean
public AbstractServerConnectionFactory serverConnectionFactory() {
return new TcpNetServerConnectionFactory(15000);
}
@Bean
public TcpReceivingChannelAdapter inboundAdapter() {
TcpReceivingChannelAdapter inboundAdapter = new TcpReceivingChannelAdapter();
inboundAdapter.setConnectionFactory(serverConnectionFactory());
inboundAdapter.setOutputChannel(receiveResponse());
return inboundAdapter;
}
@Bean
@ServiceActivator(inputChannel="sendRequest")
public TcpSendingMessageHandler outboundAdapter() {
TcpSendingMessageHandler outboundAdapter = new TcpSendingMessageHandler();
outboundAdapter.setConnectionFactory(serverConnectionFactory());
return outboundAdapter;
}
@Bean
public MessageChannel receiveResponse() {
return new DirectChannel();
}
@MessagingGateway(defaultRequestChannel="sendRequest", defaultReplyChannel="receiveResponse")
public interface RequestSender {
public String sendRequest(@Payload String payload, @Header(IpHeaders.CONNECTION_ID) String connectionId);
}
Все настраивается, как и ожидалось, при загрузке, когда вызывается метод RequestSender.sendRequest()
, сообщение отправляется, ответ отправляется обратно (у меня есть другое приложение, которое отвечает), но я сталкиваюсь с последующей ошибкой, когда ответ достигает моего inboundAdapter
. Ошибка ...
org.springframework.messaging.MessageDeliveryException: Dispatcher has no subscribers for channel 'application.receiveResponse'.
Исходя из того, что я прочитал о MessagingGateway
, replyChannel
- это канал, для которого шлюз будет прослушивать ответ. Поэтому я думаю, что все, что получает входящий адаптер, в конечном итоге будет возвращено методом RequestSender.sendRequest()
. Однако в моем случае кажется, что MessagingGateway
не может подписаться на канал receiveResponse
.
Есть ли способ реализовать MessagingGateway
таким способом? Если так, что, по-видимому, мешает моей текущей конфигурации работать так, как я надеюсь?