科学的剥离其他中间件
一、背景
近期在商家内部本地部署EDI时,遇到一个问题:
1)商家内部没有不具备JSF注册中心等基础设施;
2)EDI应用代码中使用JSF与京东内部服务交互,其贯穿了管理端和运行时;
3)JSF线程启动时,如果连接注册中心失败会阻塞应用启动;
二、操作
解决该问题时先后进行了两种操作方式:
第一种方式
1)操作:代码中移除JSF的Provider和Consumer定义,然后对应在使用其服务时增加判空逻辑;
2)结果:当尝试通过第一种方式去移除JSF依赖时,发现工作量不可控,且对应用端代码改动很大。
第二种方式
1)操作:修改JSF集成Spring时的FactoryBean,通过同名复写的方式重写其生成Consumer和Provider Bean的逻辑——生成默认的哑对象。最终达到,使JSF静默。从而避免修改应用层代码。
通过阅读其源码发现,其JSF有一个配置当其处于JUNIT模式时,会处于哑模式。
2)结果:通过配置把JSF配置为JUNIT模式后,在无修改应用代码的情况下完成应用正常启动和运行
三、结论
一个问题的解决位点可能有多个,在动作前要思考完整的场景,综合考虑其优缺点,然后择优做之。