У нас есть случай, как показано ниже:
Проблема заключается в том, что координатор отправляет сообщение из контекста метода и получает ответот другого:
private void forwardToVWClient(Message msg) {
vertx.eventBus().send(RESTClient.ADDRESS, msg.body(), deliveryOptions, res -> {
if (res.succeeded()) {
log.info("forwardToVWClient. VW got result : success.");
// do not reply ok until we get an OK from the Listener verticle
} else {
log.error("forwardToVWClient VW got result : failure.");
msg.fail(500, res.cause().getMessage());
}
});
}
тогда у меня есть другой метод использования шины событий, где я получаю ответ:
vertx.eventBus().consumer(ADDRESS_RESPONSE, this::handleResponseMessage);
private void handleResponseMessage(Message msg) {
// how to reply the message received in the context of forwardToVWClient ??
}
Итак, как я могу ответить на сообщение в контексте forwardToVWClient
, когда я получу ответ в handleResponseMessage
?
Пока пара идей:
- Поместить сообщение в контекст vertx?
- Объект сообщения имеет поле:
.replyAddress()
, которое возвращает int, я сохраняю его в статическом ConcurrentHashMap и использую его для ответа на конкретное сообщение.Я опубликую более подробную информацию как ответ.
Есть ли лучший способ?