SpringBoot 集成 Dubbo

7 篇文章 0 订阅
6 篇文章 0 订阅

SpringBoot 集成 Dubbo

本文主要讲述学习 SpringBoot 集成 Dubbo 的过程,和容易遇到的问题,手摸手带入门。



Dubbo 是什么

Dubbo是一个分布式服务框架,分布式简单来说就是把业务拆分到多个子项目,正常来说多个项目数据交互都是通过http交互,就像前后端分离那种交互,而有了Dubbo你就可以把其他项目的接口当成方法来调用,是不感觉一下子方便了很多。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Dubbo

1.角色

Provider 服务提供者: 暴露服务的服务提供方。
Consumer 服务消费者: 调用远程服务的服务消费方
Registry 注册中心: 服务注册与发现的注册中心
Monitor 监控中心: 统计服务的调用次调和调用时间的监控中心

2.调用顺序

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

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

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

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

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

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

二、搭建SpringBoot集成Dubbo项目

一共要创建三个项目【Provider 服务提供者】、【Consumer 服务消费者】、【interface 接口工程】

1.创建 Provider 服务提供者

项目类型:SpringBoot web工程
描述:实现业务接口中的接口
负责业务模块:ServiceImpl,Mapper

  1. 创建一个SpringBoot Web 工程,仅需要选择 spring web 一个起步依赖
  2. 填写配置文件 application.properties
# 设置当前工程是一个服务提供者
spring.dubbo.server=true
# 设置注册中心
# 【入门】https://blog.csdn.net/java_66666/article/details/81015302
# 【window及linux安装】https://blog.csdn.net/qq_33316784/article/details/88563482
spring.dubbo.registry=zookeeper://localhost:2181
  1. 配置 pom.xml 文件
<!--Dubbo集成SpringBoot框架起步依赖-->
	<dependency>
	    <groupId>com.alibaba.spring.boot</groupId>
	    <artifactId>dubbo-spring-boot-starter</artifactId>
	    <version>2.0.0</version>
	</dependency>
<!--注册中心-->
	<dependency>
	    <groupId>com.101tec</groupId>
	    <artifactId>zkclient</artifactId>
	    <version>0.10</version>
	</dependency>
<!--接口工程,接下来第三个创建的【interface 接口工程】-->
	<dependency>
	    <groupId>com.example</groupId>
	    <artifactId>interface</artifactId>
	    <version>1.0.0</version>
	    <scope>compile</scope>
	</dependency>
  1. 给项目启动文件 Application.java 配置注解 @EnableDubboConfiguration // 开启dubbo配置
  2. 编写 ServiceImpl
import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
/**
 * 注解解释
 * 用于标注对外暴露的dubbo接口实现类
 * 若使用的是dubbo的Service注解时,在controller注入的时候,要选择@Reference注解来进行注入。
 * 若使用 interfaceName 参数则,controller注入的时候,也要使用 interfaceName 参数来进行注入
 * https://www.cnblogs.com/riches/p/11195184.html
 */
@Service(interfaceClass = StudentService.class,version = "1.0.0",timeout = 15000)
public class StudentServiceImpl implements StudentService {

    @Autowired
    private StudentMapper studentMapper;

    @Override
    public Student queryStudentById(Integer id) {
        return studentMapper.selectByPrimaryKey(id);
    }
}
  1. 编写 Mapper 这个正常就不贴代码了

2.创建 Consumer 服务消费者

项目类型:SpringBoot web工程
描述:处理从浏览器客户端发送的请求,就是 Controller 层
负责业务模块:Controller

  1. 创建一个SpringBoot Web 工程,仅需要选择 spring web 一个起步依赖
  2. 填写配置文件 application.properties
# 设置注册中心
# 【入门】https://blog.csdn.net/java_66666/article/details/81015302
# 【window及linux安装】https://blog.csdn.net/qq_33316784/article/details/88563482
spring.dubbo.registry=zookeeper://localhost:2181
  1. 配置 pom.xml 文件
<!--Dubbo集成SpringBoot框架起步依赖-->
	<dependency>
	    <groupId>com.alibaba.spring.boot</groupId>
	    <artifactId>dubbo-spring-boot-starter</artifactId>
	    <version>2.0.0</version>
	</dependency>
<!--注册中心-->
	<dependency>
	    <groupId>com.101tec</groupId>
	    <artifactId>zkclient</artifactId>
	    <version>0.10</version>
	</dependency>
<!--接口工程,接下来第三个创建的【interface 接口工程】-->
	<dependency>
	    <groupId>com.example</groupId>
	    <artifactId>interface</artifactId>
	    <version>1.0.0</version>
	    <scope>compile</scope>
	</dependency>
  1. 给项目启动文件 Application.java 配置注解 @EnableDubboConfiguration // 开启dubbo配置
  2. 编写 Controller
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class StudentController {
	/**
     * 注入服务提供者的服务
     * 服务提供者 @Service 使用 interfaceName 参数则,这里也需要使用 interfaceName 参数
     */
    @Reference(interfaceClass = StudentService.class,version = "1.0.0",check = false)
    private StudentService studentService;

    @RequestMapping("/student/detail/{id}")
    public String studentDetail(@PathVariable("id") Integer id){
        return id;
    }
}

3.创建 interface 接口工程

项目类型:maven java工程
描述:存放实体bean和业务接口
负责业务模块:Model,Service

  1. 创建一个 maven java工程
  2. 创建 Model
import java.io.Serializable;
/**
 * Dubbo 实体 Bean 需实现 Serializable ,否则会报错
 */
public class Student implements Serializable {
    private Integer id;

    private String name;

    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  1. 创建 Service 接口,这个正常就不贴代码了

总结

由于内容有点多,可能某些地方描述的不是很细,有兴趣的小伙伴欢迎私信交流。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值