标签: amazon-sqs

使用Amazon SQS实现"完全一次交付"行为的良好做法是什么?

根据文件:

问:我会收到多少次邮件?

Amazon SQS旨在为其队列中的所有消息提供"至少一次"传递.虽然大多数情况下每条消息只会传递给您的应用程序一次,但您应该设计系统,以便多次处理消息不会产生任何错误或不一致.

有没有什么好的做法可以实现一次性交付?

我正在考虑使用DynamoDB "条件写入"作为分布式锁定机制但是......任何更好的主意?


一些参考这个主题:

amazon-sqs

22
推荐指数
2
解决办法
7283
查看次数

无法在SQS FIFO上触发lambda

我试图触发lambda执行来执行FIFO队列上的项目.除了民意调查,我们还有什么方法可以实现这一目标?我们刚刚了解到,我们无法直接从FIFO队列触发lambda执行,而FIFO队列目前仅支持标准队列.我还了解到我们不能将SNS主题订阅到FIFO队列 - 这也仅在标准队列上受支持.

在亚马逊发布更新之前,有没有人为此找到解决方法?

amazon-sqs amazon-web-services aws-lambda

22
推荐指数
1
解决办法
7119
查看次数

在Laravel的工匠队列中捕获ProcessTimedOutException:listen

我们有一堆SQS工作,我们使用Laravel来监视和处理php artisan queue:listen.

定期,有几分钟的短暂和SQS超时.发生这种情况时,请queue:listen使用以下消息中止:

[Symfony\Component\Process\Exception\ProcessTimedOutException]                                                                                             
  The process "php artisan queue:work
    --queue="https://sqs.us-west-2.amazonaws.com/*******/queue"
    --delay=0 --memory=128 --sleep=3 --tries=0 -env=production"
  exceeded the timeout of 60 seconds.
Run Code Online (Sandbox Code Playgroud)

我已经尝试过处理异常app/start/global.php,或者app/start/artisan.php:

App::error(function(Symfony\Component\Process\Exception\ProcessTimedOutException $exception) {
    // do nothing
});
Run Code Online (Sandbox Code Playgroud)

不幸的是,异常仍然发生,我queue:listen仍然死了.

如何捕获此异常并忽略它以进行重试?

php amazon-sqs laravel laravel-4

21
推荐指数
1
解决办法
3308
查看次数

Spring Cloud - SQS - 此wsdl版本不存在指定的队列

我试图让spring cloud与使用自动配置的消息一起工作.

我的属性文件包含:

cloud.aws.credentials.accessKey=xxxxxxxxxx
cloud.aws.credentials.secretKey=xxxxxxxxxx

cloud.aws.region.static=us-west-2
Run Code Online (Sandbox Code Playgroud)

我的Configuration类如下:

@EnableSqs
@ComponentScan
@EnableAutoConfiguration
public class Application {


public static void main(String[] args) throws Exception {
    SpringApplication.run(Application.class, args);
  }
}
Run Code Online (Sandbox Code Playgroud)

我的听众课程:

