dubbo入门--- HelloWorld

dubbo 核心概念?

  dubbo 是一款管理分布式服务的 RPC 框架

    

  

    调用关系说明:

      0.服务容器负责启动,加载,运行服务提供者。

      1.服务提供者在启动时,向注册中心注册自己提供的服务。

      2.服务消费者在启动时,向注册中心订阅自己所需的服务。

      3.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

      4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

      5.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

      具体详细内容请参加dubbo官方文档(http://dubbo.apache.org/en-us/

入门 demo  

  一 、搭建父工程

  第一步,先搭建父工程,搭建项目主要模块

  

  主要模块:

    • dubbo: 父项目, idea 新建项目后 删除 src 文件, 主要用于管理子模块
    • api: 公共 api 模块, dubbo 右键 new module 创建的
    • consumer: 服务消费者
    • provider: 服务提供者

  二、启动 zookeeper

    因为 dubbo 只是个分布式服务管理框架, 服务注册功能还是需要 zookeeper 来实现,所以需要先启动 zookeeper(下载安装配置过程不赘述,后面专门的文章)

    cmd 直接 zkServer 启动即可。

  三、完善 api 子模块

    在 api 子模块 src 下面新建类 ServiceDemo ,定义测试接口 SayHello

    

  四、完善 provider 子模块

    在 provider 子模块的 pom.xml 文件的 dependencies 标签里面添加以下依赖:

<dependency>
 <!--这里需要改成自己的包名--> <groupId>red.wizard.api</groupId> <artifactId>api</artifactId> <version>1.0.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.0.5.RELEASE</version> </dependency>

    依赖导入之后, 实现 api 接口.

  

    在 resource 文件下面新建 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-admin 或 dubbo-monitor 会显示这个名字name,方便辨识-->
    <dubbo:application name="demo-provider" owner="csz" organization="dubbox"/>
    <!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper-->
    <dubbo:registry address="zookeeper://localhost:2181"/>
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />
    <!--使用 dubbo 协议实现定义好的 api.PermissionService 接口-->
    <dubbo:service interface="red.wizard.api.service.ServiceDemo" ref="demoService" protocol="dubbo" />
    <!--具体实现该接口的 bean-->
    <bean id="demoService" class="red.wizard.provider.ServiceDemoImpl"/>
</beans>

  最后在 src 目录下面直接新界 Provider 类内容如下

public class Provider {

    private static final Logger logger = LoggerFactory.getLogger(Provider.class);

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

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("provider.xml");
        context.start();
        logger.info("dubbo 服务端已启动 《《《");
        System.in.read();
    }
}

  直接启动绿箭头启动 main 函数

  

  五、完善 consumer 子模块

  consumer 子模块的 pom.xml 文件添加如下依赖:

<dependency>
            <groupId>red.wizard</groupId>
            <artifactId>api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
            <version>2.5.6.SEC03</version>
            <scope>compile</scope>
</dependency>

  在 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="demo-consumer" owner="csz" organization="dubbox"/>
    <!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->
    <dubbo:registry address="zookeeper://localhost:2181"/>
    <!--使用 dubbo 协议调用定义好的 api.PermissionService 接口-->
    <dubbo:reference id="demoService" interface="red.wizard.api.service.ServiceDemo"/>
</beans>

  最后新建类 Consumer,内容如下:

public class Consumer {

    private static final Logger logger = LoggerFactory.getLogger(Consumer.class);

    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");
        context.start();
        logger.info(" dubbo 消费端已启动 》》》");
        serviceDemo serviceDemo = (red.wizard.api.service.serviceDemo) context.getBean("demoService");
        String hello = serviceDemo.SayHello("world");
        logger.info(hello);
        System.in.read();
    }
}

  绿箭头启动 consumer类 main函数

  

 

  最后的效果如下:

  

 

posted @ 2020-08-16 00:25  寒门悔客  阅读(257)  评论(0)    收藏  举报