我有一个Node.js应用程序,该应用程序池化来自AWS SQS队列的消息并处理这些消息。
但是其中一些消息与我的服务无关,它们将被过滤掉并且不会被处理。
我想知道是否可以在收到这些不相关的消息之前从AWS过滤掉这些东西...
例如,如果消息不具有以下属性data.name,则此消息将在到达我的应用程序之前被删除...
无法过滤这些消息,然后再将它们发送到队列(根据我的客户端)。
答案 0 :(得分:2)
否,不轮询消息本身是不可能的。因此,如果它们满足您的要求,那么您将需要一些其他使用者来轮询消息并将它们返回到队列(不在接收到的删除句柄上调用DeleteMessage
),但这在大多数情况下会过分杀伤,具体取决于“好”和“坏”消息,但仍然需要两次处理“好”消息。
更好的方法是设置其他使用者和2个队列。生产者将消息发送到第一个队列,该队列由第一个使用方轮询,其唯一目的是过滤消息并将“良好”消息发送到第二个队列,然后由当前使用方应用程序对其进行轮询。但是,这又要昂贵得多。
如果您无法在将消息发送到队列之前对其进行过滤,则可以在使用的应用程序中对其进行过滤,否则您将不得不为此功能支付一些额外费用。