Как отправить ответ обратно через установленное TCP-соединение в асинхронном режиме с помощью Apache Camel Netty4?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как отправить ответ обратно через установленное TCP-соединение в асинхронном режиме с помощью Apache Camel Netty4?

Сообщение Anonymous »

Я создаю микросервис с маршрутом Apache Camel, используя компонент Netty4 (http://camel.apache.org/netty4.html) в потребительском режиме. Итак, в моем микросервисе этот маршрут, который я создаю, будет получать сообщения через TCP-соединение. Для этого я сделал следующее:

Код: Выделить всё

@Override
public void configure() throws Exception {
this.from("netty4:tcp://localhost:7000?textline=true&encoding=utf8")
.process(new Processor() {
@Override
public void process(final Exchange exchange) throws Exception {
log.info("[Processor] - Incoming Message -> {}", exchange.getIn().getBody(String.class));
}
}).to("bean:messageService");
}
Ну, Сообщения я получаю нормально. Для проверки использую telnet:

Код: Выделить всё

$ telnet localhost 7000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
TheMessage
Проблема в том, что я хочу отправить сообщение обратно на тот же TCP-канал, установленный на этом маршруте. В синхронном режиме я могу легко сделать это, используя объект Exchange. Однако в асинхронном режиме я не знаю, как отправить сообщение производителю.

Служба Spring, которая получает и должна отправлять сообщения, это:

Код: Выделить всё

@Service
public class MessageService {

private static final Logger log = LoggerFactory.getLogger(MessageService.class);

private List messageStore = new LinkedList();

public void sendToTCP(final String message) {
log.info("[Service] - Sending Message over TCP Channel --> {}", message);
}

@Handler
public void receiveFromTCP(final Exchange exchange) {
final String messageFromTcp = exchange.getIn().getBody(String.class);
log.info("[Service] - Message Received from TCP Channel --> {}", messageFromTcp);
this.messageStore.add(messageFromTcp);
}

public List getReceivedMessages() {
return messageStore;
}
}
В резюме мне нужно поместить некоторый код в этот метод, что-то вроде этого:

Код: Выделить всё

public void sendToTCP(final String message) {
log.info("[Service] - Sending Message over TCP Channel --> {}", message);
// Send message to producer here
camelContext.createProducerTemplate.send....
}
Я не могу создать другой маршрут к производителю, поскольку не знаю IP-адрес производителя. Мне действительно нужно использовать уже установленный TCP-канал между производителем и моим приложением. Связь должна осуществляться через TCP, другие инструменты, такие как очереди, не подходят.



Пример проекта GitHub< /h2>

Я загрузил пример проекта на GitHub: https://github.com/rgiaviti/so-camel-netty4-tcp

Нарисуйте

Изображение


Я использую:
  • Spring Boot 1.5. 12;
  • Apache Camel 2.21.0;


Подробнее здесь: https://stackoverflow.com/questions/500 ... -mode-usin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»