典型情况.我们使用旧式XML Web Services internally在服务器场与多个分布式和本地客户端之间进行通信.没有第三方参与,只有我们自己和客户使用的应用程序.
目前,我们正在琢磨从移动XML WS到一个WCF/object-based模型,并一直与各种方法的实验.其中之一涉及直接通过线路传输域对象/聚合,可能会调用它们上的DataContract属性.
通过使用IExtensibleDataObject和DataContract使用Order属性DataMembers,我们应该能够处理简单的属性版本控制问题(记住,我们控制所有客户端并且可以轻松地强制更新它们).
我一直听说我们应该DTOs通过线路使用专用的,仅传输数据传输对象().
为什么?还有理由这样做吗?我们在服务器端和客户端使用相同的域模型,当然,只有在被认为是正确且"必要"时才预先填充集合等.集合属性利用服务定位器原理和IoC调用NHibernate-based"服务"直接(在服务器端)获取数据,以及WCF客户端上的"服务"客户端与WCF服务器场通信.
那么 - 为什么我们需要使用DTOs?
我一直在抵制任何个人职业投资,因为我的特定工作领域并不需要它,因此无法学习任何关于这个缩写词的事情.我很好奇是否值得我的时间,或者它是否会最终消亡的另一种计算时尚.
我将评估开源SOA解决方案.有什么选择?
我正在寻找提供(可能)完整SOA堆栈的东西.
我想要以下功能 -
现在Glassfish ESB看起来是个不错的选择.还有其他好的Stacks吗?
我对SOA有疑问.
SOAP 和 REST都被认为是实现面向服务的体系结构的方法吗?
我知道REST是一种风格,因此这引出了我这个问题.
我正在设计一个RESTful API.
一项服务应为多个键值对提供查询功能.例如,客户端可以使用一个HTTP GET请求查询不同的产品和相关数量.
客户想要使用金额44和产品2查询产品1,金额为55.我实际上不希望我的URI看起来像这样:
/produkt?productId1=1&productquantity1=44&productId2=2&productquantity2=55
Run Code Online (Sandbox Code Playgroud)
因为我不知道有多少产品被查询.
或者像这样:
/produkt?product=1,44&product=2,55
Run Code Online (Sandbox Code Playgroud)
因为客户怎么能知道在逗号之前有productId和逗号之后的数量.
有没有人有其他解决方案?或者,提供使用一个请求查询多个产品的可能性是不是RESTful?是否更好地提供仅查询一个具有相关数量的产品的可能性,如果客户想要查询更多产品,他们应该发送更多请求?
在REST服务之前拥有请求队列的最佳技术解决方案(框架/方法)是什么?这样我就可以增加REST服务实例的数量以获得更高的可用性,并将Request队列放在前面以形成服务客户端的服务/事务边界.
我计划开发一个微服务电子商务系统作为概念证明.该架构由3个组件组成:
一个基于javascript的单页面应用程序,它发送AJAX请求
带有REST API的服务器(API网关),它通过调用其他服务来提供接收的JSON数据
3项服务:CatalogProvider,CustomersProvider,CheckoutProvider
目前,服务都是Magento商店系统的API端点.
当我尝试通过向REST Api发送请求将用户登录到他们的Magento系统时,显然服务器在发送下一个请求时不记得会话.
此外,我使用Magento处理服务器端的购物车,并通过REST Api调用添加/更新/删除项目.在这里,当会话丢失时,在发送下一个请求时,添加的项目也会丢失.
所以我的问题是:
有哪些方法可以解决微服务架构中的会话处理问题?
有人知道SOA治理的全部意义吗?SOA治理和IT治理之间的区别(或相关性)是什么?如何使用市场上可用的SOA平台应用它?
在不应用SOA治理的情况下,构建在SOA平台上的项目能否成功?怎么样?我是从实际的角度来谈这里的.
有可能(甚至可能)我只是没有完全理解"工作单元"的概念.基本上,我将其视为面向对象环境中使用的广泛事务.启动工作单元,与对象交互,提交或回滚.但是,这如何分解为这些对象背后的数据存储的实际事务?
在具有单个DB和ORM(例如NHibernate)的系统中,它很容易.可以通过ORM维护交易.但是,自定义域模型隐藏了许多不同数据源的系统呢?并非所有这些数据源都是关系数据库?(这里的文件系统已经做了很多.)
现在,我坚持认为"你根本无法在同一'原子'业务操作中跨SQL2005数据库,SQL2000数据库,DB2数据库和文件系统维护事务." 因此,目前,团队中的开发人员(通常彼此独立工作)负责在代码中手动维护事务.每个DB都可以在其上进行适当的事务处理,但是整个业务操作都是手动检查并在每个重要步骤中进行平衡.
但是,随着域和标准开发人员流动的复杂性增加,这种方法将变得越来越困难并且随着时间的推移而容易出错.
有没有人有任何关于如何最好地解决这样一个领域的建议或例子,或者之前如何处理它?在这种情况下,实际的"域"仍处于起步阶段,随着原型的发展,有朝一日扩展并消耗/替换大型不同遗留应用程序的生态系统.因此,有足够的空间进行重新设计和重新分解.
作为参考,我目前的目标是10,000英尺的设计视图:大量的小型as-dumb-as-possible客户端应用程序调用基于消息的中央服务.该服务是"域核心"的入口,可以被认为是一个大型MVC风格的应用程序.对服务进行请求(很像"动作"),由处理程序拾取(很像"控制器").任何程序都在那里.它们与包含所有业务规则的模型进行交互.模型发布的事件是监听器("服务"?这部分在设计中仍然是多云并且需要改进)通过与存储库(数据库x,数据库y,文件系统,电子邮件,任何外部资源)交互来获取和处理.所有的快乐依赖注入相应.
抱歉所有的冗长:)但如果有人有任何建议,我很乐意听到它.即使(特别是)如果这个建议是"你的设计很糟糕,试试这个......"谢谢!
我试图围绕Apache Camel,这似乎是一个轻量级的ESB.如果我正确理解Camel/ESB,那么您可以将Camel Route视为节点和边的图形.每个节点都是路由上的端点(可以使用/生成消息).每条边是两个不同端点(1个生产者和1个消费者)之间的路径.
假设这是正确的,我有一个实际的问题:最佳实践是如何规定部署应用程序的ESB/Camel Route的?我应该将其打包为自己的JAR,还是值得成为自己的充满EJB,Web服务和其他JAR的EAR?
我想我是在询问如何部署/构建Camel Route或ESB,例如:
my-esb.ear/
ejb1.jar/
MyEJB_1.class
ejb2.jar/
MyEJB_2.class
webservice.war/
MyWebService.class
Run Code Online (Sandbox Code Playgroud)
要么...
my-esb.jar/
MyEJB_1.class
MyEJB_2.class
MyWebService.class
Run Code Online (Sandbox Code Playgroud) soa ×10
esb ×3
java ×3
rest ×3
architecture ×2
soap ×2
apache-camel ×1
eai ×1
http ×1
magento ×1
open-source ×1
php ×1
unit-of-work ×1
wcf ×1
web-services ×1