12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- package cn.hhj.server;
- import cn.hhj.annotation.RpcService;
- import cn.hhj.constant.Constant;
- import cn.hhj.handler.ProcessorHandler;
- import org.springframework.beans.BeansException;
- import org.springframework.beans.factory.InitializingBean;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.ApplicationContextAware;
- import org.springframework.util.StringUtils;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- public class RpcServer implements ApplicationContextAware, InitializingBean {
- ExecutorService service = Executors.newCachedThreadPool();
- private Map<String,Object> handlerMap=new HashMap();
- @Override
- public void afterPropertiesSet() throws Exception {
- ServerSocket serverSocket=new ServerSocket(Constant.SERVER_PORT);
- while (true){
- Socket socket=serverSocket.accept();
- service.execute(new ProcessorHandler(socket,handlerMap));
- }
- }
- @Override
- public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
- Map<String,Object> serviceBeanMap=applicationContext.getBeansWithAnnotation(RpcService.class);
- if (!serviceBeanMap.isEmpty()){
- for(Object serviceBean:serviceBeanMap.values()){
- RpcService rpcService=serviceBean.getClass().getAnnotation(RpcService.class);
- String serviceName=rpcService.value().getName();//拿到接口类定义
- String version=rpcService.version(); //拿到版本号
- if (!StringUtils.isEmpty(version)){
- serviceName+="-"+version;
- }
- handlerMap.put(serviceName,serviceBean);
- }
- }
- }
- }
|