阿里 RPC 框架 DUBBO 初体验

最近研究了一下阿里开源的分布式RPC框架dubbo,楼主写了一个 demo,体验了一下dubbo的功能。

快速开始

实际上,dubbo的官方文档已经提供了如何使用这个RPC框架example代码,基于 Netty 的长连接。楼主看这个框架主要是为了在微服务,service mesh大火的今天做一些技术储备以及了解一下分布式 RPC 框架的设计。

当然即便是写一个dubbo的demo也不能随便写写就好了,要认真对待说不定哪一天可以派上用场呢,下面是楼主写的代码的目录结构:

dubboCode图

下面我来一一说明一下每个model的作用,

micro-service-dubbo-common是通用工具模块其他的model都需要依赖它 。

micro-service-dubbo-dal是整个项目的dao模块,有关数据库操作的相关代码都放在这里。

micro-service-dubbo-interface 是通用接口模块,专门用来声明接口,被consumer与provider同时依赖,这么做是为了项目的可拆分与分布式部署。

micro-service-dubbo-model是公用的实体类模块,不限于数据库对应的model,也可以放DTO,VO等。

micro-service-dubbo-provider项目的服务提供者。

micro-service-dubbo-web 项目的消费者,也是直接跟前端交互的controller层。

另外需要在pom文件中添加相关依赖

<!--dubbo--> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>${zkclient_version}</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>${zookeeper_version}</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>${curator_version}</version> </dependency> 接口创建

既然是 RPC 服务,那就需要一个接口,再有一个实现类。在这里的接口定义是在我们的micro-service-dubbo-interface,具体实现是在provider这里创建,在楼主的项目中就是在micro-service-dubbo-provider中创建DemoService 的实现。

public interface DemoService { String sayHello(String name); public List getUsers(); } @Service("demoService") public class DemoServiceImpl implements DemoService { @Override public String sayHello(String name) { System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] Hello " + name + ", request from consumer: " + RpcContext .getContext().getRemoteAddress()); return "Hello " + name + ", response from provider: " + RpcContext.getContext().getLocalAddress(); } @Override public List getUsers() { List list = new ArrayList(); User u1 = new User(); u1.setName("hejingyuan"); u1.setAge(20); u1.setSex("f"); User u2 = new User(); u2.setName("xvshu"); u2.setAge(21); u2.setSex("m"); list.add(u1); list.add(u2); return list; } }

然后consumer的 pom.xml 添加对这个接口的依赖,在这里的接口定义是在我们的consumer就是micro-service-dubbo-web

<dependency> <groupId>com.whforever</groupId> <artifactId>micro-service-dubbo-provider</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.whforever</groupId> <artifactId>micro-service-dubbo-interface</artifactId> <version>1.0-SNAPSHOT</version> </dependency>

有了接口,就需要配置一下。

接口配置

首先在提供方这里发布接口。创建一个 xml 文件,名为:dubbo-provider.xml

文件内容:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- provider's application name, used for tracing dependency relationship --> <dubbo:application/> <!-- use multicast registry center to export service --> <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" /> <!-- use dubbo protocol to export service on port 20880 --> <dubbo:protocol port="20880"/> <!-- service implementation, as same as regular local bean --> <bean/> <!-- declare the service interface to be exported --> <dubbo:service interface="com.whforever.service.DemoService" ref="demoProviderService"/> </beans>

很简单,发布了一个接口,类似 Spring 的一个 bean。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzwfy.html