翻译 - 당신의 첫번째 두보 응용 프로그램

귀하의-최초 두보 - 데모

첫 번째 두보 데모

자바 RMI 소개 (RMI 프로필)

RMI는 액세스를 허용하거나 다른 JVM에서 객체 나 메소드를 호출 할 수있는 메커니즘이다. RMI는 자바 언어의 OOP 지원을 사용하여, 특별한 RPC입니다. 사용자 인터페이스를 간단하고 자연적인 방법에 따라, IDL 분산 응용 프로그램을 구축 할 수 있습니다 (인터페이스 언어 정의) 전달할 수 없습니다.

자바 RMI 워크 플로우 (RMI 워크 플로우)

  1. 서비스 서비스 등록에 끝 RMI 인터페이스를 결합;
  2. 클라이언트와는 RMI 원격 인터페이스 수준의 서비스에 도착;
  3. 클라이언트는 시내 전화와 같은 다른 객체처럼, 로컬 스텁 객체 메소드를 호출;
  4. 로컬 스텁 오브젝트 압축 요구 정보, 및 네트워크를 통해 서버에 전송한다;
  5. 프레임 워크 코드를 다운로드 서버는 네트워크 요청, 및 압축 해제를 수신한다.
  6. 서버 메소드 호출 정보 요구 대상물, 그 결과 압축하고, 네트워크를 통해 클라이언트로 반환된다.

영상

RMI의 개념의 일부

자바 RMI는 분산 응용 프로그램을 자바 필드를 만들 수있는 초석 기술입니다. 현재 서비스의 EJB 기술과 분산 프레임 워크는 여전히 자바 RMI의 기본 개념을 상속합니다. RMI의 호출에서, 우리는 다음과 같은 핵심 개념을 가지고 :

  1. 원격 호출은 인터페이스에 따라 달라집니다
  2. 위장 비용이 전화를 원격 호출, 호출 된 클라이언트 스텁 개체 , 서비스 측면이라고 해골 개체 .
  3. 서비스는 RMI 레지스트리 및 검색에 등록됩니다.
    첫 번째 점에 : 클라이언트에 의존하는 인터페이스는 서버를 구현해야합니다.
    두 번째 점의 경우 : J2SE 1.5 전, 클라이언트와 서버는 rmic를 미리 컴파일 할 필요가 스텁 객체해골 개체 . 이후 버전은 그렇게 할 필요가 없습니다.

코드 예 :

서버 서비스 레지스트리
// 初始化服务实例
Hello obj = new HelloImpl(); 
// 创建存根对象
Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0); // #2
// 创建注册服务
Registry registry = LocateRegistry.createRegistry(1099); // #3
// 注册并绑定存根对象,客户端即可以通过Hello来找到服务
registry.rebind("Hello", stub); // #4
클라이언트 서비스 룩업
// 获取注册中心实例
Registry registry = LocateRegistry.getRegistry(); 
// 寻找名字叫Hello的那个服务实例
Hello stub = (Hello) registry.lookup("Hello");
// 调用RMI远程调用
String response = stub.sayHello(); 

워크 플로우의 기본 개념을 이해하고 RMI는 현재 분산 서비스 프레임 워크에 대한 많은 도움이 될 것입니다.
자세한 내용은 RMI와 다른 공식 문서를 읽고 추천합니다.

두보의 기본 개념 (두보의 기본 개념)

현재 분산 서비스 및 RMI 프레임 워크의 기본 개념과 유사하다. 그들은 등록 및 프록시는 원격 통신의 세부 사항을 숨기 사용하여 레지스트리를 조회, 서비스 계약으로 자바 인터페이스를 사용합니다. 두보를 실행할 때 특히, 역할의 네 가지 유형이 있습니다

  • 서비스 제공 업체, 지정된 포트 초기화시 때 레지스트리에 노출 서비스에 등록 된 주소와 포트 서비스를 제공합니다.
  • 소비자 서비스, 레지스트리에 대한 관심이, 주소 서비스 제공 업체의 목록을 얻을 가입 서비스의 초기화
  • 등록 센터, 등록 및 검색 서비스를 제공합니다. 주소 저장 서비스 제공 업체, 그리고 소비자에게 보냅니다.
  • 중앙 모니터링 수집 및 서비스 제공 업체 및 실행의 소비자, 전화, 호출 지연의 수를 모니터링 할 수 있습니다.
  • 실행 컨테이너로드 초기화 및 서비스 제공, 관리 및 운영주기.

영상

배포 단계
  • 레지스트리에 노출 된 특정 서비스 포트의 초기화, 등록 된 주소와 포트 서비스를 제공합니다.
  • 가입 서비스의 초기화가 ISP 주소 목록 센터 등록에 관심이

    운영 단계
  • 레지스트리 주소는 서비스 소비자로 전송됩니다;
  • 주소 목록을 수신하면, 서비스 소비자는 그들 중 하나를 선택하고 불러합니다.
  • 통화 중, 서비스 제공 업체 및 소비자 작동 상태는 모니터링 센터로 전송됩니다.

API를 기반으로 두보 응용 프로그램

