Dubbo基础demo

311 阅读2分钟

本案例讲解Dobbo的简单应用 。分别是配置文件和springboot集成2种方式 新建一个maven项目

Dubbo文档

确保Zookeeper运行

参考 Zookeeper 安装 因为Dubbo 需要依赖Zookeeper可以本地安装 或者开虚拟机中的Zookeeper

架构图

Dubbo github地址

image.png

image.png

image.png

XML配置 Demo

创建项目

  • 创建一个maven父项目 然后创建3个子Module的 maven 项目
  • maven父项目 删除src 用不上,然后修改packing
<packaging>pom</packaging>

image.png

  • api 中写一个接口 提供api功能 我感觉就是摆设 😄 不需创建都行
  • server 中要实现 api的接口 提供实现功能
  • client 中需要调用 server的api功能。至于怎么获取 就是rpc了

添加Dubbo依赖

serverclient 中添加依赖

添加api依赖

dependencyManagement 在父Maven中管理版本控制

在 父项目中 pom.xml

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.wpp.demo</groupId>
            <artifactId>demo-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</dependencyManagement>

在 client 和 server 中

<dependencies>
    <dependency>
        <groupId>com.wpp.demo</groupId>
        <artifactId>demo-api</artifactId>
    </dependency>
</dependencies>

image.png

添加dubbo依赖

参考 github网站 添加依赖

image.png

配置方式和 api配置一样就行 父项目进行版本控制 然后子项目直接依赖

<properties>
    <dubbo.version>3.0.7</dubbo.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>${dubbo.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-dependencies-zookeeper</artifactId>
        <version>${dubbo.version}</version>
        <type>pom</type>
    </dependency>
</dependencies>

编写逻辑

api 提供 接口

image.png

server 实现 和 启动服务 注册服务

  • 实现 image.png
  • xml 配置 注册服务 provider.xml 的配置
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://dubbo.apache.org/schema/dubbo https://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    <!--1 配置应用名字: 方便应用的监控管理-->
    <dubbo:application name="demo-provider"/>
    <!--2 配置注册中心的地址-->
    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
    <!--3 配置通信的协议和通信端口-->
    <dubbo:protocol name="dubbo" port="20890"/>
    <!--4 配置提供服务的Bean对象-->
    <bean id="demoService" class="com.wpp.demo.HelloServiceImpl"/>
    <!--5 申明提供的服务 -->
    <dubbo:service interface="com.wpp.demo.IHelloService" ref="demoService"/>
</beans>
  • 启动服务 创建一个类 main方法启动

image.png

启动后 会注册 Zookeeper

image.png

client 调用

  • 订阅
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://dubbo.apache.org/schema/dubbo https://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    <!--1 配置应用名称-->
    <dubbo:application name="demo-consumer"/>
    <!--2 配置注册中心 -->
    <dubbo:registry  address="zookeeper://127.0.0.1:2181"/>
    <!--3 引入服务-->
    <dubbo:reference id="demoService" check="false" interface="com.wpp.demo.IHelloService"/>
</beans>
  • 发送远程调用

  • 相应数据

image.png

xml配置

provider.xml

就是server 配置

  • 在resources 下面创建一个xml文件 参考# XML 配置

image.png

这里把http 改成https 【dubbo.apache.org/schema/dubb… 然后端口 20890 和 老师demo 不一样 但是感觉没啥问题 😄 大胆尝试

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://dubbo.apache.org/schema/dubbo https://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    <!--1 配置应用名字: 方便应用的监控管理-->
    <dubbo:application name="demo-provider"/>
    <!--2 配置注册中心的地址-->
    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
    <!--3 配置通信的协议和通信端口-->
    <dubbo:protocol name="dubbo" port="20890"/>
    <!--4 配置提供服务的Bean对象-->
    <bean id="demoService" class="com.wpp.demo.HelloServiceImpl"/>
    <!--5 申明提供的服务 -->
    <dubbo:service interface="com.wpp.demo.IHelloService" ref="demoService"/>
</beans>

consumer.xml

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://dubbo.apache.org/schema/dubbo https://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    <!--1 配置应用名称-->
    <dubbo:application name="demo-consumer"/>
    <!--2 配置注册中心 -->
    <dubbo:registry  address="zookeeper://127.0.0.1:2181"/>
    <!--3 引入服务-->
    <dubbo:reference id="demoService" check="false" interface="com.wpp.demo.IHelloService"/>
</beans>

注解配置 Demo

github

image.png

image.png

配置

server client 保持基本一致

image.png

  • 属性配置
<spring-boot.version>2.6.7</spring-boot.version>
<dubbo.version>2.7.8</dubbo.version>
  • dependencyManagement
<dependencyManagement>
    <dependencies>
        <!-- Spring Boot -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <!-- Apache Dubbo  -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-bom</artifactId>
            <version>${dubbo.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

    </dependencies>
</dependencyManagement>
  • 依赖
<!-- Dubbo Spring Boot Starter -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.8</version>
</dependency>
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-dependencies-zookeeper</artifactId>
    <version>${dubbo.version}</version>
    <type>pom</type>
</dependency>

server client

application.properties

server

server.port=7100
# dubbo-provider.properties
dubbo.application.name=annotation-provider
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.scan.base-packages=com.wpp.demo

client

server.port=7101
dubbo.application.name=annotation-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.consumer.timeout=3000

注意点

@Service

别忘记了 @Service

image.png

@Reference

image.png

其他配置 比如API等