2017-04-15 49 views
1

我有一个Laravel应用程序(iOS API),它将数据推送到SQS以在后台处理。根据要求,我们需要派遣1到4个工作岗位到SQS。例如:Laravel和SQS - 一个请求中的多个连接

派遣工作,SQS,要由工作人员进行处理:

  • 用于连接到插座服务(推)
  • 用于连接到苹果的APNS服务(推送通知)
  • 用于将数据发送到Loggly基本集中请求记录
  • 用于存储在SQL数据库中分析数据(暂时)

的问题是,我们可能有一个像“聊天”,也就是只要服务器处理而言相当光请求的功能,但是它需要三次以上连接到SQS派:

  • 1 )插座推到所有设备
  • 2)分析处理
  • 3)集中请求/错误记录

总的来说,这些连接最终两倍或三倍的该请求中的其余部分所花费的时间。即。发帖/chat否则可能需要大约40-50ms,但SQS,它需要更多的像100 - 120毫秒

我应该有不同的处理这个?有没有办法将这些批量加入到SQS中,因此我们只需要连接一次而不是三次?

+0

你的意思是像一个[SendMessageBatchRequest](http://docs.aws.amazon.com/AWSiOSSDK/latest/Classes/AWSSQSSendMessageBatchRequest.html)?您可以在单个请求中发送多达10条消息,只要它们的组合长度<= 256 KiB即可。 –

回答

1

正如Michael在评论中所建议的,一种方法是使用sendMessageBatch请求发送多达10条消息到单个队列。当你使用多个队列时,甚至可能不是,还有另一种方法。

如果您可以将所有不同的消息作为相同的元素处理,即向任意接收者发送操作通知,则会发现自己处于扇出模式。这是一个常用的模式,其中多个接收者需要对单个消息采取行动,即单个动作。

尽管AWS SQS本身不支持它,但与AWS Simple Notification Service结合使用可以实现同样的目标。 Jeff Barr在前一段时间(2012年)使用SNS和SQS在扇出设置中写了一个short blog post。它归结为向SNS发送通知,将触发消息发布到多个SQS队列中。