Spring Cloud Stream и GCP pub sub, поскольку связующее застревает

Я попытался запустить пример здесь https://github.com/spring-cloud/spring-cloud-gcp/tree/master/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-binder-sample Я ожидал, что он создаст тему в моем проекте по умолчанию. Служба Tomcat запущена, но даже страница index.html не загружается (должно быть сообщение типа «Tomcat запущен на порту (ах): 8080 (http) с контекстным путем ''»), поэтому кажется, что он застрял, и это произошло после того, как я добавил:

@Autowired
private Source source;

Вот журнал

2019-02-14 12:06:54.305  INFO 3560 --- [           main] com.example.demo.DemoApplication         : Starting DemoApplication on 2019-02-14 12:06:54.309  INFO 3560 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to default profiles: default
2019-02-14 12:06:55.362  INFO 3560 --- [           main] faultConfiguringBeanFactoryPostProcessor : No bean named 'errorChannel' has been explicitly defined. Therefore, a default PublishSubscribeChannel will be 
(http)
2019-02-14 12:06:56.246  INFO 3560 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-02-14 12:06:56.247  INFO 3560 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.14]
2019-02-14 12:06:56.257  INFO 3560 --- [           main] 2019-02-14 12:06:56.385  INFO 3560 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-02-14 12:06:56.385  INFO 3560 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2027 ms
2019-02-14 12:06:56.970  INFO 3560 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-02-14 12:06:57.079  INFO 3560 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page: class path resource [static/index.html]
2019-02-14 12:06:57.253  WARN 3560 --- [           main] c.g.a.oauth2.DefaultCredentialsProvider  : Your application has authenticated using end user credentials from Google Cloud SDK. We recommend that most server applications use service accounts instead. If your application continues to use end user credentials from Cloud SDK, you might receive a "quota exceeded" or "API not enabled" error. For more information about service accounts, see https://cloud.google.com/docs/authentication/.
2019-02-14 12:06:57.383  INFO 3560 --- [           main] o.s.c.g.a.c.GcpContextAutoConfiguration  : The default project ID is xxxxxx-xxxxx
2019-02-14 12:06:58.373  INFO 3560 --- [           main] o.s.i.monitor.IntegrationMBeanExporter   : Registering MessageChannel nullChannel
2019-02-14 12:06:58.395  INFO 3560 --- [           main] o.s.i.monitor.IntegrationMBeanExporter   : Registering MessageChannel output
2019-02-14 12:06:58.455  INFO 3560 --- [           main] o.s.i.monitor.IntegrationMBeanExporter   : Registering MessageChannel errorChannel
2019-02-14 12:06:58.492  INFO 3560 --- [           main] o.s.i.monitor.IntegrationMBeanExporter   : Registering MessageHandler errorLogger
2019-02-14 12:06:58.525  INFO 3560 --- [           main] o.s.i.endpoint.EventDrivenConsumer       : Adding {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel
2019-02-14 12:06:58.525  INFO 3560 --- [           main] o.s.i.channel.PublishSubscribeChannel    : Channel 'application.errorChannel' has 1 subscriber(s).
2019-02-14 12:06:58.525  INFO 3560 --- [           main] o.s.i.endpoint.EventDrivenConsumer       : started _org.springframework.integration.errorLogger

Что может происходить??

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
722
2

Ответы 2

Вы определили spring.cloud.stream.bindings.input.destination в своем application.properties? Связыватель создаст анонимную подписку для вашей темы, если она не настроена, но не создаст тему самостоятельно.

Я сделал... spring.cloud.stream.bindings.input.destination=input spring.cloud.stream.bindings.output.destination=input spring.cloud.stream.bindings.input.group=input-sub

CCC 14.02.2019 21:33

На самом деле, я был не прав насчет того, что тема не создавалась автоматически; связующее создает тему, если она не существует. Не могли бы вы проверить, созданы ли в вашем проекте GCP тема "input" и подписка "input.input-sub"?

Elena Felder 14.02.2019 21:48

Вы также можете попробовать запустить образец с дополнительным журналом загрузки spring, чтобы увидеть, соответствует ли PubSubBinderConfiguration: -Dlogging.level.org.springframework.boot.autoconfigure.loggi‌​ng=DEBUG

Elena Felder 14.02.2019 22:02

На самом деле, отступая от природы паба/подписки, вы используете прокси? Запуск errorLogger — это последнее, что происходит перед тем, как код попытается подключиться к pubsub.googleapis.com.

Elena Felder 14.02.2019 22:31

Я внедрил производителя с использованием библиотек gcp (без Spring), и это сработало... Вот что я получаю с дополнительным ведением журнала PubSubBinderConfiguration: - @ConditionalOnMissingBean (типы: org.springframework.cloud.stream.binder.Binder ; SearchStrategy: все) бины не найдены (OnBeanCondition)

CCC 14.02.2019 23:08

Можете ли вы внедрить PubSubAdmin bean-компонент и попытаться вызвать для него createTopic("testTopic") напрямую? Публикация и подписка выполняются через gRPC, но администрирование темы/подписки осуществляется через HTTP, поэтому прокси-сервер может заблокировать их независимо. @Autowired PubSubAdmin pubSubAdmin;

Elena Felder 15.02.2019 13:57

Я проверил, и транспортом по умолчанию для административных операций является gRPC, а не HTTP. Но все же стоит проверить, можете ли вы выполнять операции PubSubAdmin вручную, поскольку код почти наверняка застревает в PubSubChannelProvisioner, либо проверяя, существует ли тема, либо пытаясь ее создать (потому что вы получаете application.errorChannel, но не канал application.output в журналы).

Elena Felder 15.02.2019 14:37

это была проблема с разрешениями. Я понимаю это, используя API Pub Sub. Но почему это не было показано в журнале ошибок? Как можно обработать эти ошибки?

CCC 15.02.2019 18:38

Я протестировал образец связующего в служебной учетной записи без разрешения «pub/sub admin» и получил ожидаемое исключение при подготовке связующего. Caused by: io.grpc.StatusRuntimeException: PERMISSION_DENIED: User not authorized to perform this action.

Elena Felder 15.02.2019 21:53

Это была проблема с разрешениями. Среда GOOGLE_APPLICATION_CREDENTIALS задана неправильно.

Другие вопросы по теме