自学内容网 自学内容网

aws(学习笔记第十七课) SQS Amazon Simple Queue Service服务

aws(学习笔记第十七课)

  • SQS Amazon Simple Queue Service服务

学习内容:

  • 使用SQS Amazon Simple Queue Service服务
  • 整体代码(nodejs的通常工程)
  • 代码动作

1. 使用SQS Amazon Simple Queue Service服务

  1. 利用应用程序来学习SQS
    在这里插入图片描述
    • 创建S3
      $ aws s3 mb s3://urs2png-20241211-finlay
      $ aws s3 website s3://urs2png-20241211-finlay --index-document index.html --error-document error.html
      
    • 创建SQS
      aws sqs create-queue --queue-name url2png
      
      在这里插入图片描述
  2. 整体代码(nodejs的通常工程)
    • config.json
      QueueUrl替换成上面创建的SQS
      Bucket替换成上面创建的S3 bucket的名字
      {
      "QueueUrl": "https://sqs.ap-northeast-1.amazonaws.com/081353481087/url2png",
      "Bucket": "urs2png-20241211-finlay"
      }
      
    • package.json 定义依赖关系
      {
              "dependencies": {
                      "aws-sdk": "2.1.18",
                      "node-uuid": "1.4.3",
                      "node-webshot": "1.0.4",
                      "phantomjs-prebuilt": "2.1.16"
              },
              "private": true
      }
      
    • index.js (生产者 producer)
      it send url of png to sqs on aws.
      var AWS = require('aws-sdk');
      var uuid = require('node-uuid');
      var config = require('./config.json');
      var sqs = new AWS.SQS({
              "region": "ap-northeast-1"
      });
      
      if (process.argv.length !== 3) {
              console.log('URL missing');
              process.exit(1);
      }
      
      var id = uuid.v4();
      var body = {
              "id": id,
              "url": process.argv[2]
      };
      
      sqs.sendMessage({
              "MessageBody": JSON.stringify(body),
              "QueueUrl": config.QueueUrl
      }, function(err) {
              if (err) {
                      console.log('error', err);
              } else {
                      console.log('PNG will be soon available at http://' + config.Bucket + '.s3-website-us-east-1.amazonaws.com/' + id + '.png');
              }
      });
      
    • worker.js 消费者(consumer
      receive message of sqs on aws every 1 second.
      var fs = require('fs');
      var AWS = require('aws-sdk');
      var webshot = require('node-webshot');
      var config = require('./config.json');
      var sqs = new AWS.SQS({
      "region": "us-east-1"
      });
      var s3 = new AWS.S3({
      "region": "us-east-1"
      });
      
      function acknowledge(message, cb) {
      var params = {
      "QueueUrl": config.QueueUrl,
      "ReceiptHandle": message.ReceiptHandle
      };
      sqs.deleteMessage(params, cb);
      }
      
      function process(message, cb) {
      var body = JSON.parse(message.Body);
      var file = body.id + '.png';
      webshot(body.url, file, function(err) {
      if (err) {
      cb(err);
      } else {
      fs.readFile(file, function(err, buf) {
      if (err) {
      cb(err);
      } else {
      var params = {
      "Bucket": config.Bucket,
      "Key": file,
      "ACL": "public-read",
      "ContentType": "image/png",
      "Body": buf
      };
      s3.putObject(params, function(err) {
      if (err) {
      cb(err);
      } else {
      fs.unlink(file, cb);
      }
      });
      }
      });
      }
      });
      }
      
      function receive(cb) {
      var params = {
      "QueueUrl": config.QueueUrl,
      "MaxNumberOfMessages": 1,
      "VisibilityTimeout": 120,
      "WaitTimeSeconds": 10
      };
      sqs.receiveMessage(params, function(err, data) {
      if (err) {
      cb(err);
      } else {
      if (data.Messages === undefined) {
      cb(null, null);
      } else {
      cb(null, data.Messages[0]);
      }
      }
      });
      }
      
      function run() {
      receive(function(err, message) {
      if (err) {
      throw err;
      } else {
      if (message === null) {
      console.log('nothing to do');
      setTimeout(run, 1000);
      } else {
      console.log('process');
      process(message, function(err) {
      if (err) {
      throw err;
      } else {
      acknowledge(message, function(err) {
      if (err) {
      throw err;
      } else {
      console.log('done');
      setTimeout(run, 1000);
      }
      });
      }
      });
      }
      }
      });
      }
      
      run();
      

3. 代码动作

  1. 安装nodejs
    由于一些包的原因,这个nodejs程序只能运行在nodejs@v11.15.0,因此事先下载。
    nodejsv11.15.0
    在这里插入图片描述
  2. 执行npm install
    npm install
    
  3. 准备图片
    示例图片URL
  4. 运行程序
    • 首先运行work.js监视aws sqs
      node work.js
      
      在这里插入图片描述
    • 之后运行index.js
      node index.js "https://pics1.baidu.com/feed/f9dcd100baa1cd11d2771efce7c9a6f8c1ce2d0c.jpeg@f_auto?token=e630acf36ce316be5abcb2652d6971b3&s=110AA3F04A32B6C842AFE716030040DF"
      
      在这里插入图片描述
      可以看到work.js这边显示done,表明已经接收到urlmessage,处理成文件之后传送到了S3 bucket
    • 最后检查S3 bucket
      在这里插入图片描述

原文地址:https://blog.csdn.net/sealaugh1980/article/details/144310622

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!