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
      在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/938062.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

qt-C++笔记之父类窗口、父类控件、对象树的关系

qt-C笔记之父类窗口、父类控件、对象树的关系 code review! 参考笔记 1.qt-C笔记之父类窗口、父类控件、对象树的关系 2.qt-C笔记之继承自 QWidget和继承自QObject 并通过 getWidget() 显示窗口或控件时的区别和原理 3.qt-C笔记之自定义类继承自 QObject 与 QWidget 及开发方式…

VMware ubuntu12.04怎么设置静态IP联网

记得刚开始学习嵌入式就是从ubuntu12.04的环境开始学习的C语言,当时没有弄清楚怎么设置静态IP联网,现在写一篇文章。 1.首先,关闭ubuntu的网络; 2.电脑使用的是wifi,将VMware桥接到该网卡上; 3.在虚拟机设置里面选择桥…

计算机视觉中的图像滤波与增强算法

摘要: 本文深入探讨了计算机视觉领域中的图像滤波与增强算法。首先介绍了图像滤波与增强的基本概念和重要性,随后详细阐述了线性滤波算法中的均值滤波和高斯滤波,以及非线性滤波算法中的中值滤波和双边滤波,包括它们的原理、数学模…

AI大模型学习笔记|神经网络与注意力机制(逐行解读)

来源分享链接:通过网盘分享的文件:详解神经网络是如何训练的 链接: https://pan.baidu.com/s/12EF7y0vJfH5x6X-0QEVezg 提取码: k924 内容摘要:本文深入探讨了神经网络与注意力机制的基础,以及神经网络参数训练的过程。以鸢尾花数…

腾讯云系统盘扩容

在腾讯云申请空间后,只要执行三行命令 云硬盘 在线扩展系统盘分区及文件系统-操作指南-文档中心-腾讯云 安装工具 yum install -y cloud-utils-growpart 给/eav/vda1扩分区 LC_ALLen_US.UTF-8 growpart /dev/vda 1 挂载扩容 ext4 文件系统 resize2fs /dev/vda1 …

【控制系统】深入理解反步控制(Backstepping) | 反步法控制器原理与应用实例解析(附Matlab/Simulink仿真实现)

💯 欢迎光临清流君的博客小天地,这里是我分享技术与心得的温馨角落 💯 🔥 个人主页:【清流君】🔥 📚 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 📚 🌟始终保持好奇心&…

构建树莓派温湿度监测系统:从硬件到软件的完整指南

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

人工智能系统

介绍人工智能 的基础书 点击这里 1.1 深度学习的历史,现状与发展 本章将介绍深度学习的由来,现状和趋势,让读者能够了解人工智能系统之上的深度学习负载的由来与趋势,为后面理解深度学习系统的设计和权衡形成初步的基础。我们在后…

NVR小程序接入平台EasyNVR设置预置位显示“参数错误”的解决方法

视频监控技术在现代社会中的应用已经变得越来越广泛,从城市安防到家庭安全,从交通管理到商业监控,其作用无处不在。随着科技的不断进步,视频监控不仅提高了安全性,还带来了许多新的机遇和挑战。 近期,我们收…

下载红米Note 9 Pro5G对应的LineageOS代码下载及编译

构建 LineageOS 进入网站:Info about gauguin | LineageOS Wiki,点击:Build for yourself,里面有详细的教程,我这里就按照Note 9 Pro 5G来。 机器环境 Ubuntu环境为:20.04.6LinagesOS版本:21-…

如何在 Ubuntu 22.04 上安装 Strapi CMS

简介 Strapi 是一个使用 JavaScript 构建的开源、无头内容管理系统 (CMS)。与其他无头 CMS 一样,Strapi 开箱即用不带前端。它使用 API 作为其前端,允许你使用流行的框架(如 React 和 Next.js)构建网站。Strapi 基于插件系统&…

Java:集合(List、Map、Set)

文章目录 1. Collection集合1-1. 迭代器遍历方式1-2. 通过for循环进行遍历1-3. forEach遍历 2. List集合2-1. ArrayList底层实现原理2-2. LinkedList底层实现原理 3. Set集合3-1. HashSet 底层实现3-2. LinkedHashSet 底层实现3-3. TreeSet 4. Collection集合->总结5. Map集…

私有云dbPaaS为何被Gartner技术成熟度曲线标记为“废弃”?

当云计算席卷而来,基于云基础设施的数据库部署也改变了数据库。在传统的私有化部署(On-premises)和公有云部署(Public Cloud)之间,不断融合的混合IT(Mixed IT)形式成为最常见的企业级…

ElementPlus Table 表格实现可编辑单元格

通过基础的Table表格来实现单元格内容的可编辑 1.首先定位到需要编辑的列&#xff0c;替换el-table-column <el-table-column label"Editable Column" width"300"><template #default"{ row, column, $index }"><el-inputsize&qu…

《数据结构》(408代码题)

2009 单链表&#xff08;双指针&#xff09; 分析&#xff1a;首先呢&#xff0c;给我们的数据结构是一个带有表头结点的单链表&#xff0c;也不允许我们改变链表的结构。链表的长度不是直接给出的啊&#xff0c;所以这个倒数也很棘手。那我们该如何解决这个“k”呢&#xff0c…

Qt控件的盒子模型,了解边距边线和内容区

这篇专门讲讲一个控件在绘制时的视觉样式。我们平常在对控件设置样式时&#xff0c;需要设置控件的一些外边距&#xff0c;内边距&#xff0c;边线&#xff0c;还有文字内容&#xff0c;贴上图片等。那么对于一个控件&#xff0c;到底怎么实现这些设置的呢&#xff1f; 先看下面…

第十二课 Unity 内存优化_内存工具篇(Memory)详解

内存&#xff08;Memory&#xff09; unity 内存部分也是优化过程中非常重要的一个环节&#xff0c;也会影像渲染过程中的同步等待与带宽问题。因此内存的优化也可能会给我们渲染开销带来精简&#xff0c;今天我们先来了解unity中的内存与使用到的内存工具。 Unity中的内存 托…

windows mysql5.7设置慢查询参数

如果没有my.ini,可以复制一份my-default.ini改个名字就可以。 注意重启mysql服务 mysql5.7 直接在配置文件my.ini 中写如下配置 log_slow_admin_statements ON log_slow_slave_statements ON slow_query_log 1 //开启慢查询 &#xff08;很多博客说on off ,我本机my…

STM32F407+LAN8720A +LWIP +FreeRTOS ping通

使用STM32CUBEIDE自带的 LWIP和FreeROTS 版本说明STM32CUBEIDE 操作如下1. 配置RCC/SYS2. 配置ETH/USART3. 配置EHT_RESET/LED4. 配置FreeRTOS5. 配置LWIP6. 配置时钟7. 生成单独的源文件和头文件,并生成代码8. printf重定义9. ethernetif.c添加lan8720a复位10. MY_LWIP_Init …

【电脑技巧】将键盘的方向键映射为alt+i、k、j、l

最近感觉方向键太远了&#xff0c;想找个方法修改键盘映射&#xff0c;有几种方式可以实现 使用powertoys的键盘映射&#xff08;软件太大了&#xff0c;只为键盘映射不值得下这个&#xff09;使用autohotkey&#xff08;通过脚本的方式&#xff0c;可以打包成exe文件&#xf…