有一个Spring Boot应用程序,该文件将文件从源路径路由到目标路径。尝试运行多个指向同一源路径的应用程序实例。预期只有一个实例应该处理文件,并且一旦处理,它将从源中删除。同一文件不应由其他实例处理。
由于文件Nio储物柜不起作用,建议根据共享的ConcurrentMetadataStore()-PropertiesPersistingMetadataStore使用FileSystemPersistentAcceptOnceFileListFilter。期望这样,实际上只有一个实例将拾取文件进行处理。所有其他人都将跳过它,然后继续下一个文件。
但是两个实例选择的某些文件会选择/轮询相同的文件并将其处理到目标路径。
有什么建议吗?
<bean id="metadatastore" class = "org.springframework.integration.metadata.PropertiesPersistingMetadataStore">
<property name="basedirectory" value ="${java.io.tmpdir}/metadata"/>
</bean>
<bean id="inboundfilter" class = "org.springframework.integration.file.filters.CompositeFilelistFilter">
<constructor-arg>
<list>
<bean class = "org.springframework.integration.file.filters.FileSystemPersistentAcceptOnceFilelistFilter">
<constructor-arg name= "store" ref="metadatastore"/>
<!-- Filename prefix constructor. No prefix name in my case .so made it empty-->
<constructor-arg value = ""/>
</bean>
<bean class = "org.springframework.integration.file.filters.RegexPatternFilelistFilter">
<constructor-arg value="${regex}"/>
</bean>
</list>
</constructor-arg>
</bean>
答案 0 :(得分:1)
首先不清楚为什么在同一台计算机上会有同一应用程序的多个实例。对于相同的CPU和RAM,相同的应用程序绝对不会提高性能。
另一个问题是gcloud beta functions deploy helloworld2 --runtime nodejs8 --trigger-http
对于分布式计算的影响不大。您绝对需要考虑对共享数据库使用一些商店实现。
此外,您还可以通过以下方式使当前解决方案非常接近您想要的解决方案:
helloworld2
对于上述PropertiesPersistingMetadataStore
的为/**
* Determine whether the metadataStore should be flushed on each update (if {@link Flushable}).
* @param flushOnUpdate true to flush.
* @since 4.1.5
*/
public void setFlushOnUpdate(boolean flushOnUpdate) {
。这样,每次写入存储区后,true
都将闪现到目标FileSystemPersistentAcceptOnceFilelistFilter
文件中。