Dubbo入门程序(直连式)

本文介绍了Dubbo的基础知识,包括其在业务场景中的应用和体系结构。通过创建提供者和服务消费者,展示了如何在SpringBoot中整合Dubbo进行直连式服务调用,以及详细的操作步骤。最后,通过执行结果验证了服务调用的成功。
摘要由CSDN通过智能技术生成

1 什么是Dubbo?

摘自百度:

Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC
实现服务的输出和输入功能,可以和 [1] Spring框架无缝集成。 Dubbo是一款高性能、轻量级的开源Java
RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

1.1 业务场景

在实际开发中,经常会出现这样的场景:A项目需要调用B项目的接口来获取所需要的数据,A项目并不关心B项目的实现细节,只需要B项目暴露一个接口来给A项目来调用即可。因此,使用dubbo能让这变得简单。

1.2 Dubbo体系结构

摘自Dubbo官网的体系结构:
在这里插入图片描述
dubbo的核心组件
消费者(customer),调用远程服务的一方称为"消费者";
提供者(provider),暴露服务的一方称为“提供者";
注册中心(Register),服务注册与发现的中心目录服务称之为“服务注册中心”。
监控中心(Monitor),统计服务的调用次数和调用时间的日志服务称之为“服务监控中心”。

结合上图与组件,我们来熟悉下dubbo的执行流程以及各组件分工:

1)首先启动Provider(提供者)容器,然后提供者会通过ajax请求到注册中心注册服务;然后当消费者(customer)容器启动后,会通过ajax请求到注册中心去订阅服务。
2)当提供者增加了新的服务,会注册到Registry中,然后Registry会通知(notify)消费者。
3)Monitor会统计调用服务的次数与时间。

2.springBoot整合dubbo架构图

此处使用dubbo直连方式,快速入门dubbo:

通过创建2个Maven项目来引入dubbo进行服务调用。
在这里插入图片描述

3.实现步骤

3.1 创建提供者(provider01):

1.新建一个普通的Maven Project项目,创建Service跟启动类:
在这里插入图片描述
2.创建Service,实现具体的服务细节:

BaseService 接口类:

public interface BaseService {
    String hello(String name);
}
 

SomeServiceImpl实现类:

public class SomeServiceImpl  implements BaseService {

    public String hello(String name){
        System.out.println(name+",大家好,我是提供者。");
        return "hello,Dubbo! -->"+name;
    }
}

3.在pom.xml中引入spring依赖以及dubbo依赖:

pom.xml :

 <dependencies>
        <!--dubbo依赖-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.0</version>
        </dependency>

        <!--spring依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring-version}</version>
        </dependency>

        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>

4.dubbo配置文件spring-provider.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

        <!--指定当前工程在管控平台中的名称-->
        <dubbo:application name="provider01" />
        <!--指定注册中心:不使用注册中心-->
        <dubbo:registry address="N/A" />
        <!--注册业务接口实现类,它是真正的服务提供者-->
        <bean id="someService" class="com.test.service.impl.SomeServiceImpl"/>
        <!--服务暴露-->
        <dubbo:service interface="com.test.service.BaseService" ref="someService" />
</beans>

5.编写main方法启动服务:

ProviderRun类:用于启动该java application

public class ProviderRun {
    public static void main(String[] args) throws IOException {
        //创建Spring容器
        ApplicationContext  ac  = new ClassPathXmlApplicationContext("spring-provider.xml");
        //启动Spring容器
        ((ClassPathXmlApplicationContext)ac).start();
        //使用主线程阻塞
        System.in.read();
    }
}

6.执行main方法:
在这里插入图片描述
执行main方法后,我们让该线程阻塞,等候消费者调用。当看到上图中的打印日志,提示我们dubbo服务发布成功,并且显示了远程调用服务的url,接口名等元数据时,就说明dubbo提供者已经发布成功了。

3.2 创建消费者(customer01):

1.新建一个普通的Maven Project项目,创建Service跟main入口:
在这里插入图片描述
2.业务接口类,BaseService:

public interface BaseService {
    String hello(String name);
}

3.dubbo消费者配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

        <!--指定当前工程在管控平台中的名称-->
        <dubbo:application name="customer01" />
        <!--指定注册中心:不使用注册中心-->
        <dubbo:registry address="N/A"/>
        <!--直连式提供者-->
        <dubbo:reference id="someService" interface="com.test.service.BaseService" url="dubbo://localhost:20880"/>
</beans>

4.pom.xml jar包依赖(跟提供者依赖一致):

<properties>
        <!--自定义版本号-->
        <spring-version>4.3.16.RELEASE</spring-version>
    </properties>

    <dependencies>

        <!--dubbo依赖-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.0</version>
        </dependency>

        <!--spring依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring-version}</version>
        </dependency>

        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>

    </dependencies>

5.main方法启动类,CustomerRun:

public class CustomerRun {

   public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("spring-customer.xml");
        BaseService service = (BaseService) ac.getBean("someService");
        String hello = service.hello("zhangSheng");
        System.out.println(hello);
    }
}

4.效果以及总结

1.先执行maven项目provider01的main方法,由该提供者暴露服务:
在这里插入图片描述
2.再执行maven项目customer01的main方法,来调用服务:
在这里插入图片描述
在这里插入图片描述

总结:好了,由效果图可看出,我们成功通过spring整合了dubbo。来实现了服务的调用。此处没有使用任何的注册中心,方便大家快速入门来理解该远程RPC框架。(博主后面会陆续记录spring+dubbo+zookeeper的使用)循序渐进,一起成长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瓜仙人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值