为了账号安全,请及时绑定邮箱和手机立即绑定

请问Java里的LinkedBlockingQueue如何在分布式下使用

请问Java里的LinkedBlockingQueue如何在分布式下使用

蝴蝶不菲 2019-02-22 02:48:32
如题,请问Java里的LinkedBlockingQueue如何在分布式下使用 因为现在还没有使用MQ等中间件,所以使用了Java里的LinkedBlockingQueue来做队列 可是这个队列只能存在本地,一旦集群的话,每台服务器上就都有一个队列在跑了,就成了多个队列了 我希望能改造成在分布式环境下也只有一个队列,可是无从下手 希望前辈们能指导迷津
查看完整描述

5 回答

?
young0098

TA贡献1条经验 获得超0个赞

题主的问题在于怎么实现分布式的blockingqueue,有那么多的回答队列容量太大,真的文不对题!

以前看过redis好像也有类似机制,可以用redis实现看看,至于容量太大,可以多开几个队列不就解决了?

查看完整回答
反对 回复 2020-09-08
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

分布式你还是用中间件吧。concurrent里的东西不知道怎么应用到分布式环境下,应该是不简单,不然也不会有这么多MQ吧。

查看完整回答
反对 回复 2019-03-01
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

hazelcast

import com.hazelcast.config.Config;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
 
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
 
public class DistributedQueue {
    public static void main(String[] args) throws InterruptedException {
        Config config = new Config();
        HazelcastInstance h = Hazelcast.newHazelcastInstance(config);
        BlockingQueue<String> queue = h.getQueue("my-distributed-queue");
        queue.offer("item");
        String item = queue.poll();
 
        //Timed blocking Operations
        queue.offer("anotheritem", 500, TimeUnit.MILLISECONDS);
        String anotherItem = queue.poll(5, TimeUnit.SECONDS);
 
        //Indefinitely blocking Operations
        queue.put("yetanotheritem");
        String yetanother = queue.take();
    }
}
查看完整回答
反对 回复 2019-03-01
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

你这分布式环境,还想只有一个队列,你这内存得有多大啊。
如果非要只有一个队列的话,可以将LinkedBlockingQueue包一层,对外提供一个HTTP服务,然后让分布式中其他的机器,调用这个服务就行了。

查看完整回答
反对 回复 2019-03-01
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

LinkedBlockingQueue不建议 很容易出问题啊 容量就是个问题 太大了问题 太小了问题又是一大堆

查看完整回答
反对 回复 2019-03-01
  • 5 回答
  • 0 关注
  • 937 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信