Spring Integration可以在Mutli服务器环境中使用吗



我们可以使用Spring Integration为文件配置目录轮询吗

在配置了2台服务器的情况下,轮询发生在1台服务器上,相应的处理将分布在两台服务器上。

此外,我们是否可以在运行时切换任一服务器上的轮询?

编辑-尝试配置JBDC MetaStore并分别运行这两个实例,能够轮询和处理,但会间歇性地得到DeadLockLoserDataAccessException

下方的配置

@Bean
public MessageChannel fileInputChannel(){
return new DirectChannel();
}
@Bean(PollerMetadata.DEFAULT_POLLER)
public PollerMetadata defaultPoller(){
PollerMetadata pollermetadata = new PollerMetadata();
pollermetadata.setMaxMessagesPerPoll(-1);
pollermetadata.setTrigger(new PeriodicTrigger(1000));
return pollermetadata;
}
@Bean
@InBoundChannelAdapter(value = "fileInputChannel"){
FileReadingMessageSource source = new FileReadingMessageSource();
source.setDirectory("Mylocalpath");
FileSystemPersistentAcceptOnceFileListFilter acceptOnce = new FileSystemPersistentAcceptOnceFileListFilter();
ChainFileListFilter<File> chainFilter = ChainFileListFilter(".*\.txt"));
chainFilter.addFilter(acceptOnce);
source.setFilter(chainFilter);
source.setUseWatchService(true);
source.setWatchEvents(FileReadingMessageSource.WatchEventType.CREATE,FileReadingMessageSource.WatchEventType.MODIFY);
return source;
}
@Bean
public IntegrationFlow processFileFlow(){
return IntegrationFlows.from("fileInputChannel")
.handle(service).get();
}

轻松实现分布式解决方案实际上是Spring Integration的特性之一。您只需要在集群基础结构中添加一个消息中间件,并将所有节点连接到某个目的地进行发送和接收。一个很好的例子可以是SubscribableJmsChannel,您只需简单地在应用程序上下文中声明它,集群中的所有节点都将订阅该通道,以便从JMS队列进行循环使用。哪个节点向该通道生成已经无关紧要了。

请参阅文档中的更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/jms.html#jms-通道。

类似分布式通道的另一个示例是:AMQP、Kafka、Redis、ZeroMQ。

您还可以拥有共享消息存储,并在QueueChannel定义中使用它:https://docs.spring.io/spring-integration/docs/current/reference/html/system-management.html#message-存储

你说的";运行时轮询器";,所以我建议你用更多的信息开始一个新的so线程。

请参阅规则作为指导:https://stackoverflow.com/help/how-to-ask

最新更新