dubbo环境搭建及demo程序

2 篇文章 0 订阅

一、环境搭建

dubbo(读音[ˈdʌbəʊ])是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现;

1、搭建zooKeeper注册中心

dubbo 的服务注册是基于zooKeeper来实现的,所以需要搭建起来zooKeeper中心。
下载并解压zooKeeper(https://archive.apache.org/dist/zookeeper/zookeeper-3.4.13/)
下载完成后进入到conf目录下找到zoo_sample.cfg文件
打开 后如下:
在这里插入图片描述

注意dataDir是临时数据存放目录,而clientPort指的是默认端口,一般不改就行。
保存后,将zoo_sample.cfg文件复制一份,并改名为zoo.cfg
然后,进入到bin目录下找到zkEnv.cmd文件,这是一个命令执行文件,windows下的。打开后,可以看到,这里其实就定义了几个变量,ZOOCFG和JAVA_HOME等,对照下系统的JAVA_HOME是否设置正确。
保存后,双击bin目录下的zkServer.cmd就能成功启动zookeeper了。
(这是windows下的,如果是linux的话,需要执行 .sh文件)

2、搭建dubbo管理控制台

下载dubbo控制台:
https://github.com/apache/incubator-dubbo-ops
注意,请下载master版本,不要下载过往版本或者 开发版本。
下载后解压,进入到dubbo-admin目录,先打开配置文件看下相关配置是否正确。
dubbo-admin/src/main/resources/application.properties文件主要检查下
dubbo.registry.address
server.port等配置项是否正确
如果正确,回到dubbo-admin目录,进入cmd,输入命令行:
mvn clean package -Dmaven.test.skip=true打包,完成后进入target文件夹,
会看到dubbo-admin-0.0.1-SNAPSHOT.jar包,在cmd命令行中输入:
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
成功后 页面如下:
在这里插入图片描述
用户名密码都是root

3、监控中心搭建

进入到dubbo-monitor-simple目录,同样在 cmd命令行中输入:
mvn clean package -Dmaven.test.skip=true打包,完成后进入target文件夹,
把 dubbo-monitor-simple-2.0.0-assembly.tar.gz 解压缩进入到assembly.bin目录,
运行start.bat,启动成功后访问http://localhost:8080页面如下:
在这里插入图片描述
至此,环境搭建工作,基本完成

二、demo示例(普通maven项目)

1、新建工程

通过IDEA新建一个项目,选择Maven项目就可以,但觉得设置内容有点多,所以直接选择了springboot的项目,

在这里插入图片描述
由于这次不使用springboot,所以把springboot的依赖项都删除,但是添加dubbo和zookeeper的依赖项,把src目录也删掉。
pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xyzh</groupId>
    <artifactId>myduboo-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>myduboo-demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

     <dependencyManagement>
         <dependencies>
             <dependency>
                 <groupId>org.slf4j</groupId>
                 <artifactId>slf4j-api</artifactId>
                 <version>1.7.28</version>
             </dependency>
             <!-- 添加 dubbo 依赖包 -->
             <dependency>
                 <groupId>com.alibaba</groupId>
                 <artifactId>dubbo</artifactId>
                 <version>2.6.5</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.curator</groupId>
                 <artifactId>curator-framework</artifactId>
                 <version>4.0.1</version>
                 <type>bundle</type>
             </dependency>

             <dependency>
                 <groupId>org.apache.curator</groupId>
                 <artifactId>curator-recipes</artifactId>
                 <version>4.0.1</version>
                 <type>bundle</type>
             </dependency>
             <!-- 添加 zookeeper 依赖包 -->
             <dependency>
                 <groupId>org.apache.zookeeper</groupId>
                 <artifactId>zookeeper</artifactId>
                 <version>3.4.14</version>
             </dependency>
             <!--添加zkclient依赖包 -->
             <dependency>
                 <groupId>com.github.sgroschupf</groupId>
                 <artifactId>zkclient</artifactId>
                 <version>0.1</version>
             </dependency>
         </dependencies>
     </dependencyManagement>
</project>

2、新建API模块

这个模块用来存放 provider和 consumer都会调用的 方法接口,实体对象等契约对象。这里简单只存放一个服务接口。
pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.xyzh</groupId>
        <artifactId>myduboo-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xyzh</groupId>
    <artifactId>myduboo-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>myduboo-api</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

这里把myduboo-demo作为parent来设置的,后面的几个模块也要如此设置。
服务接口如下

public interface IMyService {

    String helloService(String name);
}

注意需要在 myduboo-demo的pom中添加一行模块声明:

<modules>
    <module>myduboo-api</module>
</modules>

3、添加服务提供模块

这个模块是作为一个服务提供者来实现的,负责将服务实现并注册到注册中心,所以需要引入duboo的相关依赖
pom如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.xyzh</groupId>
        <artifactId>myduboo-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xyzh</groupId>
    <artifactId>myduboo-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>myduboo-provider</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <type>bundle</type>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <type>bundle</type>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
        </dependency> 
         <dependency>
            <groupId>com.xyzh</groupId>
            <artifactId>myduboo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
       
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
</project>

需要在resources 目录下添加配置文件:mydubbo-provider.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 添加 DUBBO SCHEMA -->
<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="dubbo-provider"/>
    <!-- 连接到哪个本地注册中心 -->
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>

    <!-- 协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受  -->
    <dubbo:protocol name="dubbo" server="netty" port="20882" serialization="hessian2" />
    <!-- 监控中心配置,protocol="registry",表示从注册中心发现监控中心地址
 <dubbo:monitor protocol="registry"/>
 -->
    <!-- 当ProtocolConfig和ServiceConfig某属性没有配置时,采用此缺省值 -->
    <dubbo:provider timeout="30000" threadpool="fixed" threads="100" accepts="1000" />
    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service timeout="60000" interface="com.xyzh.mydubooapi.service.IMyService" ref="userService" protocol="dubbo"/>
    <!--具体实现该接口的 bean-->
    <bean id="userService" class="com.xyzh.mydubooprovider.service.MyServiceImpl"/>
</beans>

注意这里配置了注册端口,监控地址,协议,暴露的服务接口和 实现接口的bean

添加实现类:

public class MyServiceImpl implements IMyService {
    @Override
    public String helloService(String name) {
        return "hello,"+name;
    }
}

添加 main 类

public class ProviderApplication {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("mydubbo-provider.xml");
        System.out.println(context.getDisplayName() + ": here");
        context.start();
        System.out.println("服务已经启动...");
        System.in.read();
    }
}

