У меня есть служба, которая в основном прокси-сервер другого сервера, добавляя бизнес-логики в его ответы.Таким образом, он просто получает запросы, отправляет аналогичный запрос на другой сервер (должен быть отправлен с определенным файлом cookie пользователя, который приходит с запросом), применяет некоторые изменения к ответу и отправляет его обратно пользователю.
Я использую vertxс помощью rx-java, и в настоящее время у меня есть две вертикали.
Одна из них принимает запросы на отдых, и в качестве части обработки этот запрос вызывает метод для другой вертикали через evenBus
:
router.route().handler(routingContext -> {
someService.handleRequest()
.subscribe(res -> ...send response...);
}
И где-то в handleRequest
есть звонок на другую вертикалку:
eventBus.rxSend(address, message, deliveryOptions);
Другая вертикалка прослушивает этот адрес и отправляет запрос на другой сервер:
eventBus.consumer(address)
.toObservable()
.subscribe(message -> {
response = anotherService.handleMessage(message);
message.reply(response.body());
});
И где-то вhandleMessage
он вызывает vertx httpclient
, отправляя запрос другому серверу:
response = client.get(...);
Этот запрос должен содержать значение cookie из начального запроса, полученного в первой вертикали с контекстом маршрутизации.
Что такоеправильный способ передать значение cookie из routingContext
в vertx httpclient
в другой строке?(Я не хочу менять интерфейсы, добавляя новый параметр метода везде, он должен обрабатываться неявно)
Насколько я понимаю, лучший способ передачи некоторого дополнительного значения между вертикалами - это использование headers
in DeliveryOptions
.Но как правильно и безопасно хранить его между вызовами сервисов (например, передавать его в handleRequest
/ handleMessage
без подписи метода модификации) (возможно, хранить его в контексте вертикали?)