在使用dubbo进行分布式服务开发时,一个大系统会拆分成很多领域以及很多子服务,而且部署时会部署在不同服务器里面,这在我们使用日志排查问题时将会十分麻烦。
这里我们使用Dubbo的Filter以及SLF4J的MDC功能,来共同完成这个事情。
主要思路是:
- 消费端在调用调用服务端时,生成请求ID,然后将请求ID、服务器IP等参数在调用服务前进行注入,将参数带到服务提供方。
- 提供方在执行方法前,获取消费端设置的参数,包括请求ID、主机IP等需要用到的参数,然后设置到MDC里面,供打印日志使用,再将参数往下游服务进行传递。
代码实现:
由于dubbo在2.7.*的版本以及之前的版本包结构有所变更,
为了让大家明白这不同版本的配置差异,
这里服务端使用2.7.3的版本,消费端使用2.6.5的版本,来演示下不同版本下配置的异同。
1.定义上下游服务DubboFilter
服务消费端:ConsumerRpcTraceFilter
1 | package com.faq.filter; |