rpc 프레임워크에는 다음이 포함됩니다. 1. RMI, 원격 메서드 호출 2. Hessian, HTTP 기반 원격 메서드 호출 3. Taobao의 오픈 소스 TCP 기반 RPC 프레임워크인 Dubbo.
RPC 프레임워크에는 다음이 포함됩니다.
RPC는 원격 프로시저 호출의 약어입니다. 이 기능은 대규모 분산 애플리케이션에서 널리 사용됩니다. 시스템 확장이 더 쉽습니다. Java에는 각각 고유한 특성을 가진 많은 RPC 프레임워크가 있으며 널리 사용되는 프레임워크로는 RMI, Hessian, Dubbo 등이 있습니다. RPC의 또 다른 특징은 언어 간 교차가 가능하다는 것입니다. 이 기사에서는 JAVA 언어의 RPC만 예로 들어 보겠습니다.
RMI를 예로 들어 RPC에 대한 논리적 관계 다이어그램이 있습니다.
다른 프레임워크 구조는 객체의 직렬화 방법, 통신 프로토콜에 있습니다. 개체 전송, 등록 센터 관리 및 장애 조치 설계(동물 사육사 사용).
클라이언트와 서버는 서로 다른 JVM에서 실행될 수 있습니다. 클라이언트는 인터페이스 구현과 런타임에 필요한 데이터가 모두 서버 측에 있습니다. RPC는 직렬화를 사용합니다. , 역직렬화 및 JAVA의 전송 프로토콜은 객체의 직렬화, 역직렬화 및 직렬화된 데이터의 전송에 해당합니다. RMI의 직렬화 및 역직렬화는 JAVA에 기본이며 전송 프로토콜은 HTTP이며 다양한 옵션 중에서 선택할 수 있습니다. 전송은 일반적으로 TCP 프로토콜을 사용합니다. 고성능 NIO 프레임워크 Netty. Google의 ProBuffer, JBoss Marshalling, Apache Thrift 등 직렬화에 대해서도 알고 있습니다. ProBuffer
1을 소개하는 블로그 게시물을 작성했습니다. RMI(Remote Method Invocation)
JAVA에는 자체 원격 메서드 호출 도구이지만 결국에는 JAVA 언어의 원래 설계였으며 나중에 RMI의 사용 원칙은 다음과 같습니다. 외부 인터페이스
<span style="font-size:12px;">public interface IService extends Remote {
public String queryName(String no) throws RemoteException;
}</span>
서비스 구현
import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; // 服务实现 public class ServiceImpl extends UnicastRemoteObject implements IService { /** */ private static final long serialVersionUID = 682805210518738166L; /** * @throws RemoteException */ protected ServiceImpl() throws RemoteException { super(); } /* (non-Javadoc) * */ @Override public String queryName(String no) throws RemoteException { // 方法的具体实现 System.out.println("hello" + no); return String.valueOf(System.currentTimeMillis()); } }RMI 클라이언트
import java.rmi.AccessException; import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; // RMI客户端 public class Client { public static void main(String[] args) { // 注册管理器 Registry registry = null; try { // 获取服务注册管理器 registry = LocateRegistry.getRegistry("127.0.0.1",8088); // 列出所有注册的服务 String[] list = registry.list(); for(String s : list){ System.out.println(s); } } catch (RemoteException e) { } try { // 根据命名获取服务 IService server = (IService) registry.lookup("vince"); // 调用远程方法 String result = server.queryName("ha ha ha ha"); // 输出调用结果 System.out.println("result from remote : " + result); } catch (AccessException e) { } catch (RemoteException e) { } catch (NotBoundException e) { } } }
RMI 서버
import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; // RMI服务端 public class Server { public static void main(String[] args) { // 注册管理器 Registry registry = null; try { // 创建一个服务注册管理器 registry = LocateRegistry.createRegistry(8088); } catch (RemoteException e) { } try { // 创建一个服务 ServiceImpl server = new ServiceImpl(); // 将服务绑定命名 registry.rebind("vince", server); System.out.println("bind server"); } catch (RemoteException e) { } } }
서비스 등록 관리자는 서버에 작성되어 있습니다. 물론, 다음과 같이 추출할 수도 있습니다. 다른 서비스의 별도 서비스 프레임워크에서 Zookeeper는 등록 관리 역할을 수행하는 데 자주 사용됩니다.
2. Hessian(HTTP 기반 원격 메소드 호출)
은 HTTP 프로토콜 전송을 기반으로 하며, 로드 밸런싱 및 장애 조치는 애플리케이션의 로드 밸런서에 따라 다릅니다. Hessian은 RMI와 유사하지만, 표시된 주소를 통해 호출되며 HessianProxyFactory를 사용하여 구성된 주소를 기반으로 프록시 객체를 생성하고 Hessian의 Jar 패키지를 도입한다는 차이점이 있습니다.
3. Dubbo(Taobao의 오픈소스 TCP 기반 RPC 프레임워크)
Alibaba에서 오픈소스로 제공하는 Netty 기반의 고성능 RPC 프레임워크입니다.
Dubbo를 이해하기 전에 먼저 Zookeeper에 대한 깊은 이해가 있어야 합니다. 일단 Zookeeper를 이해하면 Dubbo에는 비밀이 없습니다.
Dubbo에 대한 자세한 설명은 Taobao Open Source에 매우 자세하게 설명되어 있습니다. Dubbo는 작업 중 많은 제작 프로젝트에 사용되며, 특히 부적절한 구성에 주의가 필요한 사항도 많이 발견했습니다. 문제를 일으키기 때문에 기존 오픈소스 Dubbo를 기반으로 맞춤화하고 최적화하는 것이 가장 좋습니다.
관련 무료 학습 권장사항:
Java 기본 튜토리얼위 내용은 RPC 프레임워크란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!