作为一名FME桌面作者,我希望能够创建连接到ApacheKafka流的工作流,并亚搏在线且每小时处理多达1000000条消息,这样我就可以管理和丰富使用此协议的物联网设备的数据。
正如谷歌12月11日宣布的那样,2018, Google Fusion Tables和Fusion Tables API 将于12月3日关闭,2019。一些用户可能在2019年8月开始看到错误。关闭服务后,融合表支持将从FME中删除。关于使用FME从Google Fusion表中迁移数据的方法,查看博客帖子 7+Google Fusion Tables备选方案.
本文针对的是FME服务器2017+。有关本文的早期版本,请参阅:教程:目录监视
注意:本教程要求谷歌帐户和Microsoft Excel。
使用标准目录监视配置,每次修改被监视的文件(或文件夹)时,FME服务器都会触发通知。这可能会导致服务器上的处理过载。本教程提供了一种使用空闲时间延迟来优化处理这些迁移的方法。
在下面的示例中,Excel电子表格存储在监视的文件夹中。修改电子表格时,由FME服务器和内容(即文件名,timestamp)存储在数据库表中。该表由按计划运行的工作区检查,并且当每个修改的文件都经过所需的时间时,数据会自动备份到云中的Google Fusion表中。
导航到安装了FME服务器的机器上的文件系统,或者您自己的机器,前提是FME服务器位于同一网络上。创建一个名为“resource”的新文件夹,并将项目_inventory.xlsx文件从附加的下载文件复制到新文件夹中。右键单击资源文件夹中的任意位置,然后单击属性。在“共享”选项卡中单击,高级共享,然后启用共享此文件夹,确保权限设置为写入,然后单击确定。复制UNC网络路径(例如\\ KC-LS-Windows\资源)我们将在下一步中需要它并关闭属性窗口。此外,根据计算机中的共享设置,您可能需要单击共享…按钮,然后单击“资源属性”对话框中的“共享”。
创建包含project inventory.xlsx的共享文件夹,确保权限设置为“完全”
登录您的FME服务器,并在侧菜单栏上的通知下,选择出版物。单击“新建”,并将出版物命名为“同步工具”,然后添加一个新主题以发布到名为“同步工具”的出版物中。选择目录监视协议,对于要监视的目录,选择“指定位置”,粘贴上一步复制的UNC网络路径。监视修改操作(删除创建和删除)。最后,将轮询间隔设置为1分钟,你可以把它作为默认值,但是为了测试的目的,较短的调试间隔会更快。单击“确定”创建出版物。
在FME服务器中创建名为sync_tool的新目录监视发布,设置它以监视资源目录。
打开项目目录到地图.fmw (工作空间α1)在FME工作台中。此工作区将Excel数据写入存储在云中的Google Fusion表。有关Google Fusion表的更多信息,请参阅用户文档.
在导航器窗格中的用户参数中,在发布的参数下,双击[SourceDataset_xlsxr],将路径设置为“\\youruncpath\resource\project inventory.xlsx”,一定要包括报价单。
双击SQLExecutor以修改参数。我们将需要登录到我们的个人谷歌帐户并授权FME。要做到这一点,在sqlExecutor中选择参数,在Google Fusion Table空间参数对话框中,单击(…)。在OAuth身份验证窗口中,使用您自己的Google帐户凭据登录以管理Fusion表,然后单击“允许”。现在在Google Fusion Tables空间参数对话框中有一个刷新标记,复制此令牌以避免在以后的步骤中重新进行身份验证。单击“确定”退出SQLExecutor参数
双击[GoogleToken]用户参数并粘贴到Fusion表刷新令牌中,以连接到您自己的帐户。
项目库存到工作区工作流亚搏在线
发布到FME服务器,创建一个名为“项目库存”的新存储库,然后向作业提交者服务注册。(注意:确保取消选中“上载数据文件”,以便Excel文件不会上载到服务器)
在FME工作台打开项目库存状态.fmw (工作空间α2),当目录监视协议发送修改触发器时,此工作区将运行。通知消息的详细信息(即文件名,时间戳)存储在数据库中,在本例中,这将是一个Google Fusion表。
这个工作区是用一个名为googletoken的用户参数设置的,以加速sqlExecutor和writer中的身份验证过程。这与最后一步的过程相同。单击googletoken published参数并粘贴刷新令牌。
发布工作区FME服务器,在项目库存库中,并使用通知服务注册工作区。单击编辑并选择同步工具订阅主题。(注意:您可能会收到警告消息-此工作区使用自定义格式,需要提供给FME服务器-单击“是”接受。)
项目清单状态.fmw(工作区2)工作流亚搏在线
为了让工作区在FME服务器上使用自定义转换器运行,我们需要上传自定义转换器。在FME服务器中,转到“资源”并导航到“引擎”文件夹中的“格式”文件夹。单击上载并浏览到目录“watch\u reader.fds”,它位于本教程开头下载的文件夹中。
将目录“watch”reader.fds上传到FME服务器的“格式”文件夹中。
回到打开的FME工作台项目目录同步.fmw (工作空间α3),此工作区用于检查数据库(Google Fusion表)中是否有修改过的文件,并在必要时将其发送给用户进行处理。
在用户参数中,双击[谷歌令牌]并粘贴刷新令牌。在FMEServerJobSubmitter中,连接到您的FME服务器。然后选择项目库存库,并选择项目库存到工作区。单击左下角的刷新图标,将项目“库存”中的参数输入到“地图”中。这将启用项目目录到地图.fmw(工作空间α1)跑一次项目目录同步.fmw (工作空间α3)已经跑了。
在同一个存储库中发布到FME服务器,并向作业提交者注册。
项目_inventory_sync.fmw(工作区3)工作流亚搏在线
在FME工作台打开DB加载程序 (工作空间α4),此工作区在Google Fusion数据库中创建两个表。
在“导航器”窗格的“用户参数”下,双击[sourcedataset_xlsxr]并浏览到共享资源文件夹并添加project inventory.xlsx文件
下一步,双击[SourceDataset_csv]并浏览到文件下载附带的名为project_inventory_file_status.csv的csv文件。
然后像以前一样更新[GoogleToken]然后运行工作区。运行翻译之后,请登录您的Google Drive帐户以确保工作区正确运行,你应该看到两个文件,项目库存和项目库存文件状态。
db_loader.fmw(工作区4)工作流。亚搏在线创建两个Google Fusion表
最后一步是设置一个时间表来检查跟踪数据库。这可以设置为每隔几分钟运行一次。此计划将运行项目目录同步.fmw (工作空间α3),它检查跟踪数据库上一次修改的时间。如果大于工作区内设置的空闲时间,数据将被迁移。
在FME服务器中,转到“计划”页,单击“新建”以创建名为“项目库存同步”的新计划,并创建名为“项目库存”的新类别。立即检查运行情况,然后将其设置为每2分钟重复一次,或者设置为希望重复的频率。
然后将存储库设置为“项目库存”,并选择项目目录同步.fmw(工作空间α3)单击“确定”以设置计划。将显示一个已发布的参数部分,如果你愿意,你可以调整等待的时间,这是更新Excel文件并处于空闲状态后所需的等待时间。一旦满足这个条件,数据将被同步到Google Fusion表。也,确保刷新令牌正确。单击“确定”开始计划。
在FME服务器中,单击通知,然后单击主题监视选项卡。对于要监视的主题,添加同步工具。这将在每次修改文件时发送通知。确保此页面保持打开状态,以便继续主题监视。
在这一点上,所有必要的步骤都已经到位,可以为电子表格数据建立一个优化的备份系统。要对此进行测试,请尝试以下步骤:
打开Google Drive并打开您创建的两个Fusion表文件,项目库存和项目库存文件状态。要做到这一点,右键单击文件,然后用>Google Fusion表打开。
在Excel(project_inventory.xlsx)中打开Excel文档,然后输入新行:
100007检修孔更换49.2755567-123.0576200
保存Excel文件,确保它保存到共享资源文件夹中,文件扩展名为.xlsx。这将触发目录监视协议向同步工具主题发布修改。如果在新的FME服务器窗口中打开作业,项目“inventory\u status.fmw”工作区将运行,然后根据你的时间表,项目“inventory\u sync.fmw”将运行,取决于日程安排如何符合您的更新,为了更新google fusion表,您可能需要等待调度运行两次。根据计划的设置方式和等待秒数参数的设置,最多等待5分钟,使此进程运行。在分配的时间过后,刷新两个Google Fusion表以查看更新。
在Excel中修改项目inventory.xlsx文件时在FME服务器中进行主题监视
使用空闲时间延迟对于在更新文档时保存文档备份很有用。只有当工作区在本地文档中检测到一段时间后发生更改时,工作区才会运行。这释放了宝贵的服务器引擎,仅在需要时运行工作区,而不是按计划运行。创建单独的状态表对于确保预期对本地文件进行更新也很有用,尤其是当文件在多个用户之间共享时。
教程概述:目录观察γ 上一页:目录监视发布者 |当前:具有空闲时间延迟的目录监视发布服务器(高级)
本文是针对FME服务器2017的。有关本文的早期版本,请参阅:教程:目录监视
目录监视发布者允许您让FME服务器监视一个目录,当一个新文件被移到目录中时,包含文件路径的通知消息将发送到主题。在这里,工作区可以使用翻译中的文件。
在这个例子中,我们将在temp共享资源文件夹中创建两个名为“input”和“output”的目录。我们将设置FME服务器来监视新文件的“输入”目录。当上传一个新文件时,将运行父工作区。父工作区将文件传递给子工作区,子工作区将把文件转换为其他格式。然后将此转换的输出复制到“output”目录,并将(可选)发送一封电子邮件,其中包含指向人员列表的下载链接。
打开FME服务器Web界面并登录。在侧边菜单栏上单击资源,然后双击临时资源打开它。单击“新建文件夹”按钮并调用新文件夹转换工具.在转换工具文件夹中,创建两个名为输入和输出
使用输入和输出文件夹转换FME服务器中的刀具目录
从侧菜单栏,转到通知并选择发布选项卡。单击“新建”以创建名称为的新出版物转换工具(标题案例)。选择目录监视作为协议,然后选择要发布的主题以创建名为转换工具(小写)
要查看目录,单击“…”,然后选择温度>转换工具>输入
过滤器,只监视创建操作并将轮询间隔更改为一分钟。单击“确定”创建出版物。
在FME服务器中发布转换刀具参数
主题监视页面允许您查看发布到主题的消息。请注意,您需要一个支持WebSockets的浏览器才能使用此功能。检查浏览器是否支持WebSockets.
回到通知中,单击主题监视选项卡。单击“要监视的主题”下拉菜单,并选择转换工具主题,一旦你选择了主题,只要此页面仍然打开,它将自动开始监视。
使用不同的Web浏览器选项卡,转到“资源”页,并将两个文件上载到先前创建的输入目录(temp>convert_tool>input)。一分钟后,在主题监控页面上,你会看到两条信息,上传的每个文件一个
FME服务器中的主题监控转换工具
处理提供附件(例如电子邮件,目录监视)是使用FeatureReader Transformer读取数据,然后对其进行处理。另一种适合目录监视发布的模式是使用fmeserverjobsubmitter转换器调用子工作区来转换数据;当工作区完成时,父工作区可以将数据复制到目录中,通过电子邮件发送数据链接或更多。
对于这个例子,我们将利用下载部分的zip文件中包含的工作区;即,'easytranslator 2.fmw',和“convert.fmw”。“easyTranslator2.fmw”工作区,(子工作区)将用于将dwg文件转换为形状格式,然后为新创建的文件创建一个zip。“convert.fmw”工作区,(父工作区),然后将压缩文件复制到一个FME服务器资源目录,供用户使用文件复制编写器访问。
注:easytranslator 2.fmw与原有easytranslator.fmw不同,在样本库中提供了FME服务器。
打开easyTranslator2.fmw工作区,并将该工作区作为作业提交者服务发布到示例存储库中的FME服务器。
打开convert.fmw工作区,然后打开fmeserverjobsubmitter变压器的属性。选择与FMEServer的连接或嵌入连接参数。对于存储库选择示例,选择easytranslator2.fmw作为“工作区”。
更新作业参数以匹配以下图像:
参数 | 价值 |
源数据集通用 | 源路径 |
源格式 | 源代码格式 |
目的地格式 | 输出格式 |
目标数据集\通用 | $(fme_sharedesource_temp)/convert_tool/output/@value(_rootname).zip |
通用的,通用的 | 转换数据 |
FME工作台convert.fmw中的fmeserverjobsubmitter参数
单击“确定”保存参数。
将工作区发布到FME服务器,输入连接参数,单击下一步。将工作区发布到示例存储库,单击下一步。对于上传连接,检查您的FME服务器连接,然后单击下一步。在注册服务步骤中,取消选择作业提交者并选择通知服务。通过单击通知服务旁边的“编辑…”按钮配置通知服务:
使用通知服务将convert.fmw发布到fme服务器,并在fme工作台中转换工具主题
您可能会看到或可能不会看到一个警告框出现-将创建新的通知主题-单击“是”接受并继续。
回到FME服务器,转到资源页面,导航到“温度>转换工具>输入”。将提供的一个dwg文件上载到输入目录。等待一分钟左右,然后确认文件现在在temp>convert_tool>output文件夹中。你应该看到一个压缩文件-下载它,你会看到里面有一个形状文件。
注意:如果没有看到zip文件,检查作业是否运行以及状态。转到jobs并单击最新的convert.fmw job以读取作业日志。
将文件上载到FME服务器中的输入后,输出中已转换文件
您可以在FME服务器资源目录中提供一个指向zip文件的链接,并通过电子邮件发送该链接,从而进一步发展。
转到“通知”页上的“主题”选项卡,创建新主题。说出主题电子邮件结果
从“订阅”选项卡,单击“新建”创建新的电子邮件订阅。
在FME服务器中通过电子邮件订阅,设置为与Gmail帐户一起使用。
请看发送电子邮件教程有关设置电子邮件订阅的详细信息。
也,如果你使用Gmail账户,你可能需要为FME服务器创建特定于应用程序的密码或允许不太安全的应用程序访问您的gmail帐户作为大纲本文.
为了将工作区配置为发送电子邮件,必须首先生成有效的FME服务器令牌。在FME服务器的右上角,单击附加到用户名的下拉菜单,然后选择管理令牌。复制列出当前令牌的数字和字母字符串。
管理令牌菜单中的FME服务器令牌
回到convert.fmw工作区的fme工作台。通过右键单击书签并选择“启用书签中的所有对象”,启用电子邮件程序书签中的对象。
在导航器面板中,在“用户参数>已发布参数”下,点击主机名输入FME服务器的主机名,然后点击令牌输入您的FME服务器令牌。
然后点击电子邮件并输入您希望接收通知更新的电子邮件,每次将文件上载到输入文件夹时。
在FME工作台的convert.fmw中要编辑的已发布参数
发布到FME服务器,在注册服务屏幕上,单击通知服务旁边的“编辑…”。展开“作业完成时通知”,将文章设置为有关成功的主题:至电子邮件结果并将post数据从:设置为目标文本文件.完成发布
使用通知服务将convert.fmw发布到fme服务器,并在fme workbench中通过电子邮件发送结果主题
打开FME服务器Web界面>资源>温度>转换工具>输入。上载提供的一个dwg文件输入目录。您应该收到一封电子邮件,其中包含下载zip文件的链接。发送邮件需要几分钟时间,如果5分钟后您还没有收到电子邮件,再次检查作业日志和电子邮件参数。
成功转换通过电子邮件发送的结果
如果您经常从外部获得不同的格式,使用目录监视来转换文件是将文件格式更改为组织有用格式的有效方法。这样,所有文件都将以相同的方式转换,原始文件和新文件将包含在一个位置。接收电子邮件更新,这对于监视文件上载很有用,以及在没有访问FME服务器的权限时下载文件。
此处使用的数据源于温哥华市,不列颠哥伦比亚省。它包含根据开放政府许可证(温哥华)获得许可的信息。
教程概述:目录观察|当前:目录监视发布者|下一步:具有空闲时间延迟的目录监视发布服务器(高级)
FME服务器通知服务能够监视数据存储资源中的文件活动。创建文件后,修改或删除,服务器可以触发一个通知,该通知将向FME服务器主题发布有关活动的消息。此消息将包含有关文件的信息,包括文件路径。从这里,工作区可以获取文件,翻译/转换它,并将结果发送回用户。
目前,这包括以下类型的存储:
你好,
我想创建一个工作流,它将监视表式SQL亚搏在线服务器表的更新,当我的工作台更新了“错误”表时,它会发送电子邮件通知。我的工作区正在有效地处理数据并编写这些错误表。
但是我不确定创建数据库“监听器”的最佳方法,当新数据被添加到错误表中,然后通过FME服务器发送电子邮件通知时,监听器会注意到这一点。
我们已经启动并运行了FME服务器,当工作区无法运行时,它会发送电子邮件通知。但是,在更新SQL Server表时,我们从未发送过电子邮件通知。
有人能提供一些关于如何最好地利用一些链接和一个“监听”数据库更新的示例工作台的建议吗?
谢谢您!
使用Amazon SQS,或者,任何队列服务都是存储不能或不需要立即处理的数据的好方法。它还提供了一些保证,即只有在处理完某个特性之后,它才会从队列中删除。对FME中的SQS有一个很好的概述。在这里.
与前面讨论的两种方法不同(http-post-to-a-topic和websockets)。使用AmazonSQS不需要长期的工作流程或大量的通知(尽管它可以两者兼备!).
FME使与SQS的交互变得容易,通过通知服务(创建SQS发布/订阅)或使用可用的SQS变压器。在本练习中,将使用sqsreceiver转换器接收来自sqs队列的消息。此变压器允许您指定变压器何时停止接收功能,要么:永不,当队列为空或在固定数量的消息之后。这使得运行作业和使用引擎具有更大的灵活性。
每次在postgis中的表中更改一个特征(行)时,node.js接收有关该功能的信息。在javascript文件中,当node.js从postgis接收到一个特性时,它使用awsdk模块将特性推送到AmazonSQS队列中。
var pg=require('pg');var request=require('request');var pgnostring=“postgres://username:password@server:port/database”;var aws=require('aws-sdk');aws.config.update(accesskeyid:'accesskey',secretaccesskey:'secretaccesskey');var sqs=new aws.sqs(region:'region');console.log(“向sqs发送消息”);pg.connect(pgconstring,函数(Err)客户端)if(err)console.log(err);}client.on(“通知”,函数(msg)//console.log(msg);//console.log(json.parse(msg.payload));db_body=json.parse(msg.payload);var sqsmsg=payload:'a message'var sqsparams=message body:json.stringify(db_body),queueurl:'queueurl'sqs.sendmessage(sqsparams,函数(Err)data)if(err)console.log('err',错误;}console.log(data););(});var query=client.query(“listen watchers2”););
完整的工作区在这里可用:SQS-接收器-完成.fmw
有关需求的更多信息,请参见教程的起始页。
修改postgis2sqs.js文件以匹配数据库和AWS SQS连接要求。
在命令提示窗口中,导航到节点可执行文件所在的文件夹。在命令窗口中,键入:node
如果什么都没有发生,那很好。代码中的任何错误都将在此处报告。
在FME工作台中,添加一个sqsreceiver变压器并填写Amazon sqs连接详细信息。将“停止接收”参数设置为“队列为空时”。
现在是时候去编辑了,从Postgis表中创建或删除一些功能。这可以使用FME(在单独的工作空间中)或使用GIS。
创建了一些功能之后,删除或更改您应该能够在AWS SQS管理控制台中看到这些更改:
一旦队列中有了特性,就可以运行工作区。您应该发现从SQS接收到相同数量的特性并将其输出到日志消息中:
因为sqs_content属性是json,JSonFlatener将有助于将每个键转换为一个属性。然后,可以使用attributeManager创建一条消息,用于通知某人功能的更改。
有关作为WebSocket服务器的FME服务器的信息,见WebSocket文档.
每次在postgis中的表中更改一个特征(行)时,node.js接收有关该功能的信息。在javascript文件中,当node.js从postgis接收到一个特性时,它使用WS模块将特性流式传输到FME服务器。
const websocket=require('ws');var pg=require('pg');var request=require('request');var pgconstring=“postgres://username:password@server:port/database”;const ws=new websocket('ws://fmeserver:7078/websocket/',headers:“ws_op”:“打开”,“ws-stream-id”:“postgres”)console.log(“预打开就绪状态”+ws.ready state);ws.on(“打开”,function()ws.send('“ws_op”:“打开”,“ws-stream-id”:“Postgres”,“ws_msg”:“open”'););pg.connect(pgconstring,函数(Err)客户端)if(err)console.log(err);}else console.log('hello');client.on(“通知”,函数(msg)console.log(“msg is”味精;有效载荷;//db_body=json.parse(msg.payload);msgtype=typeof msg.payload;sendmsg2=“”ws_op“:”发送“,“ws-stream-id”:“Postgres”,“ws_msg”:'+msg.payload+'');ws.send(发送msg2);});var query=client.query(“listen watchers2”););
如果正在编辑大量数据,这将非常有用。而不是每次都向主题发送通知并为每个功能触发工作区,WebSockets允许使用一个工作区来处理出现的功能。
WebSockets可以设置为FME服务器中的发布,并且每个消息都发布到一个主题中。
也可以使用WebSocketReceiver转换器接收WebSocket。必须指定相同的参数:WebSocket服务器URL和流ID。
完整的工作区在这里可用:WebSocket-接收器-完成.fmw
有关需求的更多信息,请参见教程的起始页。
修改postgis2ws.js文件以匹配数据库和FME服务器连接要求。
在命令提示窗口中,导航到节点可执行文件所在的文件夹。在命令窗口中,键入:node
如果什么都没有发生,那很好。代码中的任何错误都将在此处报告。
在FME工作台中添加一个创建者,一个WebSocketReceiver和一个记录器。需要设置WebSocketReceiver连接前导码以连接到postgis2ws.js文件中的流,在这个例子中,websocket流是“postgres”。
“ws_op”:“打开”,“ws-stream-id”:[“postgres”]
工作区完成后,运行它。只有一个功能可以从创建者移动到WebSocketReceiver。
您可能会在转换日志中注意到WebSocketReceiver正在等待传入的WebSocket消息。此工作区将继续运行,直到取消为止,并将一直等待消息。
WebSocketReceiver:正在尝试连接到端口“7078”上的主机“localhost”。WebSocketReceiver:已成功连接到端口“7078”上的主机“localhost”。WebSocketReceiver:与远程主机执行握手WebSocketReceiver:握手成功WebSocketReceiver:传输的连接前言WebSocketReceiver:正在等待传入的WebSocket MES圣人…
现在是时候去编辑了,从Postgis表中创建或删除一些功能。这可以使用FME(在单独的工作空间中)或使用GIS。
此工作区可以发布到FME服务器,并作为计划运行或设置。工作区将在作业运行的整个过程中使用一个引擎。这可能比快速跑要便宜,如果有很多功能作为主题信息出现,则会不断减少工作,为每个功能创建一个作业。
当运行作业或调度时,FME服务器现在具有高级属性:
这将允许作业继续,直到取消或取消,直到设置的到期时间。这将允许WebSocketReceiver工作区在工作时间或数据库表上存在活动时运行。
因为输出属性是json,JSonFlatener将有助于将每个键转换为一个属性。然后,可以使用attributeManager创建一条消息,用于通知某人功能的更改。
创建功能时,在postgis中删除或更改的特性应该开始通过工作区进行流式处理。由于日志转换器的存在,发送的消息将显示在翻译日志窗口中。
可以轻松扩展此工作区,以开始对新功能执行验证过程或通知相关方。
每次在postgis中的表中更改一个特征(行)时,node.js接收有关该功能的信息。在javascript文件中,当node.js从postgis接收到一个特性时,它使用请求模块向fme服务器发出一个get请求,请求令牌。带着返回的令牌,node.js能够向fme服务器发出post请求,发布有关已创建的,删除或修改主题的功能。
var pg=require('pg');var request=require('request');var pgconstring=“postgres://username:password@server:port/database”;pg.connect(pgconstring,函数(Err)客户端)if(err)console.log(err);}client.on(“通知”,函数(msg)db_body=json.parse(msg.payload);request.get('http://fmeserver/fmetoken/generate?user=username&password=password&update=false',{JSON:真},功能(错误,响应,body)console.log(response.body);token=response.body;topicurl='http://fmeserver/fmesrest/v3/notifications/topics/sample_topic/message?fmetoken='+token console.log(“主题URL正文为”+topicURL);请求后(topicurl,{Boo:dByBoobe,JSON:真的,功能(错误,响应,body)if(response.statuscode==201)else console.log(db_body);console.log('状态代码:'+response.status code);});(});(});var query=client.query(“listen watchers2”);//PostGIS通道);
有关需求的更多信息,请参见教程的起始页。
在FME服务器中,创建可接收有关数据库表更改通知的主题。
修改postgis2topic.js文件以符合数据库要求。
在命令提示窗口中,导航到节点可执行文件所在的文件夹。在命令窗口中,键入:node
如果什么都没有发生,那很好。代码中的任何错误都将在此处报告。
在FME服务器中,导航到“主题监视”选项卡并开始监视主题。
现在,您需要编辑被监视表中的数据。您可以使用FME或地理信息系统包来实现这一点。当数据被保存或写入数据库时,您应该看到主题消息出现在FME服务器Web UI中。
一旦在Postgis中编辑了某个功能,您就会看到主题消息出现。
您可以观看视频演示在这里.
接下来的几个例子使用postgis和node.js通过各种方法将通知实时传递到FME服务器。所使用的方法将取决于各个业务需求和需要处理的数据量。
它背后的体系结构有一个PostGIS数据库,在一个被“监视”的特定表上有一个触发器和函数。创建行时,删除或修改此函数。该函数提取数据中任何所需的列,并构建一个JSON消息以发送到开放的通道。Nodejs正在监视频道,并可以在它到达时对其进行处理。
以下博客文章记录了这种方法:
Postgres的publish-subscribe特性通过JSON变得更好
在下面的练习中,node.js使用各种方法与FME通信:
你需要这些练习FME服务器,一PostGIS数据库,PG管理,安亚马逊简单队列服务以及J.N.以及各种包装。
NPM软件包在不同的练习中会有所不同:
此.zip文件中使用的SQL和javascript。您需要替换任何凭据或连接信息。
本教程将介绍如何将变更逻辑合并到工作区中,以仅传播那些或新的或更新的特性,不缓存整个数据集。
这将通过创建一个sqlite数据库文件来完成,以存储工作区的名称和上次运行时间。最后一次运行时间将用于与道路工程数据集上的时间戳进行比较,并发送新功能或更改功能的通知。
下载roadworks.fmw,花点时间查看工作区。
工作区正在阅读温哥华所有计划的道路工程,生成JSON消息通知FME服务器。
为了确保工作区正确运行,您需要在FME服务器中创建一个名为roadworks的新主题。在FME服务器的Web UI中,导航到“通知>主题>新建”。
创建主题后,检查roadworks.fmw中的fmeservernotifier连接设置,并通知roadworks主题。
在FME服务器Web UI中,开始监控道路工程主题。
运行工作区。
如果工作区运行正确,对于工作区中处理的每个道路工程功能,您应该看到一条主题消息。
要记录上次运行工作区的时间,我们将创建一个要在此工作区之后运行的工作区(如果成功),以记录工作区和运行时的名称。
在FME服务器中,创建一个名为“roadworkssuccess”的新主题并开始监视它。将roadworks.fmw工作区发布到fme服务器。确保编辑作业提交者属性,将“道路工作成功”作为主题发布到“成功”上。
一旦发布工作区,打开一个新选项卡并导航到FME服务器Web UI以运行工作区。完成后,检查主题监视选项卡。
您应该会看到一条JSON消息出现,以及成功运行的作业的详细信息。
接下来,我们需要创建一个可以解释该JSON并存储工作区名称和运行时的工作区。将JSON复制粘贴到文本编辑器中,并将其保存为JSON文件。这将是下一个工作区的输入。
打开空白工作区,并读取刚刚保存的JSON文件。
然后添加一个sqlite非空间数据库编写器,只创建2个属性-workspacename和lastrun。
在读写器之间添加一个datetimeformatter和一个substringxtractor。
有关DateTimeFormatter属性,请参见以下内容:
有关substringextractor属性,请参见以下内容:
将子字符串连接到workspacename属性,并从time开始连接到lastrun属性。
运行工作区并检查是否成功。
现在我们要将sqlite非空间数据库上传到fme服务器,所以工作区可以访问它。导航到资源>数据。创建一个名为changedetection的新文件夹,并在其中上载sqlite非空间数据库。
选择上载的文件,然后单击“属性”。复制系统路径,因为我们将在工作区中使用它作为目标路径。
在工作区的导航器中,将系统路径粘贴到目标数据集参数:
在JSON阅读器和DateFormatter之间添加一个记录器转换器。这可用于检查工作区作业日志中的正确作业信息。
将此工作区发布到FME服务器。在这个例子中,发布的工作区称为WorkspaceRunRecorder.fmw。
不要用它上传任何数据文件。
向通知服务注册工作区,订阅roadworkssuccess主题并设置参数以将主题消息获取到源JSON。
工作区发布后,转到FME服务器并运行roadworks.fmw。您应该能够从已完成的作业中检查workspacerunrecorder.fmw是否在roadworks.fmw之后运行。
现在我们需要从sqlite非空间数据库读取上一次运行时,以确定是否有任何道路工程数据是新的。
将上次运行工作区的时间与道路工程数据更新的时间进行比较,使用sqlite非空间数据库获取上次运行时间,使用date time计算器计算日期时间的差异。
下载先前上传到FME服务器的roadworks.fmw。
为了测试,在上传到FME服务器之前读取创建的sqlite数据库。把这个连接到代替造物主的特征读取者。
确保FeatureReader属性处理参数设置为“合并发起程序和结果”:
为了确定道路工程数据是否是新的,在现有的datetimecalculator和jContemplator之间添加datetimecalculator和tester。
在DateTimeCalculator中,设置用于计算日期时间间隔的参数,以start datetime作为最后一个运行属性,end datetime作为结果datetime属性。将结果类型设置为秒,并注意结果属性。
在测试器中,测试datetimecalculator的结果是否有任何正结果(>0)。
运行工作区进行测试。
如果成功,将sqlite数据库替换为指向FME服务器位置的路径,与第一个版本的工作区中的路径相同。将工作区重新发布到FME服务器。
现在,工作区应该只通知FME服务器数据集中的新道路工程。您可以通过等待作业运行两次来测试这一点。而不是主题监控页面中出现的所有道路工程,只应出现少数或没有。
这个过程可以作为订阅链接到另一个FME服务器工作区。工作区可用于生成电子邮件,检查地理围栏内的道路工程(如果使用georss feed)或生成道路工程的图像以通知某人。
LittleBitsConnector Transformer具有允许用户“WriteToDevice”的操作。它使用littlebits API将JSON消息发送到cloudbit,打开电路中Cloudbit后面的输出位。
在变压器内部,您可以选择发送输出百分比和持续时间,它将控制连接位上的事件。
输出百分比将控制LED亮度,电机旋转或扬声器音量。
持续时间以毫秒(ms)为单位,并控制事件持续的时间。
打开一个空白工作区并将LittleBitsConnector Transformer下载到画布。在LittleBitsConnector之前连接一个创建者转换器-这将发送一个功能,在运行工作区时启动进程。
打开LittleBitsConnector参数并选择操作“WriteToDevice”。此操作所需的参数为:LittleBitsAccessToken,DeviceID输出百分比和输出持续时间。
当工作区运行时,每个进入变压器的功能都会触发一个小比特事件。您可能希望增加“输出持续时间”,以提供更大的机会看到或听到事件。
在小数位上测试不同的输出位元,看看会发生什么。
当工作区运行时,您应该在输出小数位上看到一个事件。这将取决于cloudbit后面的位。这可能是一个LED灯亮起,声音播放,马达运动,等。
您需要确保在电路中的cloudbit之后有一个输出位。
一订阅在FME中,服务器将收到来自主题的通知。作为回应,它们通过受支持的协议向FME工作区或其他客户机传递消息。
在上一个练习中,创建了一个工作区,该工作区使用LittleBitsConnector转换器通过使用WriteToDevice操作触发LittleBits上的事件。在本练习中,工作区将发布到FME服务器,在那里可以根据其他事件触发工作区。
这是通过向通知服务注册工作区并订阅主题来完成的。当所选主题在FME服务器中触发时,与该主题关联的任何订阅都将运行。在这种情况下,订阅将是LittleBits工作区。
与电子邮件相比,这是一个更令人兴奋和有趣的选择!
向NotificationService注册工作区将自动创建订阅。然而,您还可以通过FME服务器的Web UI创建订阅:
按照中的说明操作'发布到LittleBits CloudBit'创建一个可以在小数位上触发事件的工作区。
一旦你有了一个可以发布到LittleBits的工作区,这可以转换为一个FME服务器订阅。然后,这个订阅将由FME服务器中的一个主题触发。
在FME服务器的Web UI中,创建一个名为JobOutcomelittleBits的新主题。
从工作台开始,将使用LittleBitsConnector中的“WriteToDevice”操作的工作区发布到FME服务器。在通知服务中注册它。编辑通知服务属性并订阅您刚刚创建的主题:joboutcomelittlebits。
在工作台上,创建将失败的新工作区。它应该由创造者组成,减速器和终止器。在减速器内选择适当的延迟。
将工作区发布到FME服务器,确保作业提交者服务的属性设置为发布到joboutcomelittlebits。
从FME服务器运行故障工作区。
当工作区失败时,这将向主题发送消息。然后该主题触发任何订阅,导致工作区调用LittleBits。
工作区(故障工作区)->主题(JobOutcomeLittleBits)->订阅工作区(LittleBits工作区)
当作业失败时,您应该发现事件发生在小部分上。这可能是一个LED灯亮起,声音播放,马达运动,等。
注意:您的FME服务器将需要外部访问才能进行此项工作。您需要确保在电路中的cloudbit之前有一个输入位。
对于视频演示,见变压器文件.
LittleBits有一个API,它允许用户为他们的小部分设置一个Webhook。这允许设备将有关事件的消息发布到用户提供的端点URL。
用于FME服务器或FME云,这可能是主题文章的URL。要访问主题文章URL,通过导航到FME服务器的Web界面中的“通知>主题>新建”来创建主题。为了避免主题名称冲突,添加。
展开“高级”部分。这将允许您查看两个不同的发布URL。在此示例中,将使用“作为订阅服务器内容的消息”URL。发布URL将采用以下格式:
http(s):/ /: /fmerest/v3/通知/主题/ /消息/订阅内容?FMeooKe=
在空白工作区中添加创建者,一个小插接器和一个记录器。
要用LittleBits注册URL端点,从FME服务器Web UI复制的日志URL需要设置为LittleBitsConnector内的服务器Webhook参数。将LittleBits操作设置为CreatePublisation,并确保设置了正确的设备ID和访问令牌。
运行工作区并检查日志文件以确保已正确设置。
在FME服务器Web UI中,开始监视在本练习开始时创建的主题。当小数位上发生事件时,主题消息应在主题监视中可见。
每次你触发一个输入-按下一个按钮,发出一些声音等,这将向该cloudbit的所有注册端点发送有关事件的JSON消息。
FME工作台可用于构建一个工作区,该工作区将检查数据集或服务以获得所需的结果,已更改的值或符合特定条件的值。然后可以在FME服务器上定期运行这些程序,按计划进行。
如果返回数据,已标识的更改或满足条件工作区可以触发事件(订阅)。这可能是数据处理或发送通知。
在本教程中,我们将使用OpenWeatherMapForCaster检查天气并向FME服务器发送有关当前条件的通知。
请下载OpenWeathermapForecaster变压器从FME轮毂。您需要注册来自的API密钥OpenWebStand映射.
该变压器采用点几何来返回天气预报,因此,您需要在FME中创建一个感兴趣的点(您需要天气预报的地方)。
一些有用的坐标可能是:
会议中心(FME UC位置):lat:49.2892260,伦敦:123.1169553
亚搏在线安全软件办公室:lat:49.138036 lon:-122.857629
你也可以使用谷歌地图找到你自己的纬度/经度坐标。
通过将lon值输入“x值”,将lat值输入“y值”,将坐标输入创建者。为此,您需要单击“几何对象:点”旁边的“…”。
运行工作区并检查输出。
在OpenWeatherMapForecaster中,将天气设置为“当前”,然后输入API键。
现在我们要创建一个通知消息。添加一个attributeCreator,并使用OpenWeatherMapForecaster的输出构造消息。
例如:
新属性:天气消息
属性值:现在天气是@value(天气描述)。云量为@value(clouds)%。
我们需要找个地方来发送这个信息,所以我们将把它发送到一个关于FME服务器的主题。打开FME服务器的Web UI,然后转到通知>主题。添加新主题,称为天气警报。您还应该看到主题监视选项。选择天气警报主题,然后按播放按钮开始监视。不要关闭此选项卡,在运行完天气工作区后,我们想回到这里。
回到工作台,添加一个fmeservernotifier并打开参数。添加到FME服务器的连接,选择天气警报主题,对于内容,选择天气信息属性。
运行工作区。一旦完成,返回在浏览器中打开的通知页面。您应该看到您的消息出现在主题监控下。
一脉相承,您是否可以调整工作区以检查未来天气预报,并根据不同的天气事件进行通知?
提示:查看weatherupdates-complete.fmw
您应该看到在attributeCreator中构建的消息在FME服务器中显示为主题消息,当监视天气警报主题时。
您可以创建一个由这个主题触发的订阅,它可以提醒某人即将到来的天气状况,例如发送电子邮件或短信息。
加载数据的最简单方法之一是批量下载和加载。然而,这可能不是最好的方法。
如果您有需要定期更新的数据集,或者由于数据更改或实时数据更改而需要更新的数据集,是否有更有效的方法将更改传播到数据集?
如果要删除和加载数据,需要多长时间进行处理,它们对其他需要这些数据的服务或用户有何影响?
FME有更好的方法来处理数据变更。
FME中的某些格式允许您控制正在写入的数据的特征操作。这些操作可以是:插入,更新,删除或取消插入。这些可以控制在功能类型级别,或在按功能基础。
将操作设置为功能类型级别,打开特征类型参数并选择所需的操作。
将操作设置为按功能基础,创建一个名为fme_db_operation的新属性,并将该值设置为正确的,支持的操作。
任何依赖现有功能的操作都需要选择具有唯一值的列,这样编写器就可以将特性与现有的行相匹配。
这些选项还可以与表或工作表处理选项一起使用。这些可能包括:使用现有的,根据需要创建,删除并创建或截断现有的。
我应该选择什么操作或处理选项?
这取决于:
您是否担心数据写入的速度?
您是否担心交易速度/交易量?
你的数据重要吗?
是否需要覆盖数据?
使用现有的:
如果已设置现有表并希望插入新行,则使用,或者更新或删除现有行。
根据需要创建:
如果插入数据且不确定表是否已存在,则使用。如果确实如此,FME会给它写信。如果没有,FME可以创建它。
删除并创建:
如果需要删除任何现有数据并删除表结构,请使用,可能添加或删除列,更改数据类型等。
截断现有:
如果要删除所有现有数据,但保留表格结构。
实时影响:
如果要删除或截断表,此选项将比插入/更新/删除选择功能慢,因为需要额外的时间删除所有功能并重新写入。由于数据行很少,这次可能无关紧要,但对于更大的数据集,这将更加明显。
你需要一个谷歌帐号来完成这个练习。
谷歌工作表数据加载.fmwt
演示这些不同功能的一个简单方法是使用Google工作表,这将允许您查看正在写入的工作表。
试试看:
您需要替换Google Sheets Writer,以便它使用您的凭证进行连接。在google sheets参数中,您需要设置刷新令牌(将提示您登录到您的google帐户)和电子表格名称或url(现有google sheet的url)。
工作区应如下所示:
确保仅启用取样器,你可以在工作区运行时看到谷歌的工作表。
当FME写出单元格时,您应该能够看到Google的工作表。正如Google Sheets Writer在单元基础上编写的那样,而不是特征/行(如数据库),写的属性和特性越多,写的时间就越长。
如果您禁用了取样器并从PostAddress Reader功能类型发送功能,你应该直接看到,写出来要花很长时间。您需要将工作表处理选项设置为“截断现有”。
如果有什么导致工作区无法写入,可能会留下丢失或不完整的数据集。如果在截断和写入过程中数据在一段时间内不可用,您还可能会发现尝试访问存储在那里的数据的其他系统或服务是否会产生不正确的结果。
有了谷歌表,更新或删除现有行的选项基于行号。
启用采样器并打开随机采样。在取样器前面加一个计数器。在Google Sheets Writer功能类型中,将功能操作设置为“fme_db_operation”,将行号属性设置为“u count”属性。您应该看到工作表处理选项更改为“使用现有”。
采样输出采样端口后,添加一个attributeCreator,并创建值为delete的fme_db_operation属性。对于非采样输出端口,添加attributeCreate并创建值为update的fme_db_operation属性。将两个属性创建器的输出发送到Google Sheets Writer功能类型。
如果你在FME运行的时候看谷歌的表单,当FME写入时,您应该看到一些行消失,一些行值改变。