- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
背景:在我的国家,11 月将有一种新的即时付款方式。基本上,中央银行将提供两个端点:(1)一个 POST 端点,我们发布单笔汇款;(2)一个 GET 端点,我们在那里获得之前发送的汇款结果,它可能完全无序。它将仅对 Money Transfer 结果进行回复,并且在其标题中会通知我们是否必须获取另一个结果。它永远不会告知有多少结果可用。如果有结果,它会返回 Get 响应,并且只通知它是最后一个还是有剩余的用于下一个 GET。
最高限制:从最终用户在他/她的移动应用程序中单击转移按钮的那一刻起,直到最终结果显示在他/她的移动屏幕上(如果成功或失败)是 10 秒。
策略:我想要一个每秒或什至不到一秒触发一次 Get to Central Bank 的时间表。调度程序基本上会调用一个简单的函数,它 (1) 调用 Get 端点,(2) 将其推送到 Kafka 或持久保存在数据库中,以及 (3) 如果在答案标题中通知有更多结果可用,则再次启动相同的函数.
问题:由于我们是 Spring 用户/追随者,我虽然我的决定是在 Spring Batch 与 org.springframework.scheduling.annotation.SchedulingConfigurer/TaskScheduler 之间。我已经成功地使用了 Spring Batch 一段时间,但从未使用过这么短的时间触发(从未使用过 1 秒)。我在讨论中跌跌撞撞,这让我思考如果在我的情况下,一个非常简单但周期很短的任务,我应该考虑 Spring Cloud Data Flow 或 Spring Cloud Task 而不是 Spring Batch。
根据 this answer “...... Spring Batch 是......设计用于构建复杂的计算问题......如果需要,您可以使用 Spring Scheduler 编排 Spring Batch 作业”。基于此,我似乎不应该使用 Spring Batch,因为我的情况并不复杂。挑战设计决策更多地是关于短期触发和从当前批次触发另一个批次,而不是转换、计算或 ETL 过程。尽管如此,据我所知,带有 tasklet 的 Spring Batch 是为重新启动、恢复和重试而精心设计的,并且非常适合永远不会完成的场景,而 org.springframework.scheduling 似乎只是一种基于周期触发事件的方法配置。嗯,这是我根据个人使用和研究的填充。
根据某人询问有关组合任务的编排的回答 this answer “……您可以使用 Spring Cloud Data Flow 和 Spring Cloud Task/Spring Batch 来实现您的设计目标……”。就我而言,我看不到组合任务。就我而言,第二个触发器不依赖于前一个触发器的结果。这听起来更像是“链式”任务而不是“组合”。我从未使用过 Spring Cloud Data Flow,但它似乎是管理/查看/控制台/仪表板触发任务的不错选择。尽管如此,我没有发现任何关于短期触发器和“链式”触发器的限制或经验法则。
所以我的直接问题是:目前推荐的 Spring 成员是什么来触发这么短的时间?假设 Spring Cloud Data Flow 用于管理器/仪表板,那么在如此短的触发器场景中推荐的 Spring 触发器成员是什么?似乎 Spring Cloud Task 是为调用复杂函数而设计的,而 Spring Batch 似乎添加的太多超出了我的需要,并且 org.springframework.scheduling.* 缺少与 Spring Cloud Data Flow 的集成。作为类比而不是比较,在 AWS 中,文档明确指出“不要使用 CloudWatch 少于一分钟。如果您想要少于一分钟,请每分钟启动 CloudWatch,每秒启动另一个调度程序/cron”。对于需要每秒甚至不到一秒触发并利用 Spring 家族的方法/关注点/经验的简单任务,可能有一个众所周知的经验法则。
最佳答案
这可能是愚蠢的答案。为什么这里需要调度程序?一个永无止境的工作难道不会在这里实现目标吗?
GET
请求,将结果推送到 kafka
, GET
响应表明,它有更多的结果,它立即执行 GET
再次将结果推送到 kafka
GET
响应表明,没有更多结果,sleep for 1 second
,做 GET
再次请求。 关于spring - 每秒或什至不到一秒安排简单的 GET 批处理 - 应该选择 Spring Cloud Task、Spring Batch 或 springframework.scheduling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62972866/
这个问题在这里已经有了答案: Why use async and return await, when you can return Task directly? (8 个答案) 关闭 6 年前。
这个问题在这里已经有了答案: Are the days of passing const std::string & as a parameter over? (13 个答案) 关闭 8 年前。 我
我有一组标记为执行的通用任务。当任务完成时(使用 Task.WaitAny ),我将其添加到 ObservableCollection 中. 但是,问题出在 Task.WaitAny(...)行,上面
经过几个小时的努力,我在我的应用程序中发现了一个错误。我认为下面的 2 个函数具有相同的行为,但事实证明它们没有。 谁能告诉我引擎盖下到底发生了什么,以及为什么它们的行为方式不同? public as
这也与 Python 的导入机制有关,特别是与在函数内使用 import 有关。使用 Python 2.7.9 和 Fabric 1.10.0,创建以下三个文件: fabfile.py: from a
我有一个 Web API Controller (ASP.NET Core 5)。我的一些 API 是异步的,而其中一些不是。我接下来的问题是:使用 public **Task** WebApiMet
我们有类似下面的内容 List uncheckItems = new List(); for (int i = 0; i new Task(async () => await Process
我的代码没问题,但我想知道哪种风格更好,你会怎么看,我正在玩异步方法。 让我建立上下文: Parallel.ForEach(xmlAnimalList, async xml => {
这两种使用 await 的形式在功能上有什么区别吗? string x = await Task.Factory.StartNew(() => GetAnimal("feline")); Task m
我刚刚看到 3 个关于 TPL 使用的例程,它们做同样的工作;这是代码: public static void Main() { Thread.CurrentThread.Name = "Ma
考虑以下代码: public void CacheData() { Task.Run((Action)CacheExternalData); Task.Run(() => CacheE
Task> GetTaskDict() { return Task.FromResult(new Dictionary () ); } 此代码无法编译,因为我们无法在 Task> 到 Tas
我正在使用 ASP.NET 5 RC1 _MyPartial @model MyViewModel @using (Html.BeginForm())
当我尝试在 VS Code 中构建 C 任务时,它显示以下消息: 输出仅显示:The task provider for "C/C++" tasks unexpectedly provided a t
一些背景: 基本上归结为我希望能够在当前线程中“执行”任务。为什么? -我有一个任务创建程序例程,有一次我希望任务在后台任务中立即执行,而其他时候我希望使用 IOmniThreadPool 安排任务。
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我试图将run-sequence添加到我的gulp工作流程中,但是每次尝试执行使用run-sequence的任务时,都会出现此错误: 任务未配置为gulp上的任务。 根据运行序列的来源,这是由以下te
此代码在VS2015中给出了编译时错误 Error CS0266 Cannot implicitly convert type 'System.Threading.Tasks.Task' to 'Sy
我正在尝试通过我的代码通过Google登出: suspend fun signOut(context: Context): Boolean = with(Dispatchers.IO) { t
谁能解释一下这两种说法的区别: Task bTask = backup.BackupCurrentDatabaseAsync() .ContinueWith(_ => CompressArch
我是一名优秀的程序员,十分优秀!