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

如何扩展SQS FIFO队列的多个侦听器

笪德华
2023-03-14

我有三个SQS FIFO队列,其中每个队列在EC2实例中都有一个数据投影侦听器守护进程,作为docker pod(SQL Server、PostgreSQL、Elastic Search等)

所有队列的设置如下(死信队列稍后设置)。

Queue Type: FIFO    
Messages Delayed:   0
Content-Based Deduplication:    Enabled
Default Visibility Timeout: 30 seconds
Message Retention Period:   14 days
Maximum Message Size:   256 KB

这都是我使用DynamoDB流设计的事件源架构的一部分=

基于内容的重复数据删除启用以避免队列中的重复消息,因为Lambda路由器中的任何队列总是可能出现错误。

现在,我还将每条消息的MessageGroupId设置为Aggregate Id以对它们进行分组,但并不真正了解消费者端如何使用它;

目前,每个SQS队列中只有一个消费者,但如果我想扩展消费者,该怎么办。是一个应用程序问题,以确保多个使用者不会处理来自同一MessageGroupId的消息;-这是不可接受的,因为使用FIFO队列是由于系统中事件的顺序保留!

共有1个答案

琴镜
2023-03-14

如果已从FIFO Amazon SQS队列接收到消息,但该消息仍然不可见(“在运行中”),则SQS将不会提供另一条具有相同消息组ID的消息。

因此,同一队列上的多个消费者将接收具有不同消息组ID的消息,并且将保留给定消息组ID内的消息顺序。

这里重要的是使用不同的MessageGroupId来保留顺序,但不要对每条消息使用相同的MessageGroupId

请参阅:AWS SQS FIFO-如何一次获取10条以上的消息

 类似资料:
  • 在这篇文章中,加里·拉塞尔解释了如何通过编程创建多个Kafka列斯汀来聆听多个主题。。Kafka·斯普林:如何动态或在循环中创建监听器? 现在我想有一个类似的设置也适用于JMSListeners-在那里我可以有一个带有一个@JMSListener的类,并且我可以以编程方式创建该JMSListener的多个实例,每个实例都注入了自己的queueName。 我发现这篇文章Spring JMS开始根据请

  • 问题内容: 我正在使用EJB 3.1,并且想配置一个MDB来侦听多个队列。 我更喜欢通过XML定义队列名称,而其他通过注释定义。 能做到吗? 问题答案: 实例化后,MDB只能侦听在其目标ActivationConfigProperty中指定的资源,但是您 可以 为同一MDB创建具有不同目标的多个实例(在您的情况下为队列)。 在ejb-jar.xml中创建两个条目,它们具有不同的目的地和ejb-na

  • 我刚接触Spring boot,我正在玩弄它。目前,我已经构建了一些应用程序,希望能够通过队列相互通信。我目前有一个侦听器对象,可以从特定队列接收消息。 这有效。但是,现在我希望能够监听另一个队列。所以我想我会复制上面的对象并更改队列名称。不幸的是,这不起作用,因为Spring Boot只为其中一个创建连接。关于如何让我的Spring Boot应用程序监听多个队列的任何想法?

  • 我有一个rabbitListener,它连续异步地侦听队列“用户消息”的用户消息。除非队列中加载了大量消息,否则一切都正常。当消息批量发布到队列时,同一用户的消息首先被处理,从而其他用户的消息等待轮到他们。 我无法使用优先级队列,因为所有用户的优先级都相同。所以我想创建新的队列,并在运行时监听它们。一旦消息被使用,所有队列都将是短暂的。(队列将被删除) 在浏览时,我发现可以使用RabbitAdmi

  • 服务器部件: 客户部分:io.js 消息组件 信息形式——发布过程的开始

  • 我试图让队列在laravel 5中工作,队列侦听器正在输出: 未定义索引:表 存在"作业"和"failed_jobs"表,config.php设置为"数据库"。 搜索laravel论坛和google都没有找到解决办法,艾米的想法去哪里找?