RemoteInvocationHandler.java 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package cn.hhj.proxy.remote;
  2. import cn.hhj.disovery.IServiceDiscovery;
  3. import cn.hhj.request.RpcRequest;
  4. import cn.hhj.rpcsend.RpcNetTransport;
  5. import org.springframework.util.StringUtils;
  6. import java.lang.reflect.InvocationHandler;
  7. import java.lang.reflect.Method;
  8. import java.util.List;
  9. public class RemoteInvocationHandler implements InvocationHandler {
  10. private IServiceDiscovery serviceDiscovery;
  11. private String version;
  12. public RemoteInvocationHandler(IServiceDiscovery serviceDiscovery, String version) {
  13. this.serviceDiscovery = serviceDiscovery;
  14. this.version = version;
  15. }
  16. @Override
  17. public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  18. // 进行请求数据的包装
  19. RpcRequest request=new RpcRequest();
  20. request.setClassName(method.getDeclaringClass().getName());
  21. request.setMethodName(method.getName());
  22. request.setParamTypes(method.getParameterTypes());
  23. request.setParameters(args);
  24. request.setVersion(version);
  25. String serviceName=request.getClassName();
  26. if(!StringUtils.isEmpty(version)){
  27. serviceName=serviceName+"-"+version;
  28. }
  29. List<String> serviceAddress=serviceDiscovery.discovery(serviceName);
  30. RpcNetTransport rnt=new RpcNetTransport(serviceAddress);
  31. Object result=rnt.send(request);
  32. System.err.println("【client】:远程通信,需要调用的接口是:"+serviceName);
  33. return result;
  34. }
  35. }