Dav*_*ant 10 rest webhooks servicestack redismqserver
我目前正在开发一种REST服务,允许控制和监控一些物理设备.
相应的REST API主要基于您可以在以下文章中找到的原则和想法:" 使用REST控制和监视设备 ".
受监视和受控设备可以生成客户端必须能够订阅的一些事件.我的想法是使用RESTful WebHooks实现该部分.
因此,每当发生事件时,我的服务都会向每个订阅者发出REST API回调以通知它.
我的问题,现在:
使用ServiceStack(版本3.9.71)实现此方案的正确方法是什么?
我的服务必须能够将订阅排队并将事件分派给订阅者.它还必须处理客户端关闭或无法访问的情况,并可能重试发送通知.
我是否必须从头开始实现所有内容(例如,使用ServiceStack托管的RedisMqServer)或者是否已经在我的方向上进一步发展?我在Google上搜索得不太成功.
我相信你正在接近错误的解决方案.您绝对可以使用ServiceStack进行Web Hook调用 - 最好是使用JSON.
您应该关注的是Message Queues,因为它们展示了实现Web Hook调用所需的所有特性(持久性,消息清除策略,消息过滤,交付策略,路由策略,排队标准)
事件的工作流程将跟随调用Web Hook的点:
所以现在你有一个基本的通知系统,应该确保消息至少传递一次.
这是一篇很好的文章,详细介绍了如何使用TTL(生存时间)间隔重试消息
我会采取一种不同的方法:
示例工作流程:具有最大重试次数的WebHookQueue:2,TTL:1天
示例消息:{ 'EVENT_TYPE': 'Email_Reply', 'callback_url': '...', 'reply_level':0, 'queued_at': '2013-09-25T22:00:00Z',数据: 'JSON编码' }
消息 - > WebHookQueue(失败) - > WebHookQueue(失败) - > WebHookRetryQueue(增量reply_level = 1 +排队.) - > WebHookRetryLvl1Queue(5分钟-到期) - > WebHookQueue(失败) - > WebHookQueue(失败) - > WebHookRetryQueue( INCR reply_level = 2 +排队) - > WebHookRetryLvl2Queue(15分钟-到期) - > WebHookQueue(失败) - > WebHookQueue(失败) - > WebHookRetryQueue(降消息)
编辑
点击这里使用简单,在例子来看看WebHookQueue和WebHookRetryQueue使用RabbitMQ的消息TTL电平的.由于消息级别TTL; 没有必要创建不同的重试级别队列 - 这对于功能较少的消息队列可能是必需的.
如果您必须实现这样的队列能够使单个消息过期(而不是通过清除策略)或提前安排消息以及重新安排/过期选项 - 您很可能不得不选择基于数据库的排队.
这是关于CodeProject的一篇很棒的文章,关于为MSSQL Server构建这样一个高性能队列(可以轻松地移植到其他数据库,如MySql/Postgresql/Mongodb/Couchbase等)
希望您发现此信息有用.
| 归档时间: |
|
| 查看次数: |
2746 次 |
| 最近记录: |