Ewei Dubbo自定义Http协议返回值过滤器

公司将Dubbo又封装了一层,通过注解直接暴露Service接口,在序列化返回结果时,简单粗暴的将实体的所有非空属性全部序列化出来了,接口的返回体相当庞大,很是浪费资源。

核心实现

使用FastJson的com.alibaba.fastjson.serializer.PropertyFilter,在序列化时,排除相关的属性,核心代码如下:

1
2
3
4
5
6
7
8
9
10
PropertyFilter profilter = new PropertyFilter(){
@Override
public boolean apply(Object object, String name, Object value) {
if(name.equalsIgnoreCase("password")){
return false; // 排除password 属性
}
return true;
}
};
serializer.addFilter(profilter);

V2接口基于Dubbo相关协议封装(JavaDoc:http://doc.ewei.ren/budo-dubbo-protocol-http/),在序列化接口返回信息时,没有做相关的配置;

其核心序列化逻辑在org.budo.dubbo.protocol.http.view.render.ViewRendercom.ewei.common.dubbo.http.view.render.EweiDubboHttpApiJsonViewRender实现类中,见下图:



现只需要在序列化之前,添加相关的PropertyFilter即可。

1
serializer.addFilter(new XxxPropertyFilter());

在SpringBoot中优雅的集成Dubbo

在springboot中集成dubbo示例(非注解),废话少说,直入正题。

pom

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.8.4</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>

当当网Dubbox框架使用示例

Dubbox是当当网基于阿里巴巴dubbo衍生出来的一个新版本,以下是在官网摘抄的相关特性:

  • 支持REST风格远程调用(HTTP + JSON/XML)
  • 支持基于Jackson的JSON序列化
  • 支持基于嵌入式Tomcat的HTTP remoting体系
  • 升级ZooKeeper客户端:将dubbo中的zookeeper客户端升级到最新的版本,以修正老版本中包含的bug。
  • 支持完全基于Java代码的Dubbo配置:基于Spring的Java Config,实现完全无XML的纯Java代码方式来配置dubbo

Dubbox 环境搭建

由于dubbox相关的jar没有发布到maven中心仓库,故只能自行下载源码编译然后打入本地仓库或私服使用。

以下编译过程均在windows环境上执行,使用git bash.exe

1
2
3
$ git clone https://github.com/dangdangdotcom/dubbox.git
$ cd dubbox
$ mvn install -Dmaven.test.skip=true

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×