从零开始学Dubbo-基础篇-远程调用使用

1,264 阅读2分钟

本篇主要讲述了dubbo的远程调用如何使用。将会通过一个案例来讲解。

一共分为四步:

  • 1.创建maven工程,定义jar包版本
  • 2.创建api模块,规范接口
  • 3.创建provider模块,引入api模块,注册到注册中心供消费者使用,作为服务的提供者
  • 4.创建consumer模块,作为服务的消费者,引入注册中心,调用服务提供者

1.创建maven工程

首先创建基本的maven工程 image.png 然后配置配置groupId以及artifactId image.png 然后在pom.xml引入依赖.dependencyManagement作用是子模块会引用父模块的版本号。

<properties>
    <dubbo.version>2.7.1</dubbo.version>
</properties>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-common</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-zookeeper</artifactId>
            <version>${dubbo.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-remoting-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-common</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-rpc-dubbo</artifactId>
            <version>${dubbo.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-remoting-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-common</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-remoting-netty4</artifactId>
            <version>${dubbo.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-remoting-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-serialization-hessian2</artifactId>
            <version>${dubbo.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-common</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</dependencyManagement>

这边dubbo我选择了2.7.1的版本,因为使用2.7.5+jdk11我这边出现了配置无法解析的错误 image.png

2.创建api模块

这里主要就是创建接口,做好规定

image.png

/**
 * @author Davon ding
 * @Description: 接口协定
 * @date 2021/4/10 1:40 下午
 */
public interface HelloDubbo {
    String sayHello(String name);
}

3.创建provider模块

首先pom.xml引入所需依赖

<dependencies>
    <dependency>
        <groupId>com.study</groupId>
        <artifactId>dubbo-service-api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-registry-zookeeper</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-rpc-dubbo</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-remoting-netty4</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-serialization-hessian2</artifactId>
    </dependency>
</dependencies>

1.实现api接口

//这个service是dubbo的service
@Service
public class HellowDubboImpl implements HelloDubbo {
    @Override
    public String sayHello(String name) {
        return "provider ack:"+name;
    }
}

2.设置配置类,以及启动类

这边直接写在一起

public class DubboPureMain {

    public static void main(String[] args) throws IOException {
        //加载配置类
        AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(ProviderConfiguration.class);
        //启动容器
        context.start();
        //保证程序一直运行
        System.in.read();
    }

    //标记是配置类
    @Configuration
    //扫包 类似于componetscan
    @EnableDubbo(scanBasePackages  = "com.study.service")
    //读取配置文件
    @PropertySource("classpath:/dubbo-provider.properties")
    static class ProviderConfiguration{
        @Bean
        public RegistryConfig registryConfig(){
            RegistryConfig registryConfig=new RegistryConfig();
            //设置zk地址 注册中心地址
            registryConfig.setAddress("zookeeper://10.0.9.173:2181");
            return registryConfig;
        }
    }
}

接下来看一下配置文件信息

#服务名称
dubbo.application.name=dubbo-service-provider
#使用的协议
dubbo.protocol.name=dubbo
#端口号
dubbo.protocol.port=20881

4.创建consumer模块

1.实现对api接口的调用

@Component
public class ConsumerCompent {
    //dubbo的注解,加载对象时会生成代理存入
    @Reference
    private HelloDubbo helloDubbo;

    public String sayHello(String name){
        return helloDubbo.sayHello(name);
    }

}

2.设置配置类、启动类

public class AnnotationConsumerMain {

    public static void main(String[] args) throws IOException {
        AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(ConsumerConfiguation.class);
        context.start();
        //获取对象
        final ConsumerCompent bean = context.getBean(ConsumerCompent.class);
        //测试
        while (true){
            System.in.read();
            String hello=bean.sayHello("test");
            System.out.println("consumer post:"+hello);
        }
    }

    @Configuration
    @PropertySource("classpath:/dubbo-consumer.properties")
    //spring扫描
    @ComponentScan(basePackages = "com.study.bean")
    @EnableDubbo
    static class ConsumerConfiguation{

    }
}

看一下消费者的配置文件

//服务名
dubbo.application.name=dubbo-service-consumer
//dubbo注册中心地址
dubbo.registry.address=zookeeper://10.0.9.173:2181

测试

上面四步就是简易的远程调用实例,接下来测试一下效果,要先启动provider再启动consumer。 输入123回车,则会调用4次,结果如下:

image.png