Dubbo的入门学习教程

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

概念

RPC(Remote Procedure Call Protocol):远程过程调用: 
两台服务器A、B,分别部署不同的应用a,b。当A服务器想要调用B服务器上应用b提供的函数或方法的时候,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义传达调用的数据。 
说白了,就是你在你的机器上写了一个程序,我这边是无法直接调用的,这个时候就出现了一个远程服务调用的概念。

目录结构

Dubbo的入门学习教程_第1张图片

依赖管理

pom.xml 依赖配置



    4.0.0
    dubbo-stuty01-start
    yh
    1.0-SNAPSHOT

    
        
        UTF-8
        UTF-8
        1.8
        
        1.8
        1.8
        UTF-8
        
        4.3.7.RELEASE
    


    
        
            
                org.springframework
                spring-framework-bom
                ${spring.version}
                pom
                import
            
        
    
    
        
        
            org.springframework
            spring-core
        
        
            org.springframework
            spring-beans
        
        
            org.springframework
            spring-context
        
        
        
            com.alibaba
            dubbo
            2.5.3
        

        
        
        com.github.sgroschupf
        zkclient
        0.1
        

    

服务接口

在新建包com.yh.dubbo下创建服务接口,该接口是服务提供者和消费者同时能看到的。

package com.yh.dubbo;

/**
  * @Description:   service 接口,提供者和消费者都能看到。实现由提供者来完成。
  * @Author:        张颖辉(yh)
  * @Date:          2018/7/24 17:08
  * @param:
  * @return:
  * @Version:       1.0
  */
public interface IDemoService {
    public String sayHello(String name);
}

服务实现

新建提供者包:com.yh.dubbo.provider 下创建服务实现类

package com.yh.dubbo.provider;

import com.yh.dubbo.IDemoService;

/**
 * @Description: Description
 * @Author: 张颖辉(yh)
 * @CreateDate: 2018/7/17 10:21
 * @UpdateUser: 张颖辉(yh)
 * @UpdateDate: 2018/7/17 10:21
 * @UpdateRemark: The modified content
 * @Version: 1.0
 */
public class DemoServiceImpl implements IDemoService {

    @Override
    public String sayHello(String name) {
        return "Hello,"+name;
    }
}

提供者配置

基于spring的服务提供者配置spring-provider.xml



    
    
    
    
    
    
    
    
    
    
    
    

         从配置中可以看出注册中心使用的zookeeper这也是官方推荐使用的注册中心,如果为了快速入门,没有安装zookeeper,那么可以换为多播/组播来替代zk作为注册中心,最后会讲怎么来使用多播/组播来做注册中心。

提供者启动类

服务提供者加载spring-provider.xml配置文件的启动入口

package com.yh.dubbo.provider;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

/**
 * @Description: Description
 * @Author: 张颖辉(yh)
 * @CreateDate: 2018/7/17 10:37
 * @UpdateUser: 张颖辉(yh)
 * @UpdateDate: 2018/7/17 10:37
 * @UpdateRemark: The modified content
 * @Version: 1.0
 */
public class ProviderStart {

    public static void main(String[] args) throws IOException {
//        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
//                new String[]{"http://10.20.160.198/wiki/display/dubbo/provider.xml"});
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                new String[]{"spring-provider.xml"});
        context.start();
        System.in.read();
    }
}

消费者配置

服务消费者配置spring-consumer.xml



    
    
    
    
    
    
    
    

    在上面的配置中我们看到,和服务相关的只引用了服务的接口,并没有使用服务的实现类。最后我们要通过dubbo来展现出RPC的效果。 

消费者启动类

服务消费者加载配置文件spring-consumer.xml,启动spring容器后并调用服务

package com.yh.dubbo.consumer;

import com.yh.dubbo.IDemoService;
import com.yh.dubbo.provider.DemoServiceImpl;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.Scanner;

/**
 * @Description: 消费者启动,并调用服务
 * @Author: 张颖辉(yh)
 * @CreateDate: 2018/7/17 10:37
 * @UpdateUser: 张颖辉(yh)
 * @UpdateDate: 2018/7/17 10:37
 * @UpdateRemark: The modified content
 * @Version: 1.0
 */
public class ConsumerStart {

    public static void main(String[] args) {
//        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
//                new String[]{"http://10.20.160.198/wiki/display/dubbo/consumer.xml"});
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                new String[]{"spring-consumer.xml"});
        context.start();
        IDemoService demoService=(IDemoService)context.getBean("demoService");
        System.out.println(demoService.sayHello("yh"));
        while (true){
            Scanner scanner=new Scanner(System.in);
            System.out.println(demoService.sayHello(scanner.next()));
        }
    }
}

运行效果

分别启动服务提供者和消费者,就是上面的代码中的两个main函数。

会在消费者的控制台看到:

b902ea93b46792b64386a184e845bf3fd0e.jpg

这说明消费者端可以正确的调用提供者对service接口的实现,并返回了期望的结果。

之后再控制台手动输入文字,回车

Dubbo的入门学习教程_第2张图片

手动输入的内容也正确的被处理和返回。

到此我们简单的实现了dubbo的使用了,上面的启动我们是靠着两个main函数启动的,实际上我们只要按照上面配置。在项目的spring容器启动的时候dubbo也会随之启动,并且消费者这边会自动将服务的实现类对象装载到spring容器中,和平常一样使用去注入service即可。

使用 multicast(多播/注册)作为注册中心

将上文中的两个spring配置文件的配置中多播的部分解除注释,把zookeeper部分的注释掉。

注意:zookeeper需要使用你自己安装的IP地址和端口号,但是多播/组播中配置的IP端口不需要任何改动。

重复上面的启动过程就好了,没错就是这么简单:放开multicast配置这行的注释——给zookeeper这行加上注释——启动!

错误参考:

如果使用multicast报错[DUBBO] Ignore empty notify urls for subscribe url的解决办法。

转载于:https://my.oschina.net/iyinghui/blog/1862324

你可能感兴趣的:(Dubbo的入门学习教程)