【发布时间】:2021-12-29 08:52:54
【问题描述】:
我有一个消息生产者,将{"user_id": 1, "message": "Ciao"} 之类的消息发送到 SQS 队列。
我有三个 Websocket API 实例,它们的名称是 A、B 和 C。
假设有五个用户连接到该 API,他们的 ID 分别为 1、2、3、4 和 5。
每个用户都连接到 API,我的平衡器(sticky ofc)让客户端以这种方式连接到 API:
A: 1, 3
B: 5
C: 2, 4
现在,Websocket API 是上面提到的 SQS 队列的消费者。
当我将用户 1 的消息排入队列时,任何消费者都可以先将其出列,假设 C 可以。
实例 C 无法处理 user_id 1 的消息。A 确实持有与该用户的实际连接。
在我看来,这将是这样的:所有三个 API 实例都会收到任何消息。
- C 将读取它,并将其留在队列中
- B 将读取它,并将其留在队列中
- A 将读取、处理并将其从队列中移除
我的问题是:
上述工作流程是否可以通过 SQS 实施?
是否可以从队列中读取消息并将其留在那里?或者如果当前消费者无法处理,我是否必须将其出队并重新入队?
【问题讨论】:
标签: go websocket message-queue amazon-sqs event-driven