听说微信搜索《Java鱼仔》会变更强!
本文收录于JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看哦
最近项目中需要用到dubbo,虽然我知道dubbo是一个RPC框架,但是没有去详细了解这个框架。既然项目要用,那就先把Dubbo的应用给学会,等熟练使用之后,再去了解Dubbo内部的原理。如果想要项目代码,直接联系我即可。如果想要demo代码,直接联系我即可。
(一)什么是Dubbo
目前来说,Dubbo是最有名的RPC服务调用框架,他是阿里开源的一个SOA服务治理框架,功能较为完善,支持多种传输和序列化方案。Dubbo最常用的应用就是远程调用。
Dubbo中服务端最核心的对象有四个:
ApplicationConfig:配置当前应用信息
ProtocolConfig:配置提供服务的协议信息
RegistryConfig:配置注册相关信息
ServiceConfig:配置暴露的服务信息
Dubbo客户端中核心的对象有两个:
ApplicationConfig:配置当前应用信息
ReferenceConfig:配置引用的服务信息
(二)Dubbo实战
接下来通过三种方式入门Dubbo。首先会通过代码直接展示dubbo的直连和注册中心实现方式,接着使用Spring和SpringBoot的方式分别展示如何使用Dubbo。
在写dubbo相关代码前,我们首先要定义一个公共的客户端服务,这个服务里存放的是service接口。服务提供者引入这个工程,写实现类,提供dubbo接口;服务消费者引入这个工程,通过这个工程的service接口调用。
因此新建这样一个模块,命名为dubbo-client,整体代码结构如下,只需要写一个service接口即可:
User类:
1 | java复制代码@Data |
UserService:
1 | java复制代码public interface UserService { |
2.1 直接代码
接下来通过直接代码的方式生成一个dubbo服务,并且用另外一个类去调用这个dubbo服务:
2.1.1 引入依赖
核心依赖就两个,一个dubbo的依赖,另外一个上面的公共接口方法
1 | java复制代码<dependencies> |
2.1.2 编写服务提供者
服务提供者主要配置以下几个属性:
1、application:设置应用的名称等信息
2、protocol :设置服务的协议
3、register:设置服务的连接方式
4、service:将需要暴露的服务注册出来
1 | java复制代码public class DubboProvider { |
2.1.3 编写服务消费者
消费者的实现主要就三步:
1、配置application:设置应用的名称等信息
2、配置reference:主要配置要引用的信息
3、获取到接口,调用服务。
1 | java复制代码public class DubboConsumer { |
先启动提供者,再启动消费者,如果user信息打印出来了就说明调用成功。
这里的Register使用的是直连的方式,我们也可以使用注册中心,这里以zookeeper为例。首先在项目中引入zookeeper相关依赖:
1 | java复制代码<!-- zk客户端依赖:curator --> |
服务提供者修改一处地方,将RegistryConfig修改为zookeeper的连接方式
1 | java复制代码//register |
消费者同样修改一处位置,将referenceConfig中的setUrl方法替换为zookeeper:
1 | java复制代码RegistryConfig registryConfig=new RegistryConfig("zookeeper://192.168.78.128:2181"); |
2.2 通过Spring
通过Spring的方式只不过是把上面写在Java中的代码拿到配置文件中去,并把接口注入到Bean容器中,在resource文件夹下新建两个配置文件:
provider.xml
1 | xml复制代码<?xml version="1.0" encoding="UTF-8"?> |
consumer.xml
1 | xml复制代码<beans xmlns="http://www.springframework.org/schema/beans" |
这里的配置文件和上方的代码均一一对应。接着是服务的提供者和消费者:
SpringDubboProvider
1 | java复制代码public class SpringDubboProvider { |
SpringDubboConsumer
1 | java复制代码public class SpringDubboConsumer { |
2.3 通过SpringBoot的方式
新建两个SpringBoot项目,一个是服务提供者,一个是服务消费者,引入dubbo的核心依赖
1 | xml复制代码<dependency> |
这里的配置都写在application.properties中,首先是服务提供者:
1 | java复制代码dubbo.application.name=dubbo-provider |
服务提供者需要写服务的实现类,这里需要注意@Service注解采用的是dubbo包下:
1 | java复制代码import com.javayz.client.entity.User; |
接着在启动类上添加一个@EnableDubbo注解即可。
服务的消费者同样是先写一下配置文件:
1 | java复制代码server.port=8081 |
接着通过@Reference注解将service对象引进来
1 | java复制代码@SpringBootApplication |
(三)dubbo的常用配置
1 | java复制代码<dubbo:application/> 用于配置当前应用信息 |
更加具体的配置信息我在官网中找到了,大家可参考:
(四)企业中如何通过dubbo实现分布式调用
在企业中,如果消费者直接通过RPC去调用提供者,理论上需要把提供者的整个Jar包引入到项目中。但是这样的话服务提供这种的其他无关代码也会被引入其中,导致代码污染。
因此实际开发过程中,服务提供者和调用者之间会增加一层Client模块。这个Client中主要写的是Service的接口定义,接口的返回实例对象以及接口的请求实例对象。简单来讲,所有的定义都在Client中完成。
使用时,服务提供者引入这个Client,然后写实现方法,服务消费者引入这个Client,然后通过dubbo直接调用即可。
另外企业开发中,可能会出现多个接口实现,这种情况下可以给Service设定group、version等进行区分。
(五)总结
Dubbo的基本使用就这些,Dubbo毕竟只是一个RPC的工具,我们可以用它很方便地暴露、消费服务。但是两个小时也只是会上手使用,它内部的一些配置,一些理念以及最重要的原理都是需要我们自己去深耕的。我是鱼仔,我们下期再见!
本文转载自: 掘金