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-接收机complete.fmw
有关需求的更多信息,请参见教程的开始页面。
修改postgis2sq .js文件以匹配您的数据库和AWS SQS连接需求。
在命令提示窗口中,导航到节点可执行文件所在的文件夹。在命令窗口中键入:node
如果没有反应,那是很好的。代码中的任何错误都将在这里得到报道。
在FME工作台,亚马逊SQS连接细节添加SQSReceiver变压器和填充。将停止接收参数“当队列为空”。
现在是从PostGIS的表去和编辑,创建或删除某些功能的时间。这可以是使用FME(在一个单独的工作区),或者使用GIS。
一些功能已经创建完成后,删除或更改你应该能够看到在AWS SQS管理控制台这些变化:
一旦有队列功能,您可以运行工作空间。你应该找到相同数量的从SQS和输出到日志信息接收功能:
由于sqs_content属性是JSON,一个JSONFlattener将有助于把每个键为属性。然后AttributeManager可以用来创建可以用来通知的功能所做的更改某人的消息。
©2019安全亚搏在线软件公司法律