RabbitMQ RPC,每个请求(多线程)如何快速取到自己的返回值?

赵举飞 2018-08-15 05:43:06
RabbitMQ RPC,现在不知道怎么高效的取返回值。实际应用下,一个JVM下肯定有多个用户/线程访问,从回调队列返回的值,存入JVM的一个队列里,每个值都不能丢。

我想到一个办法,每个线程不断的取JVM队列里的值(从头取),不是自己的就返回队尾,这样肯定能找到,但是我怎么觉得,并发量大时效率会很低。

有其他的办法吗?
...全文
271 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
赵举飞 2018-08-28
引用 1 楼 verejava 的回复:
RPC 微分布式远程调用框架

http://www.verejava.com/?id=1756827901192



package com.zjf.spb.demo.controller;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

import org.springframework.util.StringUtils;

public class Lockservice
{
public static volatile Map<Integer, String> map = new HashMap<Integer, String>();

public final static Lock lock = new ReentrantLock();

public final static Condition canget = lock.newCondition();

public final static ReadWriteLock lock2 = new ReentrantReadWriteLock();

public static void setvalue(Integer id, String value)
{
try
{
lock.lock();

map.put(id, value);

canget.signalAll();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
lock.unlock();
}
}

public static String getValue(Integer id)
{
String vlaue = null;

try
{
lock.lock();

while (true)
{
vlaue = map.get(id);

System.out.println("id=" + id + ", value=" + vlaue);

if (StringUtils.isEmpty(vlaue))
{
System.out.println("未获取到id=" + id + "的值,继续尝试获取");

canget.await();
}
else
{
System.out.println("获取到id=" + id + "的值,退出");

break;
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
lock.unlock();
}
return vlaue;
}

}

如此可否?
回复
verejava 2018-08-16
RPC 微分布式远程调用框架

http://www.verejava.com/?id=1756827901192
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2018-08-15 05:43
社区公告
暂无公告