【发布时间】:2018-12-16 22:11:21
【问题描述】:
我们有不同的后端(主要是 SOAP,所以我将重点介绍这一点)每个都有其自己的细节(安全性、默认超时、错误处理等)。
另一方面,我们有许多集成服务来协调对这些后端的调用。例如,“服务 A”首先调用“后端 1”,然后使用 SOAP 请求调用“后端 2”。最后,它使用两个后端的响应来创建响应。
有很多像“服务 A”这样的服务,每个服务都有一个单独的编排。它们中的每一个都是具有自己的存储库的单独项目,并被部署为一个小型 Spring-Boot 单元。
假设 10 个服务中有 4 个调用“后端 1”。它们不一定调用“后端 1”的同一个服务,但它们都需要实现同一个后端的细节。例如发送特殊标头、特定安全令牌、为此后端使用重试策略等。
为避免每个集成服务重复“后端 1”或“后端 2”的细节,我想以某种方式封装这些细节。
因为我们使用 Apache Camel,我假设我可以使用 自定义 Camel 组件来做到这一点。但由于组件通常集成新型后端,我不知道我是否应该应该这样做,或者这是一个坏主意。我的后端类型(例如 SOAP)已经作为组件存在,我只是用细节包装它们。
例如,要“封装”一个 SOAP 后端,我可以创建一个自定义组件,该组件委托给 CXF 组件,以创建具有该后端通用特性(标头、安全性等)的具体服务端点.
在骆驼路线中,端点可能看起来像这样
MyBackend://serviceUri?option1=value1
它会在后台创建
cxf://serviceUri?backendSpecific1=valueA&backendSpecific2=valueB&option1=value1
或者还有其他更适合此用例的扩展点吗?
【问题讨论】: