Hazelcast下实现一个有初始容量的LinkedBlockingQueue

minux87 发布于 2014/07/22 14:28
阅读 972
收藏 1

Hazelcast下能直接利用instance.getQueue("myQueue");方法获取一个Distributed Queue,但是目前由于业务需要能获取到一个能初始化容量(capacity)的LinkedBlockingQueue用于cluster间。

希望大虾们给点指导。

加载中
0
totyumengr
totyumengr
用配置文件声明就可以了吧。
totyumengr
totyumengr
明天我用config api试试,然后回复哈~
minux87
minux87
配置文件中只能指定最大最小容量吧,我的Queue还需要根据一定的业务在运行中根据新的容量重新创建。
0
totyumengr
totyumengr
Hazelcast支持按照模板来创建对象,如下: IQueue queue = hazelcastInstance.getQueue("task_two_1"); 这个Queue的maxSize就是200。 这应该是一个“不完全”的解决方案,不了解你的具体业务,什么场景下需要精确的指定Q的size呢?
totyumengr
totyumengr
<hz:queue name="task_one*" max-size="100"/> <hz:queue name="task_two*" max-size="200"/> 先设定这样的模板, IQueue queue = hazelcastInstance.getQueue("task_two_1"); 这个Queue的maxSize就是200
minux87
minux87
嗯 这样是可以创建一个初始容量的Queue,但是我这边在某些业务情况下需要更改这个容量,而不是在配置文件中设置定死;不知道可不可以动态的设置配置文件中的参数?
0
totyumengr
totyumengr
先设定这样的模板, IQueue queue = hazelcastInstance.getQueue("task_two_xxxx"); 这个Queue的maxSize就是200 这应该是一个“不完全”的解决方案。但应该是比较简单有效的方式。 Hazelcast没有留更灵活的API接口,他内部是使用QueueConfig来做的,但是初始化较复杂。 建议不要Hack他代码
totyumengr
totyumengr
请参考评论,OSC的评论禁止了一些特殊字符
totyumengr
totyumengr
hz:queue name="task_one*" max-size="100" hz:queue name="task_two*" max-size="200"
返回顶部
顶部