使用Spring Data Mongo和与Azure CosmosDBMongoDB进行Spring集成的连接问题

问题描述

我有以下设置:

  • Spring与Spring Data Mongo存储库的集成
  • 在kubernetes(Azure Kubernetes服务)上作为Pod运行的应用程序之上
  • 上面的应用程序连接到Azure CosmosDB(MongoDB)
  • 上面的应用程序连接到Azure SQL Server

应用程序应从MongoDB中获取信息并开始处理。在本地和docker容器中运行时,一切正常。将其部署到AKS时会发生问题,因为它在引导时无法建立与Mongo和Azure SQL的连接。再过三秒钟左右,连接将成功打开,您可以在此处看到:https://gist.github.com/nadworny/c69659e65a7d6e8d96573db13d1f1095

为了进行比较,这里是从本地主机引导日志:https://gist.github.com/nadworny/c04d6baa571e5b7ddcbd8856cf22a390

我也无法解释的是之后发生的事情。我有一个Mongo入站适配器,如下所示:

return IntegrationFlows.from(MongoDb.reactiveInboundChannelAdapter(mongoDbFactory,new Query().addCriteria(Criteria.where("status").is(ProcessingStatus.PROCESSED))
                .with(Sort.by(Sort.Direction.DESC,"modifiedDate")).limit(1))
                .collectionName("processingMetadata")
                .entityClass(ProcessingMetadata.class)
                .expectSingleResult(true),e -> e.poller(Pollers.fixedDelay(Duration.ofSeconds(pollingIntervalSeconds))))
        .<Mono<ProcessingMetadata>>handle((p,h) -> {
            // do something
        })

它应该每3秒钟对Mongo进行一次轮询,但实际上从不进行轮询(同样,它在本地也没有问题)。

此后,连接正常,因为我有另一个由文件上传触发的过程,并且它正常工作(数据已写入MongoDB)。

说实话,我有点困惑哪个组件在这里造成麻烦,所以希望您能帮助我缩小范围。

UPDATE1

我做了一些进一步的调试。实际上,这不是mongo的问题,而是它后面的下一个处理程序是Jpa Gateway:

.handle(Jpa.retrievingGateway(this.sourceEntityManagerFactory)
        .entityClass(DocumentHeader.class)
        .jpaQuery("from DocumentHeader d where d.modifiedDate > :modified")
        .parameterExpression("modified","payload")
        .maxResults(maxResults),e -> e.id("retrieveDocumentHeader"))
.<List>handle((p,h) -> {
    if (p.isEmpty())
        this.advices.waitUntilCompletedAdvice().setWait(false);
    return p;
})
.channel(Channels.DOCUMENT_HEADER.name())

由于某种原因,在AKS上执行时,将不会调用Jpa处理程序,并且Spring Integration将直接跳转到下一步:

2020-09-25 08:35:07.771 DEBUG 1 --- [ask-scheduler-3] o.s.d.m.core.ReactiveMongoTemplate       : find using query: { "status" : "PROCESSED"} fields: Document{{}} for class: class com.zurich.ccmc.data.orchestrator.domain.targetdb.ProcessingMetadata in collection: processingMetadata
2020-09-25 08:35:07.771 DEBUG 1 --- [ask-scheduler-3] o.s.i.e.SourcePollingChannelAdapter      : Poll resulted in Message: GenericMessage [payload=MonoNext,headers={mongo_collectionName=processingMetadata,id=4a26e221-deb9-f1af-1c35-7ba0d47042b1,timestamp=1601022907771}]
2020-09-25 08:35:07.778 DEBUG 1 --- [ask-scheduler-3] o.s.i.splitter.DefaultMessageSplitter    : handler 'bean 'setProcessingStatusToOpen.splitter#0' for component 'setProcessingStatusToOpen.org.springframework.integration.config.ConsumerEndpointFactoryBean#0'; defined in: 'class path resource [xxx/processing/ProcessingMetadataFlow.class]'; from source: 'bean method setProcessingStatusToOpen'' produced no reply for request Message: GenericMessage [payload=[],id=0a446b4c-12fc-d72d-d4ad-8453eb51227c,timestamp=1601022907778}]

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)