即使在发送确认HTTP状态代码200之后,Webhook回调也不会停止

时间:2016-12-12 06:58:22

标签: webhooks bigcommerce

我正在研究Ruby on Rails应用程序与BigCommerce的集成。我已经注册了回收,以便接收有关订单创建或货件创建的通知。当下订单时,它正在向我的服务器发送回调,然后我做一些处理并确认该请求发送方的HTTP状态代码200与文档中提到的相同。但是webhook仍然会在一段时间内触发回调。谁能告诉我如何确认webhook并停止接收来自webhook的回调?

以下是我处理它的示例代码。

order_id =params['data']["orderId"].to_i
store_hash = params['producer'].split('/').last
store = Store.find_by(store_hash: store_hash)
connection = prepare_connection(store, store_hash)

vars = prepare_variable_hash(order_id, connection)

send_notification_email(vars['email'],
  store.email,
  q_subject.html_safe,
  q_body.html_safe
)

render nothing: true, status: 200

在我的服务器控制台中,我收到了以下日志。

Rendered text template (0.0ms)
Completed 200 OK in 11883ms (Views: 0.6ms | ActiveRecord: 0.7ms)

我们是否必须在回复时设置任何标头?或只是状态代码200没问题?

1 个答案:

答案 0 :(得分:1)

发送回200响应是您想要提醒BigCommerce方面您已收到webhook。您遇到的问题是您在BigCommerce方面超过了10秒的超时限制。

  

11883ms完成200 OK(浏览次数:0.6ms | ActiveRecord:0.7ms)

根据以上所述,您的系统需要10秒以上才能将您的回复反馈给BigCommerce。因此,webhook服务器在接收响应并将webhook放入重试队列之前关闭连接。

我建议不要在接收时尝试对webhook进行如此多的处理。队列系统更适合处理BigCommerce webhook。这意味着当您收到webhook时,您应将其放入您的队列中,并立即给出200响应。然后,您将拥有一组单独的工作程序,这些工作程序正在处理您已设置的队列中的webhook消息。

无法增加BigCommerce服务器上强制执行的超时限制。