【原创 转载请注明出处】

本文是学习了dubbo之后自己手动写的,比较通俗,很多都是自己学习之后的理解,写的过程中没有参考任何文章。

另外dubbo也有官方文档,但是比较官方,也可以多看看dubbo的官方中文文档。

代码示例连接:dubbodemo


一、dubbo的相关概念

dubbo是阿里的一个分布式服务开源框架,它的设计理念就是把一个大而全的项目模块化,每个模块都是一个独立的项目。

为什么要把大项目拆分成多个小项目呢?

因为随着项目越做越大,代码、功能越来越多,导致代码的复用性就会降低,项目变得庞大臃肿,维护起来比较麻烦,改一个功能所有的代码都需要重新打包发布,还可能会影响其他模块;对于开发者来说所有的开发者都在同一个项目里开发代码,虽然有版本管理软件(SVN,Git等),但即使这样也会使开发者开发时遇到许多问题。

所以就诞生了分布式,分布式的原则就是将项目拆分若干个小项目,实现模块化,每个项目只关注自己的功能(假如按功能划分模块),需要其他模块的数据时就去调用它,分工更加明确。dubbo就是一个基于spring的分布式框架,可以和spring无缝整合。

那么模块之间该如何调用呢?

我们称服务提供者为服务生产者,服务调用者为服务消费者,他们两个是如何通信呢?消费者如何找到生产者呢?显然是通过网络,通过网络就必须要遵循一定的协议,约定,也就时需要有一个第三者或叫中间人、中介,称为注册中心,他来定义通讯的协议、规则。服务生产者服务消费者二者必须都来遵循这个规则。

服务生产者在启动程序时把服务发布到注册中心,告诉注册中心他叫啥,他提供的服务的类型,他的IP和端口就行了,而服务消费者在启动程序时也去连接注册中心,告诉注册中心他叫啥,告诉注册中心他想要什么类型的服务。对于服务提供方和服务消费方来说,他们还有可能兼具这两种角色,即既需要提供服务,有需要消费服务。

具体怎么实现调用呢?在项目里的表现如何?

模块之间要想调用,提供服务方需要创建服务接口,打成jar包,发布这个jar包,服务提供者面向接口编程,服务消费者调用服务时也用这个服务接口的jar包,创建服务接口的实例。

为什么要创建服务接口并发布成jar包?因为服务的提供方和服务的调用方都要用到这个接口。服务消费者要使用这个服务,需要获得服务的实例(只关心服务的类型)来调用服务提供的方法,而服务的提供者也只需要实现接口就可以了。

有了协议为什么还用dubbo?

那我们直接遵循协议,去和注册中心打交道不就行了吗,为什么还产生了dubbo呢?

毕竟有需求就有市场,归根结底还是因为我们懒。因为所有的人都要遵循这个协议,怎么连接网络,怎么传参数,格式如何等这些工作都是重复性的,是所有项目共性的,每次都写不就很麻烦吗,所以dubbo来帮你实现,来帮你完成这些共性的、繁琐的工作,你只需要关注业务本身就行了,那些麻烦的协议dubbo来帮你遵循,所以就产生了dubbo,并且可能他做的这些工作比你自己写起来更高效比你写的代码好。

服务的管理

当项目越来越大,模块、服务越来越多,一个项目可能会调用很多服务,或者服务之间相互调用,这个时候你可能就不知道你这个服务调用了哪些服务或都被谁调用了,性能如何等,并且管理起来比较麻烦,别担心,有服务治理中心可以帮你解决这些问题。它是dubbo的一个后台监控系统,叫dubbo-admin,可以下载他的war包运行在web容器里就可以用了。

二、使用dubbo框架来完成一个小demo

我们用idea+spring+maven+zookeeper+JDK 8,来搭建dubbo项目

前提是你安装好zookeeper,idea安装maven插件(也可以用其他IDE,过程类似)。

先说一下搭建的整体思路,是在idea里创建一个maven project,然后在这个project里创建三个model,分别是定义api接口的(将来发布到maven仓库),实现api的(服务提供者)以及服务消费者。

1、创建project

在idea里【file】-【new】-【project】

dubbo入门教程-从零搭建dubbo服务

 

然后按下图选择

 

dubbo入门教程-从零搭建dubbo服务

 填写完相关信息后一路Next就好了,然后在这个project上右键【new】-【model】,创建为student-api,然后一路next后项目结构就是这样的

 

dubbo入门教程-从零搭建dubbo服务

2、编写api接口

创建完project和第一个model之后,在student-api编写我们的接口。我们创建一些实体类和接口。

dubbo入门教程-从零搭建dubbo服务

具体代码:

public interface StudentService{
    ResultVO<Student> getStudentByName(String name);
}
StudentService:

相关文章:

  • 2021-07-08
  • 2021-08-27
  • 2021-09-28
  • 2021-12-16
  • 2022-02-12
  • 2021-10-04
  • 2022-12-23
猜你喜欢
  • 2021-08-06
  • 2021-07-31
  • 2021-09-01
  • 2022-01-10
  • 2021-10-16
  • 2021-05-21
  • 2021-09-09
相关资源
相似解决方案