当前位置: 首页 > 知识库问答 >
问题:

使用Amazon SQS的多个消费者

淳于煌
2023-03-14

我用java编写我所有的微服务。我想在Amazon SQS中使用多个消费者,但每个消费者在负载均衡器后面的AWS上有多个实例。

我使用SNS作为输入流

我在SNS之后使用SQS标准队列。

我在stackoverflow上发现了同样的问题(使用多个消费者的Amazon SQS)

此示例为

https://aws.amazon.com/fr/blogs/aws/queues-and-notifications-now-best-friends/

当我阅读SQS标准队列留档时,我看到偶尔会传递多个消息副本。:

每条消息都有一个消息id。如何检测同一微服务的多个实例是否处理本应多次发送的同一消息。我是通过在dynamodb数据库中注册message\u id得到一个主意的,但是如果这是由同一个微服务的多个实例完成的,那么如何锁定get(有点像选择更新)?

例如,同一微服务的多个实例“扫描元数据”。

共有1个答案

米楚青
2023-03-14

正如您所提到的,标准SQS队列有时可以多次传递相同的消息。这是由于SQS服务的分布性。每个消息都存储在多个服务器上以实现冗余,当您调用sqs:DeleteMessage时,其中一个服务器发生了变化,因此消息不会从所有服务器中删除,一旦出现故障的服务器恢复联机,它就不知道您已经删除了消息,将再次处理。

解决重复消息问题的最简单方法是切换到使用FIFO队列,它为您提供一次处理。您可以根据内容或发件人生成的唯一ID选择使用消重。如果您选择使用内容消重,当队列在5分钟内收到两条内容相同的消息时。消重间隔,消息将被丢弃。

如果两条消息可以具有相同的内容,但您需要将其视为不同的消息,则可以基于ID使用重复数据消除,您可以通过参数传递给sqs:SendMessage或sqs:SendMessageBatch调用

在考虑使用DynamoDB存储消息处理状态之前,我肯定会检查FIFO队列。它会更便宜,并且默认情况下为您提供此消重功能,而无需实现任何复杂的逻辑。

 类似资料:
  • 问题内容: 我有一个JMS客户端,它正在生成消息并通过JMS队列发送到其唯一的使用者。 我想要的是不止一个消费者收到这些消息。我想到的第一件事是将队列转换为主题,以便现有用户和新用户都可以订阅并将相同的消息传递给他们。 显然,这将涉及在生产者和消费者方面修改当前的客户代码。 我还要查看其他选项,例如创建第二个队列,这样就不必修改现有的使用者。我相信这种方法有很多优点,例如(如果我错了,请纠正我)在

  • 问题内容: 我是一名学习Kafka的新学生,在了解多个消费者(到目前为止,文章,文档等对他们没有太大帮助)方面,我遇到了一些基本问题。 我尝试做的一件事是编写我自己的高级Kafka生产者和消费者并同时运行它们,将100条简单消息发布到某个主题,然后让消费者检索它们。我已经成功地做到了这一点,但是当我尝试引入另一个使用者来使用与刚刚发布消息的主题相同的主题时,它没有收到消息。 据我了解,对于每个主题

  • 我有一个基于服务的应用程序,它使用Amazon SQS,具有多个队列和多个消费者。我这样做是为了实现一个基于事件的架构,并解耦所有服务,其中不同的服务对其他系统状态的变化做出反应。例如: 注册服务: 当新用户注册时,发出事件“registration new” 在用户更新时发出事件'user-更新'。 从队列“registration new”(注册新)中读取,并为搜索中的用户编制索引 从“注册-

  • 我知道可以使用多个线程使用SQS队列。我想保证每封邮件都会被消费一次。我知道可以更改消息的可见性超时,例如,等于我的处理时间。如果我的进程花费的时间超过可见性超时时间(例如连接速度慢),则其他线程可以使用相同的消息。 保证消息只处理一次的最佳方法是什么?

  • 我有一个主应用程序将消息发送到SQS队列,希望4个消费者应用程序使用相同的消息,并按自己的意愿进行处理 我不确定用于此目的的队列体系结构。 我看到标准SQS、SQS FIFO、(SQS SNSTopic)的选项 对于我想要的功能,似乎(SQS SNS主题)或Kenesis将是一条可行的道路。 但是我也有一个关于标准SQS的问题 我想我是混淆之间的所有选项和压倒了所有的信息可用的队列但仍然感到困惑哪

  • 我是一个学习Kafka的新学生,我遇到了一些关于理解多个消费者的基本问题,到目前为止,文章、文档等都没有太大的帮助。 我尝试做的一件事是编写我自己的高级Kafka生产者和消费者,并同时运行他们,发布100个简单的消息到一个主题,并让我的消费者检索他们。我成功地做到了这一点,但是当我试图引入第二个消费者来消费刚刚发布消息的同一主题时,它没有收到任何消息。 我的理解是,对于每个主题,您可以有来自不同消