springboot集成dubbo的入门demo

 

前言

继上一篇ZooKeeper的安装和启动,本篇将结合springboot+duboo+zookeeper来一次实战演练,话不多说,继续我们的实战。

dubbo介绍

Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。(现在有当当网在维护)

Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

dubbo核心工作原理

 

名词解释:

节点角色说明
Provider暴露服务的服务提供方
Registry服务的注册与发现的注册中心,如zookeper(推荐)、multicast、redis、simple
Consumer调用远程服务的服务消费方
Monitor统计服务的调用次数和调用时间的监控中心
Container服务运行容器

调用流程

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

  • 服务提供者在启动时,向注册中心注册自己所提供的服务

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

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

  • 服务消费者从提供的服务列表中,基于软负载均衡算法,选一台提供者进行调用,如果失败,则选择另一台调用

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

由于本篇是实战演练,dubbo的介绍就简单到这里。

springBoot-dubbo项目搭建

1.项目结构

项目结构如下图所示:

1.dubbo-provider---服务提供者,springboot构建

2.dubbo-consumer---服务消费者,springboot构建

3.dubbo-api---服务提供者的接口API,maven构建

结合dubbo的工作原理理解:

  • dubbo-provider先在容器里初始化启动
  • dubbo-provider去注册中心(zookeeper)去注册服务
  • dubbo-consumer去注册中心订阅自己所需的服务
  • 注册中心返回dubbo-provider的服务地址列表给消费者
  • dubbo-consumer直接去调用dubbo-provider服务
  • dubbo-consumer和dubbo-provider在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到检测中心

2.项目依赖

dubbo-provider和dubbo-consumer都需要依赖下面的jar包

        <!-- dubbo依赖 -->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

        <!-- 引入zookeeper的依赖 -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>

3.服务提供者

服务提供者dubbo-provider提供TestService.testApi(String name)接口

package com.dubbo.provider.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.dubbo.service.TestService;
import org.springframework.stereotype.Component;

//dubbo注解,暴露服务
@Service
@Component
public class TestServiceImpl implements TestService {

    @Override
    public String testApi(String name) {
        return "I am test:" + name;
    }
}
package com.dubbo.provider;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//开启dubbo的自动配置
@EnableDubboConfiguration
@SpringBootApplication
public class DubboProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }

}

application.properties文件配置:

#配置端口
server.port=8088

spring.dubbo.application.name=dubbo-provider
spring.dubbo.application.registry=zookeeper://127.0.0.1:2181

4.服务消费者

dubbo-consumer远程调用dubbo-provider提供的服务TestService.testApi(String name)接口

package com.dubbo.consumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.dubbo.service.TestService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @Reference
    private TestService testService;

    @RequestMapping(value = "/test")
    public String hello() {
        String hello = testService.testApi("One");
        return hello;
    }

}
package com.dubbo.consumer;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//开启dubbo的自动配置
@EnableDubboConfiguration
@SpringBootApplication
public class DubboConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboConsumerApplication.class, args);
    }

}

application.properties文件配置:

# 配置端口
server.port=8099

spring.dubbo.application.name=dubbo-consumer
spring.dubbo.application.registry=zookeeper://127.0.0.1:2181

5.测试

A.先启动本地的ZooKeeper(我本地已经安装了zk,没安装的同学可以参照我上一篇文章安装即可:https://mp.csdn.net/postedit/104081563

B.再启动服务提供者dubbo-provider,如下图所示则表示服务已经向注册中心(ZooKeeper)注册成功了

 

C.启动服务消费者dubbo-consumer,如下图所示则表示服务已经向注册中心(ZooKeeper)订阅成功了

这里可以看出和服务提供者是一样的打印输出。

D.结果展示

至此,整个集成过程的实战演练就结束了,有没有觉得很简单呢,自己赶紧动手试试吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值