Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SOA:当然,为什么在代码中模拟ESB行为是更糟糕的选择_Java_Web Services_Soa_Osb - Fatal编程技术网

Java SOA:当然,为什么在代码中模拟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提供的服务由多个原子调用组成,这些原子调

我们有一个基于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实现中。这对我来说似乎有问题,原因如下:

  • 开发人员无法在本地测试组合服务(从业务角度来看是简单的功能),因为ESB实现过于“繁重”,无法在本地部署。总体测试是一项集成活动
  • 用于形成这些和类似控制块的XSLT语法不像通用编程语言中的代码那样可读或可访问。(如果……那么,或者最后等等)XSLT已经变得非常漫长和可怕
  • 在某些复杂场景中,更细粒度的控制将是有益的,即通过调用补偿原子服务回滚早期操作来补偿失败的调用
我想,在这个项目上工作了一年之后,我觉得将应用程序功能分解为原子服务的概念是一个不错的想法。然而,我经常觉得我更喜欢用一种简单的老编程语言(如Java)来实现组合Web服务

我想这应该是这样的:

ClientA --> ComposingServiceA --> ClientB --> ComposingServiceB --> Atomic Services --> App ClientC --> ComposingServiceC --> 客户端-->组合服务A--> 客户端B-->组合服务B-->原子服务-->应用程序 客户端C-->组合服务C--> 然而,读到这里,我发现一个未经引用的声明如下:

当然,在代码中模拟ESB行为是更糟糕的选择 可悲的是,这只是一种盲目的事实陈述(观点),没有任何支持理由。然而,这让我心烦意乱。为什么上述情况是真的?我已经准备好给我们的架构师写一封电子邮件,表达上面所有的担忧,但是这条评论让我想知道我是否应该


当然,为什么在代码中模拟ESB行为是最糟糕的选择?

不知道该语句的完整上下文会使评论变得困难,但是如果他们的意思是尝试从头开始实现自己的ESB,那么是的,我必须同意。ESB非常复杂,您不想自己开发


就架构而言,您希望分解为“组合”服务是正确的。这被称为,通常会导致。您的原子服务对应于或,它们与业务流程无关,并且通常是可重用的。您的组合服务通常对应于构成其他服务的组合服务,它们与特定的业务流程相关,并且通常不可重用。

因此,我们的问题可能是我们正在使用XSLT在OSB中编写组合功能?如果我没听错的话,我们自己没有实现ESB是对的,但是在组成原子层的代码中应该有额外的服务层,所有通信都由ESB代理吗?另外,谢谢你的链接。正确。虽然我已经看到很多ESB在这些情况下被不适当地使用,但这是一个完全不同的讨论。