FME服务器允许您通过将单个工作区链接在一起来构建复杂的工作流,亚搏在线并根据工作区是否成功完成采取各种操作。像大多数FME任务一样,亚搏在线工作流管理最好使用内置于FME工作台中的工作区来完成。
如果您使用的是FME服务器2017.1,请参阅:FME服务器工作流管理亚搏在线
如果您使用的是FME Server 2014,请参阅:FME服务器工作流管理亚搏在线(FME服务器2014)
这个FMEServerJobSubmitter(FMEServerJobSubmitter)是管理FME服务器工作流程的关键转换器。亚搏在线从2014年的FME服务器开始,对fmeserverjobsubmitter的工作方式进行了更改。在等待作业完成时,可以使用控制器工作区来运行作业,不需要在服务器上绑定另一个FME引擎。本教程只需要一个FME引擎。本教程中描述的方法替换了我们先前推荐的几个更复杂的方法。
亚搏在线工作流管理示例-多个引擎:
在这个例子中,我们将使用将矢量数据从一个shapefile加载到数据库的示例,处理数据,以及创建光栅网络地图块。这是通过使用4工作空间-一个控制器和三个工人。控制器依次运行每个工作区,FME服务器可以配置为在整个过程成功完成后发送电子邮件。这只需要单燃料发动机.
通常情况下,您将构建组成工作流程的各个工作区。亚搏在线对于本教程,我们已经构建了如上所述的工作区。有关它们如何工作的详细信息,在FME工作台中打开*.fmw文件并阅读注释。
a)将所有流程工作区(如下所列)发布到FME服务器上的新存储库中。请注意,您将不需要随工作区一起上载任何数据。
b)测试工作空间,确保它们单独工作(即手动向下一个工作区提供输入数据)。这可以使用作业提交者服务的配置对话框或使用FME工作台来完成。
确保使用下列适当的输入数据源:
发布各个组件工作区后,您可以开始设置控制器工作区(链轮)对于本教程,已生成控制器。然而,您需要对每个FMEServerJobSubmitter执行向导,以便为您的FME服务器安装正确配置它(使用您的主机名和凭据更新FMEServerJobSubmitter)。并为发布的参数选择正确的值。请注意,此时应该已经发布了工作区。
工作流是亚搏在线由创建者启动的。fmeserverjobsubmitters配置如下:
这个第一fmeserverjobsubmitter需要在控制器工作区的已发布参数中设置的输入文件:终止符用于异常处理,并将记录哪个工作区导致失败。它们还将导致控制器工作区报告故障,而不是报告错误的成功。
当输出到基于文件的数据格式(如我们使用的是空间网站数据库)时,您可以在工作区之间传递对该文件的引用,使用输出数据集名单。对于每个输出数据集,有三个属性:名称,路径,和格式.只有在选择“输出数据位置:临时文件夹”时才会发生这种情况。
要访问这些属性,您可以使用列表爆炸器,或者简单地引用第一个数据集作为输出0。
在第二fmeserverjobsubmitter,提交者,我们将使用Path属性传递对文件的引用:
如果你要用DBMS,您可以将连接参数指定为控制器工作区的已发布参数。
在最后的fmeserverjobsubmitter,提交者,我们要将输出(web map tiles)写入到作业完成后可以访问的位置,
在FME 2015中,新功能,称为“输出数据位置”,已添加到FMEServerJobSubmitter变压器。这允许用户将输出数据发送到自己的输出位置(如UNC路径或共享资源),而不是使用服务器上的临时位置。要做到这一点,在Transformer属性中选择“在工作区中指定”选项。在这种情况下,我们提供了fme_sharedesource_temp参数:
我们现在准备发布控制器工作区。它可以发布到作业提交者服务。
运行控制器工作区时,提供正确的形状文件。如果您上传提供的zip文件作为输入,确保实际选择压缩目录中的*.shp文件:
注释:只有一个作业将显示在FME服务器的作业历史记录中。然而,它的日志文件将包含来自所有三个工作区的完整日志信息。
此示例演示如何使用控制器工作区并行运行多个作业FME发动机.用这种方法,您可以在单个工作区内运行一系列作业并执行下游处理。
工作空间(工作空间)并联发动机.fmw)使用提交四个作业进行处理FMEServerJobSubmitter(FMEServerJobSubmitter)变压器。它们完全同时提交,并在多个发动机上运行(如果可用)。工作区使用FMEServerJobWander服务生然后在所有处理完成后发送电子邮件。
警告:如果此工作流使用不当,则可能导致FME服务器死锁。亚搏在线例如,如果你有三个引擎,运行控制器工作区三次,将有3个作业被卡住,等待排队的作业完成。因为所有的引擎都被占用了,控制器作业永远不会完成,需要手动取消。
并行运行作业的关键是设置FMEServerJobSubmitter的“等待服务器作业完成”参数到'不.此设置使变压器无阻塞,从而可以提交多个作业。
来自的每个功能输出FMEServerJobSubmitter(FMEServerJobSubmitter)Transformer包含作业ID。此ID可由FMEServerJobWander服务生检查工作是否完成。所有作业完成后,这些功能将退出FMEServerJobWander服务生从而可以进行进一步的处理。
注:在附加的工作区中有一个FMEServerJobSubmitter(FMEServerJobSubmitter)参数设置为“等待服务器作业完成”是的。这样做是为了演示,以显示您可以在工作区中具有多个具有不同设置的变压器。
为了得到工作流问题的通知,亚搏在线可以设置控制器工作区以在失败时发布到主题,并添加电子邮件订阅。请参阅我们的教程系列FME服务器中的电子邮件更多信息-具体来说,工作区完成时发送电子邮件.
您还可以通过使用通知服务来自动启动工作区-可能是为了监视目录中的更改,或者回复收到的电子邮件附件。这种方式,FME服务器可以自动将新数据加载到数据库中,处理它,创建Web地图图块并将其上载到宿主位置,比如亚马逊S3。
此示例演示如何使用控制器工作区来使用多个FME引擎。用这种方法,您可以在多个引擎上运行一系列作业,并在单个工作区内执行下游处理。
2017.1,我们在FMEServerJobSubmitter(FMEServerJobSubmitter)现在不再需要fmeserverjobsteer变压器,使您能够使用尽可能多的发动机。特别是,变压器中有两个参数指示了行为:
警告:如果你有一个引擎,提交工作设置为平行和等待作业完成设置为是的,FME服务器将死锁,您必须手动停止队列和作业以释放引擎。
提交工作: | |||
平行 | 相继的 | ||
等待作业完成: | 是的 |
等待所有作业进入Transformer,然后立即提交它们。当所有功能都完成时,将它们发送出变压器。 *这将允许FME服务器使用尽可能多的引擎,但是,如果您只有一个引擎,那么所有子作业都将卡在队列中。 |
在提交下一个作业之前,等待作业完成并释放功能。这种组合将启动子引擎来处理子工作区 *如果要同时为子工作区和父工作区使用一个引擎,请使用此设置。 |
不 | 等待所有作业进入变压器,立即提交,并在完成后立即发布功能。 | 收到作业后立即提交作业,提交后立即发布功能。 |
另一个需要注意的新特性是摘要端口。现在,您可以使用它向FMeserverEmailGenerator提供信息,以便可以将有关提交的作业的信息与消息一起发送。摘要端口充当一个阻塞转换器,只有当所有作业都以失败或成功状态完成时,才会释放一个特性。
多个EJobsubmittersAllengines.fmw
在这种情况下,涉及AlngNi-FMW,我们将使用一个fmeserverjobsubmitter,将提交作业作为并行作业,并等待作业完成到“是”。
此方案使用multipleJobSubmittersAllengines.fmw将作业提交给新引擎,这样您就可以充分利用FME服务器的潜力。这个工作区有几个假设:1)假设你想提交不同参数的不同作业;2)你想在作业完成后得到通知,这样你就可以处理一些依赖它的事情。
a)这里需要多个FMEServerJobSubmitter,以便能够计算出唯一的参数和工作区。
乙)fmeserverjobsumithers submit jobs参数必须设置为平行等待作业完成不.即使我们想等待找到工作的状态,因为fmeserverjobsumitles正在阻塞变压器,所以在完成该功能之前,它们不会让工作区中的任何其他进程进行处理。
C)(可选)attributeCreator创建一个保存工作区名称的属性,以便在fmeserverjobSubmitter之后对作业进行相应筛选。
D)特征持有者:此步骤允许在将所有作业传递给FMeserverJobWander之前对其进行累积。如果没有累积,那么当我们希望尽快发送作业时,触发FMeserverJobWander可能会导致FMeserverJobSubmitter等待功能持有者完成。
e)fmeserverjobwaiter:这将轮询服务器,以查明作业何时完成及其状态。
f)(可选)接下来,我们找到作业的状态,如果作业失败,则取消进程。
处理输出(2个选项):
G)聚合器:聚合器有两个功能:1)在释放一个特性之前积累所有特性;2)减少特性的数量,这样我们可以一次启动一个新的过程。
或
H)testfilter按工作区筛选,以便为不同的作业启动不同的进程。
为了得到工作流问题的通知,亚搏在线您可以设置控制器工作区(allengines.fmw,以及multipleJobSubmittersAllengines.fmw)发布到失败的主题,并添加电子邮件订阅。请参阅我们的教程系列FME服务器中的电子邮件更多信息-具体来说,工作区完成时发送电子邮件.
您还可以通过使用通知服务来自动启动工作区-可能是为了监视目录中的更改,或者回复收到的电子邮件附件。这种方式,FME服务器可以自动将新数据加载到数据库中,处理它,创建Web地图图块并将其上载到宿主位置,比如亚马逊S3。
我们在从各种Web源(我们读取的几个XML提要特别容易出现这种情况)读取数据时遇到的最大问题之一是,有时它们喜欢挂起或读取不完整的数据集。为了缓解这个问题,我们是菊花链工作流程在一起,所以1触发另一个亚搏在线,并在一行,所以1个坏的数据集不会降低整个工作和其他数据集。理想情况下,如果服务器能够处理无效的数据集(可能通过自动完成/关闭——即使所有数据都无法读取——或者更理想的情况是尝试在数据集上进行第二次读取),然后继续处理其他数据集,那就更好了。
如果您可以选择在FME服务器的调度程序中连接工作区,这将非常有用。
此刻,我使用一个额外的FME过程(与各种FMEServerJobSubmitters一起)来连接工作区。
我更喜欢,如果可以在FME服务器的管理界面中为计划的作业设置此链接。
这在将来不需要额外的管理过程。
在我看来,我无法设置多个计划作业,因为它们具有时间依赖性。例如,在前一个进程成功完成后,可以启动以下进程。
应该可以配置FME服务器,以便在(特定)工作区开始处理时触发通知。
嗨,大家好,
我有一个控制器工作区,它通过JobSubmitters在服务器上触发2个作业,其中一个作业失败,这会触发Controller工作区中的通知程序发送电子邮件,通知程序的输出端口成功地连接到一个终止符,这样当发送电子邮件时,控制程序也会失败。
这一切都很好,按计划进行,而且在桌面上工作得很好,桌面上控制器的转换状态为转换失败。
现在我已经上传了所有相关的工作区,当我运行控制器工作区时,转换状态是成功吗????.
我已经盯着这个问题看了一段时间了,尝试移除控制器工作区并重新发布它,但没有任何乐趣,有人知道吗?
非常感谢,伊泰
你好!我正在使用httpcaller和fme服务器的rest api获取作业时间戳(timequeued)。当它被发送到队列时。它工作得很好,但是时间戳应该转换为UTC。目前芬兰的当地时间是UTC的+3小时,由于日光节约,秋天的时候会上升到2小时。作业应自动运行,这样我就不需要将偏移参数放到本地时间,它来自RESTAPI。最简单的解决方案是,排队的时间将以UTC为单位。是否可以在FME服务器中配置?
你好,
我在服务器上有几个工作区,使用fmeserverjobsubmitter transformers从父工作区(也在服务器上)调用这些工作区,把它们连在一起。当单独运行时,每个工作区工作正常,但是父工作区没有成功运行。然而,从桌面运行时(仍从服务器调用工作区),父工作区工作正常。有什么可能的原因吗?
嗨,大家好,
我在FME服务器上遇到一个与主题有关的问题:
我有一个工作区(控制器),通过作业提交者触发另一个工作区(工人)。
如果成功的话,工人会在主题“记者数据库”上发表文章。它发送一些JSON代码。
案例1:当我通过控制器运行工人时,主题没有“激活”。
案例2:如果我通过Web浏览器界面直接启动Worker,它正确运行并激活主题。
我注意到这两种方法有区别(见图)。在Rigth(案例2)上,有一些FME指令和通知管理器指令,而案例1中没有任何指令…
有人知道我怎样才能解决1号案件吗?
谢谢您!
劳伦特
我想阅读电子表格并动态地提供工作区名称等内容,储存库,标签,输出数据集(“在工作区和参数中指定”作为选项/已发布到服务器的内容),等。到一个FMeserverJobSubmitter。
我不想为我需要运行的每个工作台设置一个作业提交者。这有助于循环失败的作业,直到成功为止。
FME服务器作业参数的隐藏参数,我们需要较少的硬编码控制:
哎呀!
哎呀!
哎呀!
哎呀!
哎呀!
哎呀!
哎呀!
哎呀!
哎呀!
哎呀!
哎呀!
哎呀!
哎呀!
哎呀!
请允许我在提交作业后公开这些属性,然后在另一个提交工作台中使用它们:)
你好,
我有一个FME服务器作业提交者工作台。创建者提交作业,然后去工作服务员和日志文件检索器。
为了不因工作服务员而将发动机与送检台绑在一起,2016年,我使用功能编写器将作业元数据写入电子表格,然后输出到另一个作业提交者,该提交者将作业服务生设置为最后运行。
如果该作业提交者检测到任何故障,它将再次尝试重新运行该工作台(并且只会再次运行一次)。
我希望能够在同一个电子表格中写入更多的元数据,有一个第二次尝试失败的板凳,动态运行电子表格中所说的要再次运行的内容。我们现在要做的是复制原始提交者的工作台,然后使用手动定义的属性过滤器来匹配电子表格中的工作台名称来执行第二次运行。
有人对我如何做到这一点有什么想法吗?认为HTTP调用者的某些系统服务器参数是从服务器上的原始提交者公开的。但是一些服务器参数是空白的,或者如果我公开它们,将使工作台失败(例如fme-server-dest-dir)。
理想的情况是让作业提交者转换器允许“存储库名称”,“所选项目名称”(workbench_name.fmw),“等待工作”,“工作优先”“工作标签”由属性设置
然后在默认情况下使用“在工作区和参数中指定”,并在发布时默认使用设置的参数。
谢谢,
亚伦
编辑1:
我已经成功地使用HTTP调用者从服务器上的工作区手动获取了直接URL示例。
但是,我需要能够动态地检索每个工作台运行的直接URL示例。
但即使是这种方法也不理想,因为最终没有检索到作业ID(以检查是否成功或失败并相应地发送电子邮件),并且运行HTTP调用者(使用GET方法)的工作台仍需要在完成工作区之前等待A响应(因此仍然占用2个引擎)。
服务器的一个简单改进就是一个转换器,很像fmeserverjobsubmitter或fmeserverjobwaterer,这样我就可以用一个服务员,找出失败的原因,然后只重新提交那些作业ID。
最好把它当作一个新的变压器来处理,为了更好地控制用户端,但也可以作为一个简单的复选框在jobwaiter中实现。
如果您有一个长的工作区链,并且在链的开头更新了一个工作区,并且在DataInspector中看到了所有数据都是正确的,那么您将看不到其他链接,并尽快将其发布到服务器。但是在等待结果数小时后,您会发现进程出错,因为数据没有被写入。
注释:这个问题已经在FME服务器2017.0中修复或更新。现在取消作业将正确结束fme.exe子进程。
包含FMeserverJobSubmitter转换器的工作区失败,出现许可错误。
如果fmeserverjobsubmitter转换器设置为“等待服务器作业完成”,它为提交的每个作业启动一个fme.exe过程。如果任何作业在完成前被取消,未删除相应的fme.exe。
取消包含设置为“等待服务器作业完成”的fmeserverjobsubmitter转换器的作业时,打开Windows任务管理器并结束fme.exe任务。
你好,
我不确定是否可能,但是的。我有一个只有两个WorkspaceRunner变压器的工作台,其中两个工作台都使用httpCaller并从Web获取数据。
第一个工作台接受的输入始终使用不同的URL,每个URL都提供不同的输出(我有一个URL列表)。第二个工作台使用“等待作业完成”正常运行。
我可以只在一个变压器上使用批处理模式,还是有其他解决方案。