Java SOA:当然,为什么在代码中模拟ESB行为是更糟糕的选择
我们有一个基于SOA的项目,它从最初的Web服务层构建到成熟的应用程序 ClientA --> ClientB --> ESB --> Atomic Services --> Established App (DB/NAS etc) ClientC --> 客户--> 客户端B-->ESB-->原子服务-->已建立的应用程序(DB/NAS等) ClientC--> 我们有几个场景,其中ESB提供的服务由多个原子调用组成,这些原子调用按交互顺序调用,因此逻辑上它们会执行以下操作: ClientA --> ComposingServiceA --> ClientB --> ComposingServiceB --> Atomic Services --> App ClientC --> ComposingServiceC --> def合成服务(xmlrequest): 决策服务的输出=决策服务(xmlrequest) if(_decision_service.matches(“foo”)的输出_): xmlresult=foo_服务(xmlrequest) if(决策服务的输出匹配(“bar”): xmlresult=bar_服务(xmlrequest) 返回xmlresult 事实上,这个逻辑是使用XSLT转换实现的,XPath查询内置到我们购买的ESB实现中。这对我来说似乎有问题,原因如下:Java SOA:当然,为什么在代码中模拟ESB行为是更糟糕的选择,java,web-services,soa,osb,Java,Web Services,Soa,Osb,我们有一个基于SOA的项目,它从最初的Web服务层构建到成熟的应用程序 ClientA --> ClientB --> ESB --> Atomic Services --> Established App (DB/NAS etc) ClientC --> 客户--> 客户端B-->ESB-->原子服务-->已建立的应用程序(DB/NAS等) ClientC--> 我们有几个场景,其中ESB提供的服务由多个原子调用组成,这些原子调
- 开发人员无法在本地测试组合服务(从业务角度来看是简单的功能),因为ESB实现过于“繁重”,无法在本地部署。总体测试是一项集成活动
- 用于形成这些和类似控制块的XSLT语法不像通用编程语言中的代码那样可读或可访问。(如果……那么,或者最后等等)XSLT已经变得非常漫长和可怕
- 在某些复杂场景中,更细粒度的控制将是有益的,即通过调用补偿原子服务回滚早期操作来补偿失败的调用
当然,为什么在代码中模拟ESB行为是最糟糕的选择?不知道该语句的完整上下文会使评论变得困难,但是如果他们的意思是尝试从头开始实现自己的ESB,那么是的,我必须同意。ESB非常复杂,您不想自己开发
就架构而言,您希望分解为“组合”服务是正确的。这被称为,通常会导致。您的原子服务对应于或,它们与业务流程无关,并且通常是可重用的。您的组合服务通常对应于构成其他服务的组合服务,它们与特定的业务流程相关,并且通常不可重用。因此,我们的问题可能是我们正在使用XSLT在OSB中编写组合功能?如果我没听错的话,我们自己没有实现ESB是对的,但是在组成原子层的代码中应该有额外的服务层,所有通信都由ESB代理吗?另外,谢谢你的链接。正确。虽然我已经看到很多ESB在这些情况下被不适当地使用,但这是一个完全不同的讨论。