【发布时间】:2017-01-12 11:31:20
【问题描述】:
我目前正在使用 Spring 集成框架开发一个简单的 Spring Web 应用程序。我已经阅读了企业集成模式、目的、好处......我已经摆脱了 ServiceLayer 并将应用程序工作流委托给集成框架。但是我遇到了一些我卡住的设计问题,我希望能在设计方面有所了解。下面我将尝试解释它们,在此先感谢。
1.使用 Spring Integration Framework 进行 CRUD 操作
假设您有 2 个端点通过直接通道连接,1 个端点接收请求,另一个端点处理这些请求。我不想从实现的角度讨论,而是从设计的角度讨论(正如我之前所说),但为了澄清这一点,想象一下,您将接收端点实现为连接到网关的 RestController,而将另一个端点实现为ServiceActivator 连接到数据库适配器。 现在,用户可以请求 4 种基本操作,创建、读取、更新和删除(基本 CRUD)。由于接收方端点只能执行一种方法(handleMessage 方法),那么复用这 4 种操作的正确方法是什么?
- 在邮件头中添加某种标签?这对我来说似乎很难看,除了接收器端点之外,还必须实现一个 if-else 块。将控制器连接到接口并调用方法并摆脱 spring 集成会更容易。
- 创建 4 个连接到同一个数据库的 ServiceActivator?我也不喜欢它,想象一下如果你有 30 个操作而不是 4 个。
- 我还没有找到其他解决方案吗?例如,通过不同的通道发送每个操作,这样您就有 4 个通道。您可以从网关的角度执行此操作,但问题是 ServiceActivator 只能有 1 个入站通道。
2。使用 Spring Integration Framework 在端点之间共享事件
假设您有一个连接到转换器的网关。转换器启动一个线程,在该线程中解析一些数据并在完成时将其发送到下一个端点。 现在,网关客户端需要知道它通过通道发送的请求的状态(因为网关对 Transformer 或其实现一无所知,它们不应该共享任何东西)。由于转换器只有 1 个入站通道和 1 个输出通道,并且无法通过第三个通道将结果发布回来,如何实现呢?本质上,问题是,如何在不耦合端点或破坏集成模式架构的情况下共享事件? P.D.:请避免使用静态共享对象等不干净的答案,谢谢。
【问题讨论】:
标签: java spring web-applications spring-integration integration