@crvouga/ mockingbird-service-sqs (中文(简体) )
本地模拟器。 真正的API合同. 部分 嘲笑鸟。 。 。 .
AWS SDK v3 的状态亚马逊SQS模拟器. 它模拟了标准的和FIFO队列,消息属性,能见度和收件手柄,分批,去重复,清除锁,和不与AWS联系而重新驱动的死字母.
安装
npm install -D @crvouga/mockingbird-service-sqs
仅限无害环境管理。 节点22+或Bun 1.2+.
使用量
点 SQS_ENDPOINT_URL 或 AWS SDK 软件 endpoint 选项。 接受Fixture SigV4证书.
import {
GetQueueUrlCommand,
ReceiveMessageCommand,
SendMessageCommand,
SQSClient,
} from "@aws-sdk/client-sqs"
import { createServer } from "@crvouga/mockingbird-service-sqs/server"
// Test setup: start the emulator with a seeded queue and point the SDK's endpoint at it.
const server = await createServer({
queues: [{ name: "jobs", attributes: { VisibilityTimeout: "30" } }],
})
const sqs = new SQSClient({
endpoint: server.url,
region: "us-east-1",
credentials: { accessKeyId: "fixture", secretAccessKey: "fixture" },
})
// Application code: the SQS SDK calls it already makes.
const { QueueUrl } = await sqs.send(new GetQueueUrlCommand({ QueueName: "jobs" }))
await sqs.send(new SendMessageCommand({ QueueUrl, MessageBody: JSON.stringify({ job: "resize" }) }))
const { Messages } = await sqs.send(new ReceiveMessageCommand({ QueueUrl }))
console.log(Messages?.[0]?.Body) // {"job":"resize"}
await server.close()
所支持的操作有: CreateQueet, ListQueets, Get QueeUrl, DevedQueet, SetQueet 属性, Get 属性, TagQueet, UntagQueet, ListQueetes, ListDeadlete ResourceQueets, SendMessage, ReceptMessage, DreadMessage, DevedMessageBatch, ChangeMessage Visicity, ChangeMessibility Batch,和purgeQue. 接收最大消息,能见度超时,等待时间,系统属性选择,以及消息属性选择. 被注入的共享时钟控制能见度已过期并重新驱动而无睡眠.
每个条目的蝙蝠声回答 : DeleteMessageBatch 财务报告和审定财务报表 ChangeMessageVisibilityBatch 列出每个条目 Successful 或者说 Failed (处理从未发布的队列失败为 ReceiptHandleIsInvalid 其余的则仍然成功。 以一个被取代的手柄删除,这个手柄来自之前再次收到的信件,但作为AWS文档在不删除信件的情况下成功. ListQueues 过滤器由 QueueNamePrefix 页面 MaxResults 财务报告和审定财务报表 NextToken。 。 。 . DeleteQueue 减少队列及其消息. SetQueueAttributes 验证和替换给定的属性,然后得到它们的使用.
投票时间长
一个空的 ReceiveMessage 为 WaitTimeSeconds (0至20),或队列的 ReceiveMessageWaitTimeSeconds 当呼叫省略时; WaitTimeSeconds: 0 从不等待。 等待是在模拟器的时钟上测量的,所以它保持不变:
- 等待期间发送的信息( E)
SendMessage,一个批,POST /__admin/messages)或可见(ChangeMessageVisibility0, 到期的延迟或能见度超时)发布所持请求, 请求用它回答ApproximateReceiveCount1. 联合国. - 在一个活钟上(一个服务堆),等待是真实的。 在被冷冻的时钟上,它持续到测试在等待时间前将时钟提前(
clock.advance(3000)或者说POST /__admin/clock),然后回答没有Messages。 。 。 . - 虚拟时间 :
virtualTime: true,参见 Admin 控件) 等用在命名空间时钟上,同时不睡觉. - 一个在持有时断开连接的客户端会停止等待直到收到任何信息,因此没有留下任何信息被隐藏. 等待回答时删除了队列
AWS.SimpleQueueService.NonExistentQueue。 。 。 . createServer({ longPoll: false })(或createRuntime)保留依赖它的套房的旧即时答案.
有人要求每25毫秒实时投票一次.
证据: 短票和长票 编辑 接收信件参考,从文件中执行(未观察到SQS直播). WaitTimeSeconds 20岁以上 InvalidParameterValue页:1.
未知的操作
一个 X-Amz-Target 在查找任何队列前, 不拒绝模拟器回答, 因为 400 UnknownOperationException (单位:千美元){"__type":"UnknownOperationException","message":"Unknown operation Nope"}),从不作为缺失的队列. 存在但没有模型化的SQS业务(AddPermission, (中文(简体) ), RemovePermission, (中文(简体) ), StartMessageMoveTask, (中文(简体) ), CancelMessageMoveTask, (中文(简体) ), ListMessageMoveTasks) 与信件获得相同的类型 <Operation> is an Amazon SQS operation this emulator does not implement.,因此除了队列缺失之外,还有一个操作缺失.
最好的猜测,不是甲骨文验证: AWS JSON 1.0 协议 报告一项未确认的行动为: __type 命名失败,此模拟器使用 UnknownOperationException 在此 repo 使用中命名其他 AWS 模拟器。 准确 __type 现场SQS发送(可能是 com.amazon.coral.service#UnknownOperationException 未观测到窗体; SDK 客户端在名称空间之前脱去 #,因此它们看到相同的错误名称.
管理和确定性控制
GET /__admin/queues显示队列深度;GET /__admin/messages?queue=…曝光本地原始消息.POST /__admin/messages安装固定装置;POST /__admin/messages/:id/receive-count设置再驱动状态;POST /__admin/messages/:id/duplicate使飞行中的信息可以立即传送.POST /__admin/queues/:name/drain从解剖学上来说,排出一队.- 错误预设为
throttled和一发子弹unavailable;通用断层可以延迟或复制调用层的收件.
共享运行时间供应重置,时钟,日记,时间线,度量衡,断层,和命名空间隔离. 选择一个命名空间通过 x-mockingbird-namespace, (中文(简体) ), /__admin/ns/<name>,或SigV4存取键映射.
故意不模拟
上面列出的表面以外的操作( 排队权限和信件移动任务回答) UnknownOperationException),IAM政策评价,服务器侧加密,生产吞吐量和尺寸限制超过1 MiB信息限制,AWS仪表板,以及计费等没有被模拟. 队列缺失错误使用遗留 AWS.SimpleQueueService.NonExistentQueue 代码,而不是 QueueDoesNotExist 命名较新的 SDKs 映射它; GetQueueUrl 用于删除的队列失败.
API 密码
SqsAPI, (中文(简体) ),SqsAPIOptions, (中文(简体) ),SqsSeedQueueAWS JSON 处理器和固定装置.SqsMessage, (中文(简体) ),SqsMessageAttribute, (中文(简体) ),SqsQueue:状态类型.createRuntime, (中文(简体) ),SqsRuntime, (中文(简体) ),SqsRuntimeOptions:满口口鸟跑.SQS_NAMESPACE, (中文(简体) ),SQS_PRESETS, (中文(简体) ),accessKeyCredential:常数与控制.document, (中文(简体) ),operationIds, (中文(简体) ),supportedOperationIds: 生成了 OpenAPI 元数据.createServer, (中文(简体) ),SqsServerOptions, (中文(简体) ),DEFAULT_PORT, (中文(简体) ),serveTarget从./server:节点HTTP适配器和CLI集成.
官方预言: 亚马逊 SQS API 参考。 。 。 .