/**
*
*/
package com.dianping.pigeon.remoting.invoker.process;
import com.dianping.pigeon.log.Logger;
import com.dianping.pigeon.log.LoggerLoader;
import com.dianping.pigeon.monitor.Monitor;
import com.dianping.pigeon.monitor.MonitorLoader;
import com.dianping.pigeon.remoting.common.domain.InvocationResponse;
import com.dianping.pigeon.remoting.invoker.Client;
import com.dianping.pigeon.remoting.invoker.process.threadpool.ResponseThreadPoolProcessor;
/**
* @author xiangwu
*
*/
public abstract class AbstractResponseProcessor implements ResponseProcessor {
protected static final Logger logger = LoggerLoader.getLogger(ResponseThreadPoolProcessor.class);
protected static final Monitor monitor = MonitorLoader.getMonitor();
public abstract void doProcessResponse(InvocationResponse response, Client client);
@Override
public void processResponse(InvocationResponse response, Client client) {
try {
doProcessResponse(response, client);
} catch (Throwable e) {
String error = String.format("process response failed:%s, processor stats:%s", response,
getProcessorStatistics());
logger.error(error, e);
if(monitor != null) {
monitor.logError(error, e);
}
}
}
}