softwaremill / elasticmq

In-memory message queue with an Amazon SQS-compatible interface. Runs stand-alone or embedded.
https://softwaremill.com/open-source/
Apache License 2.0
2.48k stars 193 forks source link

Needs clarification ... #761

Open BruceGitHub opened 1 year ago

BruceGitHub commented 1 year ago

When I set the parameter waitTimeSeconds for the receiveMessage ElasticMac returns an error

'InvalidParameterValue; see the SQS docs.'

But I have not found any way to configure this parameter,

Only this ReceiveMessageWaitTimeSeconds from createQueue(SDK v2) however, this produces the same error when I call createQueue:

export type QueueAttributeName = "All"|"Policy"|"VisibilityTimeout"|"MaximumMessageSize"|"MessageRetentionPeriod"|"ApproximateNumberOfMessages"|"ApproximateNumberOfMessagesNotVisible"|"CreatedTimestamp"|"LastModifiedTimestamp"|"QueueArn"|"ApproximateNumberOfMessagesDelayed"|"DelaySeconds"|"ReceiveMessageWaitTimeSeconds"|"RedrivePolicy"|"FifoQueue"|"ContentBasedDeduplication"|"KmsMasterKeyId"|"KmsDataKeyReusePeriodSeconds"|"DeduplicationScope"|"FifoThroughputLimit"|"RedriveAllowPolicy"|"SqsManagedSseEnabled"|string;

I'm not clear how to unlock this condition ...

Snipped to reproduce the condition:

    const createParams: AWS.SQS.Types.CreateQueueRequest = {
      QueueName: 'http://elasticmq:9324/queue/test_queue",
      Attributes: {
        DelaySeconds: '0',
        MessageRetentionPeriod: '86400',
      },
    };
    const result = await sqs.createQueue(createParams).promise();
    if (result.$response.error) {
      throw new Error(
        `Error while creating queue: ${result.$response.error.message}`,
      );
    }

    const receiveParams = {
      QueueUrl: 'http://elasticmq:9324/queue/test_queue',
      AttributeNames: [],
      MaxNumberOfMessages: 1,
      WaitTimeSeconds: 30,
      VisibilityTimeout: 60,
    };
    const res = await sqs.receiveMessage(receiveParams).promise();

Error

InvalidParameterValue; see the SQS docs.

If I use WaitTimeSeconds: 20 (the default value when elasticmq creates the queue), run correctly

ccrvlh commented 4 months ago

If I'm not mistaken 20 is the maximum wait time for SQS.

https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html#sqs-long-polling.

The maximum long polling wait time is 20 seconds