Код: Выделить всё
public CreateRenewRsEvent getOrderCreationResponse(CreateRenewRqEvent createRenewRqEvent) {
try {
log.info("Sending order.create event: {}", objectMapper.writeValueAsString(createRenewRqEvent));
final Message response = natsConnection.request(
natsProperties.getSendTopic(),
objectMapper.writeValueAsBytes(createRenewRqEvent),
natsProperties.getTimeout()
);
log.info("Received order.create response: {}", new String(response.getData(), StandardCharsets.UTF_8));
response.ack();
return objectMapper.readValue(response.getData(), CreateRenewRsEvent.class);
} catch (Exception e) {
log.warn("Error sending order.create message", e);
}
return null;
}
Код: Выделить всё
@PostConstruct
fun setUp() {
natsConnection.createDispatcher { handleMessage(it) }
.subscribe(natsProperties.sendTopic)
}
private fun handleMessage(msg: Message) {
val receivedMessage = String(msg.data, StandardCharsets.UTF_8)
val jsonNode = objectMapper.readTree(receivedMessage)
if (!jsonNode.has("response") || !jsonNode.has("err")) {
logger.info("Received order.create message: $receivedMessage")
val responseEvent = getOrderCreateResponse(receivedMessage)
natsConnection.publish(
natsProperties.sendTopic,
objectMapper.writeValueAsBytes(responseEvent)
)
logger.info("Sending order.create response: $responseEvent")
}
}
Я попробовал использовать диспетчер с методом nextMessage(), и это сработало, но что мне действительно нужно, так это метод request() - это интеграция с внешней системой.
Что я делаю не так?
P.S. Еще несколько фактов:
- Соединение открывается, поэтому и отправитель, и получатель подключаются к локальному серверу.
- Во время отладки. mode отправляю сообщение, вижу, что на сервере только одна тема, это order.create. Но после обработки сообщения появляется еще одно — «_INBOX.rel468mZPCUYu9tUu48JRa.rel468mZPCUYu9tUu48JhC». Это значение поля msg.replyTo(), но отправка моего ответа в него тоже не помогает:(
Подробнее здесь: https://stackoverflow.com/questions/788 ... kotlin-app
Мобильная версия