#java #spring-boot #google-cloud-pubsub #google-cloud-run
# #java #пружинный ботинок #google-cloud-pubsub #google-cloud-run
Вопрос:
У меня есть простое приложение Spring boot, размещенное в Google Cloud Run, которое публикует сообщение Google Pub / Sub для темы в том же проекте.
Это занимает много времени, примерно около 5 минут. Ниже приведен код, который я использую для публикации сообщения Google Pub / Sub. Но то же самое работало нормально, без задержек в среде App Engine.
ApiFuture<String> messageIdFuture = com.google.cloud.pubsub.v1.Publisher.publish(pubsubMessage);
ApiFutures.addCallback(messageIdFuture, new ApiFutureCallback<String>() {
@Override
public void onFailure(Throwable throwable) {
if (throwable instanceof ApiException) {
ApiException apiException = ((ApiException) throwable);
// details on the API exception
log.error("APIException Status Code: {}", apiException.getStatusCode().getCode());
log.error("APIException is Retryable: {}", apiException.isRetryable());
}
log.error("Error publishing message: {}", pubSubMsg);
}
@Override
public void onSuccess(String messageId) {
log.info("Success msg after publish: {}", messageId);
}
}, MoreExecutors.directExecutor());
Как я могу преодолеть эту задержку при публикации сообщения Pub / Sub?
Комментарии:
1. Когда вы обрабатываете запрос в Cloud Run, вы хотите опубликовать сообщение в PubSub, верно? И на его публикацию уходит 5 минут, не так ли? Можете ли вы поделиться большей частью своего кода? Я хотел бы посмотреть, будете ли вы ждать ApiFuture или позволите ему работать в фоновом режиме.
2. Это полный код, который я использую для публикации сообщения pubsub. Я использую docker для контейнеризации и развертывания в облачном режиме
3. Как назвать этот код? у вас должна быть какая-то функция. Я хотел бы понять контекст вызова этого фрагмента кода
Ответ №1:
Если я правильно помню, Spring Boot создает файл JAR, содержащий вложенные банки. При облачном запуске эти файлы распаковываются во время запуска, и это может повлиять на время выполнения.
Google App Engine — это управляемая служба; вы не можете контролировать время выполнения, в то время как контейнеры Cloud Run нуждаются в настройке для оптимизации среды.
Исходя из этого, я ожидаю, что вам нужно будет оптимизировать работу вашего приложения в контейнере. Используете ли вы многоступенчатую сборку? Вы также можете попробовать использовать плагин Jib для контейнеризации вашего приложения и посмотреть, улучшит ли это ваши тайминги.
Я не слишком хорошо знаком с Spring Boot, но в этой статье обсуждается, как контейнеризировать ваш код для достижения наилучшей производительности. Эти ссылки содержат некоторую полезную информацию о конфигурации плагина Jib, расширениях jib на GitHub и этом сообщении в блоге.
Комментарии:
1. В настоящее время я использую файл docker для контейнеризации и развертывания в cloud run. Я также попробую плагин JIB. Но вызывает ли это проблему?
2. В документации упоминается, что загрузочный контейнер fat Spring «непригоден для контейнеризации».. GAE — это управляемая служба, поэтому вы не можете контролировать время выполнения, в то время как контейнеры Cloud Run необходимо настроить для оптимизации среды (размер важен). Это может решить не все!! но попробуйте эти ссылки для получения дополнительной информации: плагин Jib , GitHub , сообщение в блоге
3. Спасибо @Andrew. Я проверю эти ссылки.