redis storage 问题
redis 无法存储 resolve 和 reject 在 redis 中。
目前解决方案
那么换了个思路,resolve 和 reject 还是在原有的作用域内,利用了 Server 类继承的 EventEmitter ,它的事件机制来进行 promise 的状态改变操作。
代码见:
https://github.com/luoyjx/tomqueue/blob/dev/lib/dispatcher.js#L84-L108
新问题
在worker处理能力不足时,dispatcher的内存会暴涨,这显然不是预期的效果,但是需要dispatcher确保消息发送到worker 到 反馈接收成功 期间,promise部分 和 listener 只能驻留在内存中。
若dispatcher或者调度器能根据dispatcher的负载来弹性伸缩worker数量的话,那内存问题也不是问题了,不过复杂度提升了。如果dispatcher来做这件事可能过于耦合了。
原有问题
不管是 memory 或是 redis 实现的 store ,在都会存在内存不可控的因素,主要还是跟 dispatcher 需要知道这条消息确实是被 worker 完整的接收到了而不仅仅是发送出去了有关。
疑问
这个 worker 是作为整个队列中的一个小部件然后消费者另外实现客户端,还是作为一个消费者的角色?
redis storage 问题
redis 无法存储
resolve和reject在 redis 中。目前解决方案
那么换了个思路,
resolve和reject还是在原有的作用域内,利用了 Server 类继承的EventEmitter,它的事件机制来进行 promise 的状态改变操作。代码见:
https://github.com/luoyjx/tomqueue/blob/dev/lib/dispatcher.js#L84-L108
新问题
在worker处理能力不足时,dispatcher的内存会暴涨,这显然不是预期的效果,但是需要dispatcher确保
消息发送到worker到反馈接收成功期间,promise部分 和 listener 只能驻留在内存中。若dispatcher或者调度器能根据dispatcher的负载来弹性伸缩worker数量的话,那内存问题也不是问题了,不过复杂度提升了。如果dispatcher来做这件事可能过于耦合了。
原有问题
不管是 memory 或是 redis 实现的 store ,在都会存在内存不可控的因素,主要还是跟 dispatcher 需要知道这条消息确实是被 worker 完整的接收到了而不仅仅是发送出去了有关。
疑问
这个 worker 是作为整个队列中的一个小部件然后消费者另外实现客户端,还是作为一个消费者的角色?