![]() |
1
3
实现所需功能的一个好方法是采用断路器设计模式。 我在《释放它》一书中第一次读到这个。设计和部署生产就绪软件”,作者:Michael T.Nygard,实用出版社,第104-107页。 断路器的概念是,它位于系统之间连接的路径上,通过连接,观察“断开状态”。例如,只有当一行中的五个连接都失败时,它才会触发。 一旦电路断开,所有通过断路器的呼叫都会立即失败,无需咨询外部服务。当断路器进入半开状态时,这会一直持续到超时。尝试下一次调用-失败将导致重置超时、成功关闭断路器和系统恢复操作。 找到一个快速的谷歌 a post by Tim Ross 它读起来很好,而且更详细。 在您的情况下,您可以使用一个超时为10分钟的断路器,并触发5个故障。然后,在全天故障的情况下,您的日志文件将包含针对原始问题记录的五个异常,然后每小时只多记录六个异常(与间隔15秒的240个异常相比),这表明问题仍然存在。 根据您的要求,您可以包括一个手动“复位”的断路器,或者您可以让它自动复位时,10分钟超时显示事情恢复正常。这可能很有用——一般来说,系统管理员需要处理的事情越少,他们越喜欢它。 |
![]() |
2
1
可能有一个工作流,如果投票失败一定次数,那么投票间隔就会增加。例如,每15秒轮询3次,如果失败,则将轮询间隔增加到1分钟;如果失败n次,则将时间增加到1小时。 老实说,上面的工作流程并不能真正解决您的问题。如果我是你,我会改变工作流程。与其对设备进行服务器轮询,为什么不反过来呢?当设备连接到联网机器时,客户端服务向服务器发送一条消息,以便服务器知道设备已连接并处于活动状态。 希望这有帮助… 雷文迪 |
|
3
1
如果您在应用程序中使用异常处理块,我假设您使用了,您可以在不同的异常处理策略之间切换。 首先,策略将异常信息写入事件日志,然后在n次尝试或时间段之后,您可以切换到不记录到事件日志的策略。 增加连接尝试之间的持续时间可能会解决您的问题。 例如newtimeout=n*atomictimeout,其中n是attmts数。 |
![]() |
4
0
那……怎么样?
|
![]() |
5
0
断路器模式是个好主意,我说 查看一些PHP实现的设计,但可以应用于任何语言 http://artur.ejsmont.org/blog/PHP-Circuit-Breaker-initial-Zend-Framework-proposal |
![]() |
A B · C#Excel自动调整列避免长文本时出错 6 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 6 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 6 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 7 月前 |