一. 背景知识
有时候微服务需要提供给多个消费者, 而不通过的消费者可能希望依据自身情况使用不同的协议. 另一方面, 有时候如果原本服务以 dubbo 协议提供服务, 但是为了调试或者监控方便, 我们也提供 rest 协议.
本文示例服务者同时提供 dubbo 和 rest 协议. 使用的 dubbo 版本为 2.7.1, springboot 版本为 2.1.5.
为了真实地模拟不同微服务之间的调用, 本文将服务者和消费分开. 对应的项目有两个, 分别为dubboshop-inventory(服务者)和dubboshop-order(消费者). 其结构如下:
dubboshop-inventory (库存微服务. 这个项目主要演示服务提供者角色)
|- dubbo-api: 包含服务接口和 DTO 对象. 打包成 `dubboshop-inventory:1.0.0-snapshot.jar`, 通过 `mvn install`到本地或者`mvn deploy`部署到私服, 在下面`dubboshop-order`项目中引用依赖.
|- fun.faceless.dubboshop.comms.entity.Result.java
|- fun.faceless.dubboshop.comms.entity.CommRetCode.java
|- dubbo-provider: 服务接口具体实现类
|- fun.faceless.dubboshop.inventory.dubboprovider.DubboApplication.java
|- fun.faceless.dubboshop.inventory.dubboprovider.impl.InventoryProviderImpl.java
dubboshop-order (订单微服务)
|- dubbo-provider: 订单服务的提供者, 同时是dubboshop-inventory服务的消费者. 这里主要演示其作为消费者的角色.
|- fun.faceless.dubboshop.order.dubboprovider.impl.OrderProviderImpl.java
二. 通用dubbo配置
本文两个项目都作为服务者, 也都支持dubbo和rest协议, 所以两者dubbo相关的依赖都包含以下几部分.
1) 首先引入通用 dubbo 依赖
org.apache.dubbo
dubbo-bom
pom
org.apache.dubbo
dubbo
${dubbo.version}
org.apache.thrift
libthrift
org.apache.dubbo
dubbo-spring-boot-starter
org.apache.dubbo
dubbo-dependencies-zookeeper
2.7.1
pom
log4j
log4j
slf4j-log4j12
org.slf4j
2) dubbo rest 依赖
org.apache.dubbo
dubbo-rpc-rest
org.apache.tomcat.embed
tomcat-embed-core
三. 服务者(Provider)实现
3.1 服务接口定义 dubbo-api
1) 数据传输对象定义 Result.java:
注意一定要定义默认构造函数和实现Serializable接口.
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result implements Serializable {
private static final long serialVersionUID = 1L;
public static String SUCCESS_MSG = "SUCC";
public static String DEFAULT_FAIL_MSG = "FAIL";
private String code;
private String msg;
private String subCode;
private String subMsg;
private String sign;
private Object data;
private Res