4、添加服务调用者

这个模块是负责从注册中心调用服务。
pom.xml 如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.xyzh</groupId>
        <artifactId>myduboo-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xyzh</groupId>
    <artifactId>myduboo-consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>myduboo-consumer</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <type>bundle</type>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <type>bundle</type>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
        </dependency>
        <dependency>
            <groupId>com.xyzh</groupId>
            <artifactId>myduboo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>



</project>

添加配置文件,在resources目录下添加配置文件 consumer.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="dubbo-consumer"/>
    <!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->
    <!-- <dubbo:registry address="192.168.0.188:2183" protocol="zookeeper"></dubbo:registry> -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
    <!--  配置全局超时时间-->
    <!-- <dubbo:consumer timeout="600000" check="false"></dubbo:consumer> -->
    <!--使用 dubbo 协议调用定义好的接口-->
    <dubbo:reference id="userService" interface="com.xyzh.mydubooapi.service.IMyService"/>
</beans>

添加main函数,调用服务

public class MydubooConsumerApplication {

    public static void main(String[] args) throws IOException {

        ClassPathXmlApplicationContext context = new
                ClassPathXmlApplicationContext("consumer.xml");
        System.out.println(context.getDisplayName() + ": here");
        context.start();
        System.out.println("服务已经启动...");

        IMyService orderService=context.getBean(IMyService.class);
        System.out.println(orderService.helloService("test"));
        System.in.read();
    }

}

5、启动测试

先启动 provider
截图如下:

在这里插入图片描述

接着启动consumer:
在这里插入图片描述

调用成功!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值