2015-11-24 6 views
0

Я хочу использовать соединение netache camel netty в режиме клиента. А также этот клиент не находится в синхронном режиме. Я предоставил следующую конфигурацию для этого, но appache создал два подключения к серверу для получения сообщения и один для ответа на него. как мы можем использовать netty-коннектор в этом режиме.Apache Camel Netty Socket

from("netty4:tcp://localhost:7000?sync=false&allowDefaultCodec=false&encoder=#stringEncoder&decoder=#stringDecoder&clientMode=true&reconnect=true&reconnectInterval=1000") 
      .process(new Processor() { 
       public void process(Exchange exchange) throws Exception { 
        exchange.getOut().setBody("Hello " + exchange.getIn().getBody()); 
       } 
      }) 
      .to("netty4:tcp://localhost:7000?sync=false&allowDefaultCodec=false&encoder=#stringEncoder&decoder=#stringDecoder&clientMode=true"); 

и Hercules Utitly я вижу два соединения для этого запроса обработки

11:00:51 AM: 127.0.0.1 Client connected 
11:00:51 AM: 127.0.0.1 Client connected 
+0

Ну, вы принимаете соединение на порте 7000 и отправляете на тот же хост на порте 7000..why? –

+0

, поскольку я должен использовать тот же порт для запроса и ответа для транзакции. –

+0

Извините, но это немного путаница. Чего именно вы пытаетесь достичь? По внешнему виду вы получаете на порт 7000, а затем отправляете в порт 7000 снова, что означает, что ваш «из» будет запущен и отправлен на ваш «к», который снова отправляется на ваш «из». Это действительно то, что вы хотите? –

ответ

1

Так это то, что вы хотите, верно? «после получения запроса от сервера. Я хочу нажать это в MQ и ждать другого MQ для обработанного ответа. Поэтому, когда пакет обрабатывается и доступен в MQ, я хочу использовать такое же соединение для передачи ответа на сокет».

Итак, прежде всего, вероятно, согласен с некоторыми требованиями. Если вам нужно отправить ответ, т. Е. Клиент ждет ответа на запрос, который он отправил, то он должен быть синхронным, а не асинхронным.

Таким образом, вы можете просто написать:

from("netty4:tcp://localhost:7000?sync=true&allowDefaultCodec=false&encoder=#stringEncoder&decoder=#stringDecoder&clientMode=true&reconnect=true&reconnectInterval=1000") 
      .process(new Processor() { 
       public void process(Exchange exchange) throws Exception { 
        exchange.getOut().setBody("Hello " + exchange.getIn().getBody()); 
       } 
      }) 
      .to("ACTIVE_MQ"); 

Конечно же в активной части мэка вам необходимо установить ответ и тайм-аут, так что если вы не получите ответ в момент его раз из и вы уведомляете клиента с хорошим сообщением об ошибке.

Что произойдет, так это то, что сообщение получено и отправлено в активную очередь mq с соответствующим ответом на свойства. Если сообщение получено, ответ отправляется обратно по тому же соединению с клиентом.

Я бы посоветовал вам прочитать запрос/ответ JMS в Camel, поскольку это поможет вам настроить активную часть mq. http://camel.apache.org/jms.html

+0

Спасибо за ответ, я испытаю эту вещь утром. –

+0

Вы также можете посмотреть ответ и код Клауса Ибенса. http://stackoverflow.com/questions/33887676/activemq-concurrency-fail-in-apache-camel-route –