开发者社区> 问答> 正文

RPC 远程调用超时 ?报错

@少帮主 你好,想跟你请教个问题:


import java.io.IOException;


import org.zbus.broker.Broker;
import org.zbus.broker.BrokerConfig;
import org.zbus.broker.SingleBroker;
import org.zbus.kit.ConfigKit;
import org.zbus.rpc.RpcProcessor;
import org.zbus.rpc.mq.Service;
import org.zbus.rpc.mq.ServiceConfig;


import com.jfinal.kit.Prop;
import com.jfinal.kit.PropKit;


public class RPCService {
private Prop prop = PropKit.use("play.properties");
private String ip = prop.get("zbus.host");
private String port = prop.get("zbus.port");
private ServiceConfig config;
private Service svc;
private boolean isStart = false;

public boolean isStart() {
return isStart;
}


public RPCService(){
final String serverAddress = ConfigKit.option(new String[]{}, "-b", ip+":"+port);
final int threadCount = ConfigKit.option(new String[]{}, "-c", 32); 
final String mq = ConfigKit.option(new String[]{}, "-mq", "RPCMessageCenter");

RpcProcessor processor = new RpcProcessor(); 
//增加模块,模块名在调用时需要指定
processor.addModule(new MessageService()); 

//配置Broker
BrokerConfig brokerCfg = new BrokerConfig();
brokerCfg.setServerAddress(serverAddress); 
/*brokerCfg.setMaxTotal(threadCount);
brokerCfg.setMinIdle(threadCount);*/

Broker broker = null;
try {
broker = new SingleBroker(brokerCfg);
} catch (IOException e) {
e.printStackTrace();
}

config = new ServiceConfig();
//config.setConsumerCount(threadCount); 
config.setMq(mq); 
config.setBroker(broker);    
config.setMessageProcessor(processor); 

svc = new Service(config);
}

public boolean start(){
try {
svc.start();
isStart = true;
return isStart;
} catch (IOException e) {
e.printStackTrace();
return isStart;

}

}

报错:

Exception in thread "Thread-9" org.zbus.mq.MqException: {"@type":"org.zbus.rpc.RpcCodec$Request","encoding":"UTF-8","method":"sendMessage","module":"","paramTypes":null,"params":["{\"from\":\"Test\",\"to\":\"fb6d56af5fdd4ce9b49ee0f865f83354\"}"]}
at org.zbus.mq.Consumer.recv(Consumer.java:88)
at org.zbus.mq.Consumer$1.run(Consumer.java:145)
at java.lang.Thread.run(Thread.java:745)




<p>
	//测试代码
</p>
<p>
	public static void RPCMessageCenter() {<br>

Prop prop = PropKit.use("play.properties");
String ip = prop.get("zbus.host");
String port = prop.get("zbus.port");

BrokerConfig brokerConfig = new BrokerConfig(); 
brokerConfig.setServerAddress(ip + ":" + port);
Broker broker = null;
try {
broker = new SingleBroker(brokerConfig);
} catch (IOException e) {
e.printStackTrace();
}  
MqInvoker messageInvoker = new MqInvoker(broker, "RPCMessageCenter"); 
RpcInvoker rpc = new RpcInvoker(messageInvoker);     
rpc.setVerbose(true);
Map<String, String> map = new HashMap<String, String>();
map.put("from", "Test");
map.put("to", "fb6d56af5fdd4ce9b49ee0f865f83354");

boolean s = rpc.invokeSync(boolean.class, "sendMessage", JsonKit.toJson(map));

try {
broker.close();
} catch (IOException e) {
e.printStackTrace();
}
}

报错:

2015-12-31 11:07:48
[INFO]-[Thread: main]-[org.zbus.rpc.RpcInvoker.invokeSync()]: [REP]: Time cost=10430ms
null
Exception in thread "main" org.zbus.rpc.RpcException: module()-method(sendMessage) request timeout
GET / HTTP/1.1
ack: 0
cmd: produce
connection: Keep-Alive
content-length: 388
id: 1f01ede3-d068-4e75-a851-6f8217331148
mq: RPCMessageCenter


{"@type":"org.zbus.rpc.RpcCodec$Request","encoding":"UTF-8","method":"sendMessage","module":"","paramTypes":null,"params":["{"from":"Test","to":"fb6d56af5fdd4ce9b49ee0f865f83354"}"]}
at org.zbus.rpc.RpcInvoker.invokeSync(RpcInvoker.java:161)
at org.zbus.rpc.RpcInvoker.invokeSync(RpcInvoker.java:102)
at org.zbus.rpc.RpcInvoker.invokeSync(RpcInvoker.java:75)
at com.zjhcsoft.test.ZBusTest.RPCMessageCenter(ZBusTest.java:341)
at com.zjhcsoft.test.ZBusTest.main(ZBusTest.java:353)


展开
收起
爱吃鱼的程序员 2020-06-10 15:22:03 1087 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    timeout时间设置长点呐

    超时的原因分析:

    1.service端异常

    2.service执行时间过长,导致超时。

    建议service单个方法不要执行长时间任务。可拆分为多个接口!

    2020-06-10 15:22:21
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载