- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们计划创建一个新的处理机制,它包括监听一些目录例如:/opt/dir1、/opt/dirN
,并且对于在这些目录中创建的每个文档,启动一个例程处理,将其注册表持久保存在数据库中(通过对现有 CRUD API 的 REST 调用)并生成一个协议(protocol)文件到另一个目录。
出于测试目的,我没有使用任何现代(甚至体面的)框架/方法,只是一个带有 WatchService 实现的常规 SpringBoot 应用程序,它监听这些目录并在创建文件后立即轮询要处理的文件。它有效,但很明显,当我转向生产并开始接收数十个要并行处理的文件时,我肯定会在某个时候对性能产生一些影响,这在我的示例中不是现实。
经过一些研究和几位同事的一些提示后,我发现 Spring Batch + Spring Cloud Data Flow 是满足我需求的最佳组合。但是,我以前从未处理过 Batch 或 Data Flow,我有点困惑我应该构建这些 block 的内容和方式,以便以最简单和高效的方式运行此例程。我有几个关于它的附加值和架构的问题,非常希望听到您的想法!
我设法创建并运行了一个基于样本批处理文件摄取任务的 on this section of Spring Docs .每次在目录中创建文件时如何启动任务?我需要流吗?
如果我这样做,我如何创建一个流应用程序以编程方式为每个将其路径作为参数传递的新文件启动我的任务?我应该为此目的使用 RabbitMQ 吗?
如何为我的任务保留一些外部变量例如目录路径
?我可以让这些流和任务在 jar 之外的其他地方读取 application.yml 吗?
为什么我应该将 Spring Cloud Data Flow 与 Spring Batch 一起使用,而不仅仅是一个批处理应用程序?仅仅因为它跨越了每个文件的并行任务,还是我得到了任何其他好处?
纯粹谈论性能,如果您只考虑顺序处理场景(我每小时大约只收到 1 个文件),这个解决方案与我的 WatchService + 普通处理实现相比如何?
此外,如果你们有任何关于如何以编程方式启动任务的指南或示例,我将非常感谢!我仍在寻找它,但似乎我做的不对。
感谢您的关注,非常感谢任何意见!
更新
我设法通过 SCDF REST API 启动了我的任务所以我可以使用 WatchService 保留我原来的 SpringBoot 应用程序,通过 Feign 或 XXX 启动新任务。我仍然知道这远不是我应该在这里做的。经过更多研究后,我认为使用文件源和接收器创建流将是我的方式,除非有人有任何其他意见,但我无法将入站 channel 适配器设置为从多个目录轮询,我不能多个流,因为这个平台应该扩展到我们有成千上万的参与者(或从中轮询文件的目录)。
最佳答案
这里有一些提示。
I managed to create and run a sample batch file ingest task based on this section of Spring Docs. How can I launch a task every time a file is created in a directory? Do I need a Stream for that?
如果您必须在上游事件(例如:新文件)发生时自动启动它,是的,您可以通过流来做到这一点(参见 example )。如果事件来自消息代理,您也可以直接在批处理作业中使用它们(例如:AmqpItemReader)。
If I do, How can I create a stream application that launches my task programmaticaly for each new file passing it's path as argument? Should I use RabbitMQ for this purpose?
希望上面的例子能说明问题。如果您想以编程方式启动任务(而不是通过 DSL/REST/UI),您可以使用新的 Java DSL 来实现。支持,这是在 1.3 中添加的。
How can I keep some variables externalized for my task e.g directories path? Can I have these streams and tasks read an application.yml somewhere else than inside it's jar?
推荐的方法是使用配置服务器。根据编排平台的不同,您必须向任务及其子任务(包括批处理作业)提供配置服务器凭据。在 Cloud Foundry 中,我们只需将 config-server 服务实例绑定(bind)到每个任务,并且在运行时将自动解析外部化属性。
Why should I use Spring Cloud Data Flow alongside Spring Batch and not only a batch application? Just because it spans parallel tasks for each file or do I get any other benefit?
作为 Spring Batch Admin 的替代品,SCDF 为任务/批处理作业提供监控和管理。错误时的执行、步骤、步骤进度和堆栈跟踪将被持久化,并可从仪表板进行探索。您也可以直接使用 SCDF 的 REST 端点来检查此信息。
Talking purely about performance, how would this solution compare to my WatchService + plain processing implementation if you think only about the sequential processing scenario, where I'd receive only 1 file per hour or so?
这是特定于实现的。我们没有任何基准可以分享。但是,如果需要性能,您可以探索 remote-partitioning Spring Batch 中的支持。您可以使用“n”个工作人员来划分摄取或数据处理任务,这样您就可以实现并行性。
关于java - 使用 Spring Batch 和 Spring Cloud Data Flow 构建文件轮询/摄取任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49246772/
我正在尝试实现 kotlin stateflow,但不知道它不起作用的原因。 当前输出: 验证34567 预期输出: 验证 34567 验证失败 package stateflowDuplicate
最近我发现了一个我无法理解的流行为。 问题描述 考虑这种情况:你有一个父 flow 并且在它的 collect 中,你将有一个“子”flow 并调用 .collect(),像这样: parentFlo
我想通过 UML2 事件图为以下事件建模: 执行操作 1。此操作产生两个输出参数: Object1和对象 2。 执行操作 2。此操作需要 Object2 作为输入参数。它不需要 Object1 作为输
在 Vaadin 8 中,您可以在 Tab(属于 TabSheet)上设置一个图标: tab#setIcon(...) 在 Vaadin Flow(目前使用 14.1)中,我不知道如何在 Tab(属于
有什么办法可以做到这一点吗?如果存储库仅在 .git/config 中包含 git-flow 指令(如 ),则该存储库是否被视为已初始化 .... [gitflow "branch"] mas
the 2nd collecting below does not collect until I remove the first one. also read from [Manuel Vi
在官方示例中,他们总是有 /* @flow */在页面顶部。现在这对现有项目来说很好,很有帮助,我想选择加入每个文件的流程。从头开始构建一个新项目我只想在任何地方进行流类型检查,而不必输入 /* @f
Vaadin 突然停止构建我的库并出现以下错误。我已经跳了 Vaadin 舞(还有很多其他的东西),但我现在没主意了。我尝试为生产构建库(但对于开发也失败了)。 我正在使用 Vaadin Flow。
我注意到很多人和例子都使用 Flows 作为 List<> 的包装器,例如像这样: @Query("SELECT * from some_model ORDER BY some_field") fun
Vaadin 突然停止构建我的库并出现以下错误。我已经跳了 Vaadin 舞(还有很多其他的东西),但我现在没主意了。我尝试为生产构建库(但对于开发也失败了)。 我正在使用 Vaadin Flow。
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 3 年前。 Improv
git flow init后,如何删除git flow模型? 如何从 .git/config 文件中删除所有相关配置? $ git flow init # force reset $ git flow
我运行了 git init 并在选择第一个分支时犯了一个错误。现在我想重新运行它来更改设置,但它再也不会问第一个问题。 Which branch should be used for bringing
我刚刚开始一份新工作,他们的代码管理一团乱。通常情况下这没什么问题,我可以应付,但在这个地方,情况就糟糕得离谱了。 他们使用 TFS...对此我无能为力。没有机会介绍 git,但我一直在阅读有关 gi
我的应用程序有更新问题。我不太明白 subview 之间的数据流是怎么回事。 这是我目前的结构 ViewModel:ObsebsrvableObject MainView 与 ObservedObje
为什么“flow check-contents”需要使用 < 将文件重定向到其中,而“flow suggest”则不需要?看起来 check-contents 应该假设命令行参数是要检查的文件路径。
最近我在 Git 中发现了工作流的三个概念: GitFlow GitHub 流程 GitLab 流程 我读过 the nice articles关于它,但我不太了解 GitLab Flow。 简单地说
我们刚刚改用 Hg Flow,但我们还没有弄清楚的一件事是如何最好地使用 Jenkins。理想情况下,我们将有一个构建和测试开发的作业,一个构建和测试默认作业和其他作业,这些作业在创建功能或发布分支时
将 Vaadin 12 与 FormLayout 一起使用和标签左侧的输入字段。 我想设置标签列的宽度。如何使用 Java API 实现这一点? 最佳答案 用于设置个人 FormItem标签宽度和/或
我正在使用 React-Flow 来可视化 React 中组件的树状层次结构。每当您在 React-Flow 中创建自定义节点时,您都可以像这样在树中使用它: ,我就可以做到这一点。 .有没有
我是一名优秀的程序员,十分优秀!