Spring 整合 Dubbo 简单入门

1、Dubbo概念

1.1 一个高性能、轻量级的java RPC框架,主要的核心功能为:
  1. 、基于接口的远程方法调用
  2. 、容错性与负载均衡
  3. 、自动服务注册与发现

注:官方文档的描述如下:

Apache Dubbo |ˈdʌbəʊ| is a high-performance, light weight, java based RPC framework. Dubbo offers three key functionalities, which include interface based remote call, fault tolerance & load balancing, and automatic service registration & discovery.
1.2 dubbo的设计结构

图片来源于Dubbo官网
总结:容器在启动时将服务提供者(Provider)注册到注册中心(Register),服务消费者(Consumer)从注册中心订阅需要的服务,注册中心将以长连接的方式通知服务消费者,服务消费者即可同步地调用服务提供者的相关方法。同时,监控中心(Monitor)也会通过异步感知到服务提供者及消费者的相关信息,如接口暴露,注册情况以及接口的调用明细,调用时间等信息。

2、Dubbo的简单使用

备注:以下借助dubbo-admin查看相关服务信息(比较直观,可选),关于dubbo-admin的安装可参考上一篇博文 dubbo 监控中心 —— dubbo-admin安装使用

2.1 注册中心搭建

2.1.1 先来搭建一个注册中心,dubbo官方推荐使用zookeeper作为注册中心,接下来我们也使用zookeeper作为注册中心,下面简单演示下window下的安装方式
1)、下载zookeeper,先到zookeeper的官网,找到Download点击进去
在这里插入图片描述
2)、在跳转后的页面点击 archive
在这里插入图片描述
3)、在跳转的页面选择一个版本下载(这里我下载的是3.5.5版本)
在这里插入图片描述
4)、解压下载的压缩包,并进入其 conf 目录下,找到文件 zoo_sample.cfg,复制一份改名为 zoo.cfg
在这里插入图片描述
5)、修改 zoo.cfg 文件的 dataDir(端口可以使用默认端口2181),指定为自己本机上的任意一个存在的目录,这里是指定到zookeeper安装目录下的data目录,所以需要手动创建data目录
在这里插入图片描述
在这里插入图片描述
6)、进入zookeeper安装目录的bin目录,启动zkServer.cmd
在这里插入图片描述

2.2 dubbo的使用
2.2.1 创建项目provider 和 consumer

备注:下面演示provider的创建,consumer操作基本一致。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.2 演示服务提供者暴露服务

1)、添加项目所需的依赖

		<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.0</version>
        </dependency>

        <!-- 引入zookeeper客户端的依赖,dubbo 2.6以前引入zkClient, 2.6后之后引入curator -->
        <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.2.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.2.0</version>
        </dependency>

2)、编写提供者(provider)项目要暴露的服务接口(service及对应实现类)

package cn.zrz.service;

public interface ProviderService {
    String getProduct(Integer id);
}
package cn.zrz.service.impl;

import cn.zrz.service.ProviderService;

public class ProviderServiceImpl implements ProviderService {
    public String getProduct(Integer id) {
        return "产品" + id;
    }
}

3)、声明要对外暴露的接口(在类路径下创建一个application.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://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
                           http://dubbo.apache.org/schema/dubbo
                           http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

    <!-- 配置应用名称 -->
    <dubbo:application name="provider" />

    <!-- 配置注册中心的位置 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />

    <!-- 配置dubbo的通讯方式,即使用的协议及使用的端口 -->
    <dubbo:protocol name="dubbo" port="20880" />

    <!-- 配置对外暴露的接口及接口的实现(ref) -->
    <dubbo:service interface="cn.zrz.service.ProviderService" ref="providerService" />

    <!-- 添加服务接口的实现类 -->
    <bean id="providerService" class="cn.zrz.service.impl.ProviderServiceImpl" />
</beans>

4)、编写一个主类MainApplication(如果为web项目则可以不用),用于启动应用

package cn.zrz;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApplication {
    public static void main(String[] args) throws Exception  {
        ClassPathXmlApplicationContext context  = new ClassPathXmlApplicationContext("classpath:application.xml");
        context.start();
        System.in.read();   //阻塞方法的结束
    }
}

5)、通过 dubbo-admin 即可查看到服务已暴露出去
在这里插入图片描述

2.2.3 演示服务消费者调用远程服务

1)、添加依赖

		<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.0</version>
        </dependency>

        <!-- 引入zookeeper客户端的依赖,dubbo 2.6以前引入zkClient, 2.6后之后引入curator -->
        <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.2.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.2.0</version>
        </dependency>

2)、将提供者的接口类复制一份放到消费者项目中
在这里插入图片描述
3)、编写消费者的业务类service及实现类

package cn.zrz.service;

public interface ConsumerService {
    void buyProduct(Integer productId);
}
package cn.zrz.service.impl;

import cn.zrz.service.ConsumerService;
import cn.zrz.service.ProviderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class ConsumerServiceImpl implements ConsumerService {

    @Autowired
    private ProviderService providerService;

    public void buyProduct(Integer productId) {
        String product = providerService.getProduct(productId);
        System.out.println("已购买到:" + product);
    }
}

4)、配置引用远程暴露的接口

<?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://dubbo.apache.org/schema/dubbo" xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
                           http://dubbo.apache.org/schema/dubbo
                           http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 开启spring 注解包扫描,这里为了方便spring的自动注入,不是dubbo配置必须的 -->
    <context:component-scan base-package="cn.zrz.service" />

    <!-- 配置应用的名称 -->
    <dubbo:application name="consumer" />

    <!-- 指定注册中心的位置 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />

    <!-- 引用远程服务代理 -->
    <dubbo:reference interface="cn.zrz.service.ProviderService" id="providerService" />
</beans>

5)、编写主类(MainApplication)启动项目进行测试接口的调用是否成功

package cn.zrz;

import cn.zrz.service.ConsumerService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApplication {
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:application.xml");
        context.start();
        ConsumerService consumerService = context.getBean(ConsumerService.class);
        consumerService.buyProduct(1);

        System.in.read();   //这里同样阻塞一下方法,方便通过dubbo-admin看到消费者的信息
    }
}

6)、查看控制台发现打印了购买的产品信息,即方法调用成功
在这里插入图片描述
7)、再来通过dubbo-admin同样可以查看到消费者的信息
在这里插入图片描述

有什么不对的地方,欢迎指正!
获取项目源码

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值