我刚刚使用Nginx和supervisord创建了一个dockerized负载均衡版本的OCB,运行由Nginx平衡的Orion独立实例。仅用于测试目的。
我的问题是,如果我使用这种方法,我是否会遇到TIMEINTERVAL订阅的麻烦? (我不希望每个OCB流程都有'n'通知。)
任何帮助都一定会受到赞赏。
答案 0 :(得分:1)
当前Orion版本(0.23.0)按以下方式工作:在创建时,LB将ONTIMEINTERVAL subscribeContext分派给其中一个CB节点,这会创建一个永久线程,负责在通知中发送通知消息频率。
然而,有两种问题:
如果客户想要取消发送unsubscribeContext的订阅,那么该请求可以由管理订阅的CB 而不是来接收。因此,该操作可能导致从DB中删除订阅,但继续发送通知。
让我们考虑在给定时刻CB1管理的订阅S1和S2以及CB2管理S3和S4。让我们考虑CB2失败并重新启动它。 CB2将在开始时“看到”四个订阅(S1,S2,S3和S4),因此创建了4个线程,最终结果是S3和S4通知被复制(由CB1和CB2同时发送)
因此,总的来说,在HA和/或水平扩展方案中不鼓励使用ONTIMEINTERVAL。但是,请注意,基于ONTIMEINTERVAL的所有用例都可以“反转”在通知接收器上以相同的频率运行基于queryContext的轮询,因此它不会成为一个大问题。
编辑:ONTIMEINTERVAL订阅were removed in Orion 1.0.0。 ONTIMEINTERVAL订阅有几个问题(如上面的答案所述)。实际上,它们并不是真正需要的,因为基于ONTIMEINTERVAL通知的任何用例都可以转换为一个等效的用例,其中接收器以相同的频率运行queryContext(并利用queryContext的功能,例如分页或过滤)