近年来,至少在参与大多数信息技术活动的人们中,面向服务的体系结构术语已经普及。 这种方法建议的指导原则是在不同的可分配系统领域中成功的主要因素。
正如定义清晰易懂一样,将其实现到真实项目中也要直观,简洁,优雅。
我发布了一个应用程序,该应用程序演示了如何利用EIP(企业集成模式),IoC(控制反转)以及构建工具和脚本语言(例如Groovy)将SOA的原理应用于一个小型项目。
我分析了一个简单的业务案例 :一家娱乐提供商,希望根据客户服务的订阅向其某些客户分发奖励和奖金。
处理过程很简单:
需要提供RewardsService的实现。 该服务接受客户帐号和包含渠道订阅的投资组合作为输入。客户状态团队目前正在开发EligibilityService,该服务接受帐号作为输入。
我建立了一个基础架构来为第一个有意义的功能编写验收测试。 这就是可以定义为“行走骨架”的东西。 原型,其基本要素是可以从Github轻松下载后可以构建,部署和测试。
RewardService是由客户端调用,调用,反过来,whichhowever,在这种情况下没有实现合格的服务。 由于许多实际场景都希望使用外部服务,因此概念验证将资格服务指向黑匣子,其中仅请求/响应接口是已知的。
单元测试通过Camel测试框架模拟了模拟端点的资格服务行为。 但是,如果你想运行在本地计算机上的应用程序我设置了 ,一行代码内,一个虚假的合格服务,merelyreturns了积极的回应:
def alwaysEligible = {exchange -> if(exchange){exchange.getOut().setBody('CUSTOMER_ELIGIBLE')}} as Processor
入口点是基于Apache CXF构建的HTTP Restful接口,可以在配置中的几行之内轻松设置。 Spring通过以下方式初始化CXF:
jaxrs.'server'(id:'restService',address:'http://${http.host}:${http.port}') {jaxrs.'serviceBeans'{ ref(bean:'rewardService')} }
服务通过Apache Camel连接。 RewardService仅包含ESB上下文的引用– ProducerTemplate的实例。 这种解决方案允许在链接系统和业务服务之间完全隔离。Camel上下文表示SOA的布线,并通过DSL进行配置,如下例所示:
from('direct:rewards').to(eligibilityServiceEndpoint)
参考:来自JCG合作伙伴 Giancarlo Frison的SOA示例应用程序 , 通过复杂的博客使事情变得简单 。
翻译自: https://www.javacodegeeks.com/2012/04/soa-example-application.html