是和不是。编排和聚合/服务增强之间有一条薄而有时难以区分的界线。
通常,如果您有任何长时间运行或复杂业务流程(流程是关键词,尽管我将避免定义它)- 最适合使用BPEL。
简单的任务,例如聚合三个服务调用的结果,可以且经常应该在ESB层中完成。
然而,这并不值得太多担忧。
免责声明:我是IBM ESB顾问,尽管我不是以正式身份撰写此文。
我的简短回答是不,这不是它的责任。
我更愿意将其交给BPEL或BPM套件。
嗯,我不知道还有什么要补充的 :) ...祝好运?
当您有两个或更多相互作用的服务时,请使用服务编排器进行组合和过程控制服务。如果您有ESB,则在ESB上公开此组合服务。现在,如果您必须组成包括此组合服务的新服务,请使用编排器,并再次在ESB上公开。
将ESB用作服务交付机制、Web服务代理和代理。在组合服务时,编排器将使用ESB来访问相互作用的服务。如果这些相互作用的服务使用不兼容的XML模式,则ESB可以在运行时转换/映射它们到通用模式,并基于内容(例如名称空间)路由服务请求。
是的,编排在大多数情况下是ESB的职责。或者,如果你将ESB基础架构和编排基础架构之间划分一条界线,那么你这样做是出于性能原因的物理层面,而不是出于逻辑归属的责任。
你有两个选择 - 例如,当一个HR系统接收到一个新员工时 - 你会把说"合规部门需要先批准和检查,如果没问题,人力资源部门将需要最终确认雇用,并且财务部门将需要进行新的入账,然后工资系统将需要更新,如果失败了,我们将需要向HR发送电子邮件"这种业务逻辑放在哪里?如果所有的业务流程都被认为是由发起部门/应用程序所拥有的,那么企业作为整体的系统会变得复杂,具有不同的编排系统。
第二个选择是集中编排,实质上使它成为消息平台的逻辑伙伴。如果你选择把它们看作是独立的元素,那取决于你,但同时将它们描述为ESB同样是有效的。
企业服务总线不应该负责编排服务。
编排意味着至少需要一定的“智能”,尤其是在处理失败事务时进行补偿的能力。服务总线工具通常会称提供“try-catch”或类似的功能,但运行范围内的补偿能力是合适的编排工具的标志。此外,等待、了解自身状态或保持悬而未决的能力也是您正在处理编排工具而非总线的另一个指标。
考虑到1000多个步骤以及几十个服务,可以考虑流程中的条件语句。如果您的1000个步骤中所有的if-then语句都只涉及路由而不改变有效载荷,则仍处于“路由”中,因此仍然处于ESB。但是,如果有任何一个嵌套的if-then语句,那么我就会开始寻找不同的工具。此外,类似于路由的条件语句很快就会影响业务逻辑。一旦业务逻辑开始出现,那么更好的语言,如BPEL或BPMN,就是更好的选择。
通常用指挥交响乐团的例子来描述编曲是如何工作的,一个中心人物根据乐谱指挥音乐家。经常被忽略的是指挥不仅在指挥,而且在倾听,如果出了问题可以以可靠、可重复的方式进行补偿。
例如,想象一下我们的第一位指挥去找大号手,但该大号手已经决定去做其他事情了。一个简单的弹球式“编曲者”会带来大号部分,完全知道它不在那里,然后等待观众后来抱怨。一个非常精明的指挥会看到大号不见了,并立即提高更深的低音号来进行补偿。