问题描述
每次client调用server端,均有正常返回,但是server端还会多打出一些异常信息,如下。
org.apache.thrift.transport.TTransportException: null
at org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:132)
at org.apache.thrift.transport.TTransport.readAll(TTransport.java:86)
at org.apache.thrift.protocol.TBinaryProtocol.readAll(TBinaryProtocol.java:425)
at org.apache.thrift.protocol.TBinaryProtocol.readI32(TBinaryProtocol.java:321)
at org.apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.java:225)
at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:27)
at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
问题出现的环境背景及自己尝试过哪些方法
对thrift不熟悉,刚接触,根本不知道哪里去找原因。
相关代码
server端代码
import com.username.service.controllers.ServiceImpl;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TServerTransport;
import org.apache.thrift.transport.TTransportException;
public class StartService implements Runnable{
private static boolean breg = false;
public void starWeather() throws TTransportException {
TBinaryProtocol.Factory proFactory = new TBinaryProtocol.Factory();
ServiceImpl handler = new ServiceImpl();
WeatherService.Processor processor= new WeatherService.Processor(handler);
TServerTransport serverTransport = new TServerSocket(9000);
TThreadPoolServer.Args serverArgs = new TThreadPoolServer.Args(serverTransport);
serverArgs.processor(processor);
serverArgs.protocolFactory(proFactory);
TServer server = new TThreadPoolServer(serverArgs);
breg = true;
server.serve();
}
@Override
public void run() {
try {
if (!breg)
starWeather();
} catch (TTransportException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) throws TTransportException {
StartService server = new StartService();
server.starWeather();
}
}
client端代码
package com.xiaohuan.client;
import com.username.rpc.weather_service.WeatherService;
import com.username.rpc.weather_service.entity.Weather;
import com.username.rpc.weather_service.request.GetCityWeatherRequest;
import com.username.rpc.weather_service.response.GetCityWeatherResponse;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.RetryNTimes;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;
import java.util.*;
import static com.username.client.WeatherConstants.RPCNAME;
import static com.username.client.ZkConstants.connectString;
public class CallWeatherRPC {
public String callWeather(String ip, int port, String city) {
String retString = null;
try {
TTransport transport = new TSocket(ip, port);
transport.open();
TProtocol protocol = new TBinaryProtocol(transport);
WeatherService.Client client = new WeatherService.Client(protocol);
GetCityWeatherRequest request = new GetCityWeatherRequest();
request.setCity(city);
GetCityWeatherResponse response = client.get_city_weather(request);
if(response.isSuccess()){
List<Weather> weatherList = response.getWeather();
System.out.println(weatherList.get(0).getCity());
retString = weatherList.get(0).getCity() + weatherList.get(0).getTemperature();
}else{
System.out.println(response.getError_message());
}
transport.close();
} catch (TTransportException e) {
e.printStackTrace();
} catch (TException e) {
e.printStackTrace();
}
System.out.println("retString:"+retString);
return retString;
}
public static void main(String[] args) {
CallWeatherRPC client = new CallWeatherRPC();
client.callWeather("127.0.0.1", 9000, "123");
}
}
你期待的结果是什么?实际看到的错误信息又是什么?
虽然不影响功能,但是为什么server会多打印异常信息呢
是thrift的异常捕获代码写错了,没有处理到。
0.12.0版本的TThreadPoolServer.java第315行