Dubbo构建电商平台实战项目

电商平台需求

某电商平台系统需求,用户浏览商品;选择商品下订单,订单系统需要获取用户信息中的送货地址;向支付系统请求完成付款。

image.png

直连方式 dubbo

点对点的直连项目:消费者直接访问服务提供者,没有注册中心。消费者必须指定服务提供者的访问地址(url)。

消费者直接通过 url 地址访问固定的服务提供者。这个 url 地址是不变的。

image.png

实现目标

用户访问 ------>【商品网站服务】访问-----> 【订单服务】

image.png

实现方式

以 JavaSE 为例,服务提供者,服务消费者都是 JavaSE项目

(1) 创建服务提供者:订单服务

A、 新建 java project

项目名称:link-orderservice-provider

设置 version 为 1.0.0

B、 maven pom.xml

image.png

在< build> 下的 < plugins>标签中加入 JDK1.8 编译插件

image.png

C、 创建订单实体类:Order

image.png

D、 新建订单服务接口:OrderService

image.png

E、新建接口的实现类:OrderServiceImpl

image.png

F、创建 dubbo 配置文件

orderservce-provider.xml

image.png

G、 测试配置文件

image.png

H、 安装本地 jar 到 maven 仓库

服务接口中的方法要给消费者使用,消费者项目需要知道接口名称和接口中的方法名称、参数等。这些信息服务提供者才知道。需要把接口的 class 文件打包为jar .

服务接口项目的类文件打包为jar, 安装到 maven 仓库,仓库中的提供者 jar 可以被消费者使用。

使用 IDEA 的 maven 窗口执行 install

(2) 创建服务消费者:商品网站

I、 新建 java project

项目名称:link-main-web

J、 maven pom.xml

image.png

在< build> 下的 < plugins>标签中加入 JDK1.8 编译插件

image.png

K、 创建购买商品接口

image.png

L、创建购买接口的实现类

image.png

M、 创建 dubbo 配置文件

shop-consume.xml

image.png

N、 执行消费者

image.png

dubbo 服务化最佳实践

分包

建议将服务接口、服务模型、服务异常等均放在公共包中。

粒度

服务接口尽可能大粒度,每个服务方法应代表一个功能,而不是某功能的一个步骤,服务接口建议以业务场景为单位划分,并对相近业务做抽象,防止接口数量爆炸。

不建议使用过于抽象的通用接口,如:Map query(Map),这样的接口没有明确语义,会给后期维护带来不便。

版本

每个接口都应定义版本号,区分同一接口的不同实现,如: <dubbo:service interface="com.xxx.XxxService" version="1.0" />。