我试图阻止Recurly Webhooks被多次执行,如果它们被错误地重试(即:当构建结束时,服务器偶尔会超时)。我在仪表板中看到webhooks有唯一的ID,但这些似乎无法在消息哈希中访问,我错过了什么?我正在使用Rails来实现它的价值。
<?xml version="1.0" encoding="UTF-8"?>
<updated_subscription_notification>
<account>
<account_code>1</account_code>
<username nil="true"></username>
<email>verena@example.com</email>
<first_name>Verena</first_name>
<last_name>Example</last_name>
<company_name nil="true"></company_name>
</account>
<subscription>
<plan>
<plan_code>1dpt</plan_code>
<name>Subscription One</name>
</plan>
<uuid>292332928954ca62fa48048be5ac98ec</uuid>
<state>active</state>
<quantity type="integer">1</quantity>
<total_amount_in_cents type="integer">200</total_amount_in_cents>
<activated_at type="datetime">2010-09-23T22:12:39Z</activated_at>
<canceled_at nil="true" type="datetime"></canceled_at>
<expires_at nil="true" type="datetime"></expires_at>
<current_period_started_at type="datetime">2010-09-23T22:03:30Z</current_period_started_at>
<current_period_ends_at type="datetime">2010-09-24T22:03:30Z</current_period_ends_at>
<trial_started_at nil="true" type="datetime">
</trial_started_at>
<trial_ends_at nil="true" type="datetime">
</trial_ends_at>
<collection_method>automatic</collection_method>
</subscription>
</updated_subscription_notification>
答案 0 :(得分:1)
webhook可能会多次退役,但是一旦服务器收到成功的状态代码,Recurly将停止尝试重新发送该通知。因此,每个事件只能传送一个webhook。此外,webhook ID不包含在消息哈希中,它们只能在UI中找到。
答案 1 :(得分:1)
不幸的是,阻止webhooks被重新发送的唯一方法是使用200状态代码回复5秒。(https://docs.recurly.com/docs/webhooks)
这是30秒,但我认为2015年11月发生了变化。
无论如何,我通过将消息发送到队列并立即响应200响应来解决它。