두보는 일반적으로 스프링에 의해 조립된다. 신속하게 서비스 제공자와 서비스 소비자를 만들 수 두보 API를 지향 방법에 여기 포기 복잡한 구성하는 두보가 적용되는 예를 만듭니다. 또한, 본 예는 설치 또는 구성 레지스트리 및 모니터링 센터를 필요로하지 않습니다.

在生产环境中,Dubbo服务通常需要和分布式服务注册中心配合起来,比如zookeeper。出于方便的考虑,dubbo提供了俩种方式来避免额外的关于建构注册中心的工作,分别是【namely direct connection】和【assembled podcast】。
本例中使用了后者来注册和查找服务。

Define Service Contract(定义服务契约)
public interface GreetingsService {
    String sayHi(String name); // #1
}

定义了一个简单的服务契约,仅仅只有一个方法【sayHi】会被调用。
入参和返回值都是string类型的。
Provide Contract Implementation(提供契约实现)
public class GreetingsServiceImpl implements GreetingsService { // #1
    @Override
    public String sayHi(String name) {
        return "hi, " + name; // #2
    }
}
服务提供者需要实现服务契约的接口【GreetingsService】。
Implement Dubbo Service Provider(实现服务提供者)
public class Application {
    public static void main(String[] args) throws IOException {
        // 创建一个ServiceConfig 实例,类型是GreetingsService
        ServiceConfig<GreetingsService> service = new ServiceConfig<>(); 
        // 创建一个ApplicationConfig 实例,并将之组装到ServiceConfig实例中
        service.setApplication(new ApplicationConfig("first-dubbo-provider"));
        // 创建一个RegistryConfig 实例,并将之组装到ServiceConfig实例中。
        // 因为注册中心使用的是上文提到的第二种方案,所以参数应该是【multicast://224.5.6.7:1234】
        // 有效的assembled地址范围是224.0.0.0 - 239.255.255.255
        service.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234")); 
        // 将服务契约GreetingsService 组装到ServiceConfig实例中
        service.setInterface(GreetingsService.class); 
        // 将服务提供者提供的GreetingsServicelmpl实例组装到ServiceConfig实例中
        service.setRef(new GreetingsServiceImpl()); 
        // 装配好足够的信息后,ServiceConfig实例开始将自己暴露在默认的端口20880。
        service.export();
        // 按任意键或ctrl-c退出以避免服务器停止。
        System.in.read(); 
    }
}
Implement Dubbo Service Consumer(实现dubbo的服务消费者)
public class Application {
    public static void main(String[] args) {
        // 创建一个指定类型为GreetingsService的ReferenceConfig 实例
        ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>(); // #1
        // AplicatonConfig实例
        reference.setApplication(new ApplicationConfig("first-dubbo-client")); // #2
        // 创建RegistryConfig实例,地址必须和服务提供者一样
        reference.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234")); // #3
        reference.setInterface(GreetingsService.class); // #4
        // 从ReferenceConfig中获得一个GreetingsService的代理
        GreetingsService greetingsService = reference.get(); // #5
        // 通过GreetingsService代理执行远程调用
        String message = greetingsService.sayHi("dubbo"); // #6
        System.out.println(message); // #7
    }
}

run (运行这个例子)

完整的例子可以从 https://github.com/dubbo/dubbo-samples/tree/master/dubbo-samples-api中获得。通过maven或者直接使用ide都可以很方便运行这个例子。一个值得注意的是:因为使用了委派的方式来查找服务,运行的时候需要加上【-Djava.net.preferIPv4Stack=true】。

Build Example(构造实例代码)
  1. 下载代码:git clone https://github.com/dubbo/dubbo-samples.git
  2. Build:mvn clean package
$ git clone https://github.com/dubbo/dubbo-samples.git
$ cd dubbo-samples/dubbo-samples-api/
$ mvn clean package
INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building dubbo-samples-api 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ dubbo-samples-api ---
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.182 s
[INFO] Finished at: 2018-05-28T14:56:08+08:00
[INFO] Final Memory: 20M/353M
[INFO] ------------------------------------------------------------------------
Run the server(运行服务)
$ mvn -Djava.net.preferIPv4Stack=true -Dexec.mainClass=org.apache.dubbo.samples.provider.Application exec:java
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building dubbo-samples-api 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- exec-maven-plugin:1.6.0:java (default-cli) @ dubbo-samples-api ---
log4j:WARN No appenders could be found for logger (org.apache.dubbo.common.logger.LoggerFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
first-dubbo-provider is running.
Run the server(运行客户端)
$ mvn -Djava.net.preferIPv4Stack=true -Dexec.mainClass=org.apache.dubbo.samples.consumer.Application exec:java
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building dubbo-samples-api 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- exec-maven-plugin:1.6.0:java (default-cli) @ dubbo-samples-api ---
log4j:WARN No appenders could be found for logger (org.apache.dubbo.common.logger.LoggerFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
hi, dubbo

Quick Creation of A Dubbo Application

http://start.dubbo.io下载(跟spring.io下载boot项目类似)

Summary

后续教程

Dubbo user manual

두보 개발자 가이드

두보 관리자 설명서

추천

출처www.cnblogs.com/po-shi/p/11236697.html