SQS - 交货延迟30分钟

时间:2015-08-07 15:29:42

标签: amazon-web-services amazon-sqs

从SQS的文档中,我们可以配置消息的最大延迟时间为15分钟 - http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html

假设我需要隐藏一天的消息,模式是什么? 例如。我想模仿每天的cron来做一些动作。

由于

4 个答案:

答案 0 :(得分:8)

最简单的方法如下:

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace std;
using namespace cv;

int main() {

    int FPS = 10;
    int nframes;
    double start, now;

    VideoCapture vcap(0);
    if(!vcap.isOpened()) {
            cout << "Error opening video stream or file" << endl;
            return 0;
    }

    vcap.set(CV_CAP_PROP_FOURCC,CV_FOURCC('M','J','P','G'));

    int frame_width = vcap.get(CV_CAP_PROP_FRAME_WIDTH);
    int frame_height = vcap.get(CV_CAP_PROP_FRAME_HEIGHT);
    VideoWriter video("out.avi",CV_FOURCC('M','J','P','G'), FPS, Size(frame_width,frame_height), false);

    namedWindow("Main",CV_WINDOW_AUTOSIZE); //create a window called

    // Start time
    start = (double)getTickCount();
    for(;;) {
            Mat frame, gray;
            vcap >> frame;
            cvtColor(frame, gray, cv::COLOR_BGR2GRAY);
            video << gray;
            imshow("Main", gray);

            char c = (char)waitKey(2);
            if( c == 27 ) break;

            ++nframes;
            if (nframes==100) {
                    now = (double)getTickCount();
                    cout << "FPS: " << ++nframes/(now-start)*getTickFrequency() << endl;
                    start = now;
                    nframes = 0;
            }
    }
    video.release();
    return 0;
}

你的工作人员

SQS.push_to_queue({perform_message_at : "Thursday November 2022"},delay: 15 mins)

基本上将消息推送回具有最大延迟的队列,并仅在处理时间小于当前时间时处理它。

HTH。

答案 1 :(得分:3)

可见性超时最长可达12小时。我认为你可以在你处理消息的地方一起破解,但不要删除它,下次处理时它是12小时。所以队列中有一条消息,可见性超时为12小时。这让你有12个小时的cron。

&#XA;

答案 2 :(得分:0)

两个想法。

  1. 未测试。也许发布到没有SQS队列的SNS主题。需要交付时,请将队列订阅到主题。 (我没有这样做,我不确定这是否会按预期工作)
  2. 将邮件作为文件推送到中央存储(如S3)。创建一个查看时间创建时间戳的worker,并决定是否将它们发布到队列。如果创建&gt; = 1d前,则发布。

答案 3 :(得分:0)

Cloudwatch可能是一种更好的方法。您可以在计时器中使用createEvent API,并让其触发lambda函数或对接下来发生的事情的API调用。

另一种方法是在AWS step函数中使用“等待”实用程序。

https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-wait-state.html

在任何情况下,除非您非常确定自己不需要超过15分钟的时间,否则SQS后门添加延迟似乎是很棘手的。