问题描述
我有以下设置:
- 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 (将#修改为@)