span8
span4
使用Amazon SQS或任何队列服务是存储不能或不需要立即处理的数据的好方法。它还提供了一些保证,即某个特性只有在被处理之后才会从队列中删除。FME中SQS的一个很好的概述是可用的在这里。
与前面讨论的两种方法(HTTP POST to a Topic和WebSockets)不同,使用Amazon SQS不需要长期的作业处理或大量的通知(尽管它可以两者都做!)
通过通知服务(创建SQS发布/订阅)或使用可用的SQS转换器,FME可以轻松地与SQS交互。在本练习中,SQSReceiver转换器将用于接收来自SQS队列的消息。这个转换器允许您指定转换器何时停止接收特性,或者:从不,当队列为空时,或者在固定数量的消息之后。这使得运行作业和使用引擎更加灵活。
在PostGIS中,每当一个特性(行)在表中被更改时,Node.js都会接收关于该特性的信息。在javascript文件中,当Node.js从PostGIS接收到一个特性时,它使用aws-sdk模块将特性推送到一个Amazon SQS队列中。
var pg = require ('pg');var请求= require('request');var pgConString = "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'});控制台。log("Sending messages to SQS");pg.connect(pgConString, function(err, client) {if(err) {console.log(err);}客户端。on('notification', function(msg) { //console.log(msg);/ / console.log (JSON.parse (msg.payload));db_body = JSON.parse (msg.payload);var sqsmsg ={有效载荷:'a message'};var sqsParams = {MessageBody: JSON.stringify(db_body), QueueUrl: ' QueueUrl '};sqs。sendMessage(sqsParams, function(err, data) { if (err) { console.log('ERR', err);}console.log(数据);});});var查询= client。query("LISTEN watchers2");});
完整的工作空间在这里:sqs-receiver-complete.fmw
有关需求的更多信息,请参见教程的开始页面。
修改postgis2sq .js文件以匹配您的数据库和AWS SQS连接需求。
在命令提示窗口中,导航到节点可执行文件所在的文件夹。在命令窗口中键入:node
如果什么都没发生,那很好。代码中的任何错误都会在这里报告。
在FME工作台中,添加一个SQSReceiver转换器并填写Amazon SQS连接细节。设置停止接收参数为“当队列为空”。
现在是时候从PostGIS表中编辑、创建或删除一些特性了。这可以使用FME(在单独的工作空间中)或使用GIS。
创建、删除或更改某些功能后,您应该能够在AWS SQS管理控制台中看到这些更改:
一旦队列中有了特性,就可以运行工作区。你应该发现相同数量的功能是从SQS接收到输出到日志消息:
因为sqs_content属性是JSON,所以jsonflater有助于将每个键转换成一个属性。然后可以使用AttributeManager创建一条消息,该消息可用于通知某人特性的更改。
©2019安全亚搏在线软件公司法律