【发布时间】:2011-12-07 10:51:31
【问题描述】:
功能说明
NServiceBus 网关http://docs.particular.net/nservicebus/gateway/ 似乎是一种使用 NServiceBus 基础架构实现内部 webhook 的方法。
我们需要在这个概念上更进一步,向任何有权在我们系统中注册 webhook url 的第三方订阅者开放 few 事件。 p>
评论
我们计划创建两个初始窗口服务
1) WebHookBatchService,可以作为订阅者添加到感兴趣的特定消息。
<UnicastBusConfig>
<MessageEndpointMappings>
.......
<add Messages="MyMessages.MyImportantMessage, MyMessages" Endpoint="WebHookBatchService.Queue"/>
.......
</MessageEndpointMappings>
</UnicastBusConfig>
2) WebHookProcessService - 实际处理 WebHookBatchService 发送的 1 条消息。
一旦在 WebHookBatchService.Queue 上收到消息,我们的 WebHookBatchService 将查找特定租户 + 消息类型的所有订阅者,并为 WebHookProcessService 向 WebHookProcessService.Queue 发送单独的消息(我们可以创建一个 nservicebus 负载均衡器实例)桥接批处理和实际处理器)以实际处理可能使用http://restsharp.org/ 的真实消息。
问题
目前是否有任何现有的开源项目可以做到这一点?
既然我们无法控制订阅者的持久性,我们应该如何管理错误?
http://wiki.shopify.com/WebHook
如果完全相同的 webhook 连续失败 19 次,则会删除一个 webhook。
它没有提到 webhook 中的任何延迟。人们对重试逻辑的标准延迟有什么体验?
以下是其他一些想法:
提案 0:MaxRetries="1"。每晚清除 WebHookProcessService.ErrorQueue。 (不重试 - 如果第一次失败,保证消息丢失)
建议 1:
异常捕获时的 MaxRetries="1" 发送电子邮件,其中包含将通过 http 传递的消息的 xml 版本。
每晚清除 WebHookProcessService.ErrorQueue。
-- 我看到了潜在的垃圾邮件问题。
提案 2:nservicebus MaxRetries 立即重试,不会延迟。因此,我需要创建(1 小时 - 24 小时)存储桶队列并使用 RetrySchedulerService,尽管当服务端点开始工作时,当订阅者一次以非 DateCreated 有序方式获得 25 条消息时,我认为这很难维护和混淆.
挖掘想法...
【问题讨论】:
-
nservicebus 3.x 现在内置了support.nservicebus.com/customer/portal/articles/…
标签: c# nservicebus webhooks