我正在使用Amazon SQS队列向外部系统发送通知.
如果使用SQS时HTTP请求失败' SendMessage,我不知道消息是否已排队.我的默认策略是重试将消息发布到队列,但是有两次发布消息的风险,这可能是不可接受的,具体取决于用例.
如果消息正文中存在重复(或某种消息元数据,例如我们可以提供的唯一ID),是否有办法让SQS拒绝消息,以便我们可以重试,直到消息被接受为止,并且有信心如果第一个请求已经排队,那么不会有重复,但是响应已经丢失了?
不,SQS中没有这样的机制.更进一步,消息也可能被传递两次或更多次(至少一次传递语义).因此,即使存在这样的机制,您也无法保证消息不会多次传递.
请参阅:http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/DistributedQueues.html
对于一次性交付,您需要在发送端和接收端进行某种形式的事务(并且HTTP不是事务性协议).