2015-07-20 3 views
2

Я новичок в интеграции Spring. Ситуация заключается в том, что я должен динамически подключаться к Tcp-серверу (т. Е. DNS будет динамически генерироваться во время выполнения на основе некоторых параметров). Из-за этого я использую Service Activator для ручного создания Tcp Connections и отправки сообщений. Я переопределил CachingClientConnectionFactory, чтобы использовать концепцию общих подключений (с одноразовым = «false»). Я слушал сообщения, используя TcpReceivingChannelAdaptor, переопределяя метод onMessage. Проблема заключается в том, что сервер либо отвечает Успехом, либо неудачей (с сообщениями общего характера) без КорреляцииID. Есть ли способ соотнести запрос с ответом?Весна Интеграция - TCP-ответ Корреляция

Я пробовал использовать TcpOutboundGateway, но при таком подходе я также получаю ту же проблему. Я использовал TcpConnectionSupport для отправки сообщений:

//Sample Code. 
final String correlationId = "" // Dynamic unique number 
TcpOutboundGateway outboundGateway = new TcpOutboundGateway(){ 
    public synchronized boolean onMessage(Message<?> message) { 
      ByteArrayToStringConverter converter = new ByteArrayToStringConverter(); 
      String response = converter.convert((byte[]) message 
        .getPayload()); 
      logger.info(correlationId); 
     return false; 
} 
}; 
DefaultCachingClientConnectionFactory connFactory = new DefaultCachingClientConnectionFactory(); 
TcpConnectionSupport con = connFactory.obtainConnection(); 
GenericMessage<String> msg = new GenericMessage<String>("Sample Message" + correlationId); 
con.registerListener(outboundGateway); 
con.send(msg); 

// DefaultCachingClientConnectionFactory is the subclass of CachingClientConnectionFactory. 

При отправке нескольких сообщений, каждый раз, когда я получаю ту же корреляцию напечатанный в методе «OnMessage». Я прочитал here, что Outbound Gateway будет коррелировать сообщения. Пожалуйста, помогите мне. Может быть, я делаю что-то неправильно.

Благодаря

ответ

1

Если вы не включать данные корреляции в сообщении не может коррелировать ответ на запрос.

Шлюз достигает этого, позволяя одновременно выдавать один выдающийся запрос на розетку; поэтому ответ должен быть указан для запроса. Это не очень полезно при большом объеме с общим подключением; поэтому был введен клиент cf caching. Шлюз хранит карту невыполненных запросов на основе идентификатора соединения.

Шлюз в сочетании с заводом-изготовителем кеширования должен делать то, что вам нужно. Однако переопределение onMessage не является хорошей идеей, потому что здесь корреляция ответа выполняется.

Смежные вопросы