@RestController公共类OrderListener {

@RestController
public class OrderListener {

    @MessageMapping("orderQueue")
    public void orderListener(Order order){

        System.out.println("Order Name " + order.getName());
        System.out.println("Order Url" + order.getUrl());

    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行这个.我收到以下错误:

org.springframework.context.ApplicationContextException: Failed to start bean        'simpleMessageListenerContainer'; nested exception is     org.springframework.messaging.core.DestinationResolutionException: The specified queue does not exist for this wsdl version. (Service: AmazonSQS; Status Code: 400; Error Code: AWS.SimpleQueueService.NonExistentQueue; Request …
Run Code Online (Sandbox Code Playgroud)

spring annotations amazon-sqs amazon-web-services spring-cloud

21
推荐指数
3
解决办法
4万
查看次数

如何使来自 Lambda 的批处理中的特定 SQS 消息失败?

我有一个带有 SQS 触发器的 Lambda。当它被击中时,来自 SQS 的一批记录进来(我认为通常一次大约 10 个)。如果我从处理程序返回失败的状态代码,将重试所有 10 条消息。如果我返回成功代码,它们都会从队列中删除。如果这 10 条消息中有 1 条失败,而我只想重试那一条怎么办?

exports.handler = async (event) => {

    for(const e of event.Records){
        try {
            let body = JSON.parse(e.body);
            // do things
        }
        catch(e){
            // one message failed, i want it to be retried
        }        
    }

    // returning this causes ALL messages in 
    // this batch to be removed from the queue
    return {
        statusCode: 200,
        body: 'Finished.'
    };
};
Run Code Online (Sandbox Code Playgroud)

我是否必须手动将该消息重新添加回队列?或者我可以从我的处理程序返回一个状态,指示一条消息失败并应该重试?

amazon-sqs amazon-web-services node.js aws-lambda

20
推荐指数
2
解决办法
6362
查看次数

Spring Cloud AWS SQS 无法在本地连接到服务端点

我正在尝试在我正在处理的项目中使用 Spring Cloud 的 AWS SQS。目前,我仅在我的开发机器上本地运行该应用程序。因此,我想要的是连接到 AWS 上的 SQS,而不必将我的应用程序部署到 EC2 实例。

但是,似乎 Spring Cloud 的 AWS 包中使用的 AWS SDK 将尝试通过元数据进行身份验证并希望解析 169.254.169.254/latest/meta-data/instance-id. 由于我仍在本地运行应用程序,因此无法解析端点并引发错误:

2019-12-29 16:38:27.420  WARN 22462 --- [  restartedMain] com.amazonaws.util.EC2MetadataUtils      : Unable to retrieve the requested metadata (/latest/meta-data/instance-id). Failed to connect to service endpoint: 

com.amazonaws.SdkClientException: Failed to connect to service endpoint: 
    at com.amazonaws.internal.EC2ResourceFetcher.doReadResource(EC2ResourceFetcher.java:100) ~[aws-java-sdk-core-1.11.699.jar:na]
    at com.amazonaws.internal.EC2ResourceFetcher.doReadResource(EC2ResourceFetcher.java:70) ~[aws-java-sdk-core-1.11.699.jar:na]
    at com.amazonaws.internal.InstanceMetadataServiceResourceFetcher.readResource(InstanceMetadataServiceResourceFetcher.java:75) ~[aws-java-sdk-core-1.11.699.jar:na]
    at com.amazonaws.internal.EC2ResourceFetcher.readResource(EC2ResourceFetcher.java:62) ~[aws-java-sdk-core-1.11.699.jar:na]
    at com.amazonaws.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:400) ~[aws-java-sdk-core-1.11.699.jar:na]
    at com.amazonaws.util.EC2MetadataUtils.getData(EC2MetadataUtils.java:369) ~[aws-java-sdk-core-1.11.699.jar:na]
    at org.springframework.cloud.aws.context.support.env.AwsCloudEnvironmentCheckUtils.isRunningOnCloudEnvironment(AwsCloudEnvironmentCheckUtils.java:38) ~[spring-cloud-aws-context-2.2.1.RELEASE.jar:2.2.1.RELEASE]
    at org.springframework.cloud.aws.context.annotation.OnAwsCloudEnvironmentCondition.matches(OnAwsCloudEnvironmentCondition.java:37) ~[spring-cloud-aws-context-2.2.1.RELEASE.jar:2.2.1.RELEASE]
    at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:108) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE]
    at …
Run Code Online (Sandbox Code Playgroud)

java amazon-sqs amazon-web-services spring-boot spring-cloud

20
推荐指数
6
解决办法
2万
查看次数

在AWS中扩展聊天的想法?

我正在努力想出在AWS中扩展聊天服务的最佳解决方案.我想出了几个潜在的解决方案:

  1. Redis Pub/Sub - 当用户与服务器建立连接时,服务器订阅该用户的ID.当有人向该用户发送消息时,服务器将使用用户的id对该频道执行发布.用户连接的服务器将接收消息并将其下推到相应的客户端.

  2. SQS - 我想过为每个用户创建一个队列.用户连接的服务器将轮询(或使用SQS长轮询)该队列.发现新消息时,它将从服务器推送给用户.

  3. SNS - 我真的很喜欢这个解决方案,直到我发现100个主题限制.我需要为每个用户创建一个主题,该主题仅支持100个用户.

他们可以使用AWS扩展聊天的其他方式吗?SQS方法是否可行?AWS向队列添加消息需要多长时间?

scalability real-time amazon-sqs amazon-web-services redis

19
推荐指数
3
解决办法
9569
查看次数

为什么建议队列可见性超时为函数超时加批处理窗口的六倍?

来自https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#events-sqs-queueconfig

将队列可见性超时设置为函数超时的 6 倍,加上以下值MaximumBatchingWindowInSeconds

为什么队列可见性超时不能等于函数超时?假设该函数的超时时间为 30 秒,队列可见性也是如此。该函数拾取消息并经过 30 秒,该消息尚未删除,现在对其他函数/消费者可见。那为什么一定要6次呢?最大批处理窗口在队列可见性超时中扮演什么角色?

amazon-sqs amazon-web-services aws-lambda

19
推荐指数
1
解决办法
1万
查看次数

在开发期间从SQS删除消息的最佳方法

在开发过程中,我在Amazon SQS上生成了大量虚假消息.我正准备编写一个小应用程序来删除所有消息(我在开发过程中经常这样做).有谁知道清除队列的工具?

amazon-sqs

18
推荐指数
4
解决办法
1万
查看次数

在SQS中查找某些消息

我知道SQS不是为此而构建的,但我很好奇是否可以在符合某些条件的队列中查找消息?

我可以在循环中提取消息,在消息体中搜索某些模式(甚至不反序列化它们),并过滤我需要的消息.但是有可能最终得到一个无限循环 - 我读到的第一个消息将在我到达队列末尾时返回队列...

扩展消息的可见性,但我如何确切地知道扫描整个队列需要多长时间,以及我应该延长可见性多长时间?如果我在那里有一万条消息怎么办?

这里有解决方法吗?我需要扫描队列中的某些消息,然后删除那些消息......

amazon-sqs amazon-web-services

18
推荐指数
2
解决办法
1万
查看次数