我考虑了一组servives的SOA架构,以支持进出口咨询了,以前我们使用的数据库的集成,每个应用程序挑选出来它从一个共享的MS SQL数据库需要与它等合作业务.我们有各种与怪物数据库集成的应用程序,包括java,.net和microsoft访问,由于一切都是紧密耦合的,因此存在引用完整性.
我对如何支持服务之间的数据共享感到有点困惑.
让我们将产品服务放在批发商每个月提供的产品数据库之上.我们构建了一个域模型,并使用Hibernate或者它来实现数据库的实现,实现明智产品是一个大型对象图,给出了批发商提供的有关产品的信息.
现在假设Review服务,定价服务,送货服务和Stock Service将订阅ProductUpdated,ProductAdded,ProductDeleted.问题是每个服务只需要有关产品的部分或部分信息.运输可能只需要尺寸和重量.定价可能只需要产品ID,批发成本,批量折扣,迄今为止有效的价格.审核可能需要产品ID,产品名称,生产商.
是标准做法只是发布整个产品(适当的非订户特定合同,例如ProductUpdated,以及合适的架构 - 代表所有产品对象图),并让订户将他们需要的任何内容映射到他们的域模型(或者他们做什么他们想要,甚至可能没有域模型)...
或者当我写这篇文章时,我想的可能是:
产品服务发布ProductAdded消息(不包括产品详细信息只是产品ID和时间戳)
定价服务订阅ProductAdded并发布RequestPricingForProduct消息
产品服务发布ResultForPricingForProduct消息
嗯..似乎更好一点......但它的感觉就像我建基于什么其他服务我可以找出什么,他们会需要,也许在未来的XYZ服务需要的东西不同产品的服务合同.我会停在那里,因为我认为它变得越来越清楚,我感到困惑...或许上述方法将起作用,因为我应该揭露一种方式来返回任何应该是公共的正确的.
任何评论或方向都非常感谢.对不起,如果这出现了一半.
我过去曾使用JMS来构建应用程序,它运行良好.现在我和想要使用Spec:SOAP over Java Message Service 1.0的Architects一起工作.
这个规格过于复杂.我没有看到很多实现(除了供应商推动规范).
这里有人在生产环境中使用此规范吗?使用此规范的主要好处是什么?
在此之前因为过于宽泛而关闭:Spring Integration论坛已关闭并引用Stack Overflow(SO).这不是SO的关注,但我很想得到答案......
Mule ESB项目在其网站上解释了它与Spring Integration的区别.但是,关于文档的dcterms.date 2012-07-19T18:43-03:00,文本可能已过时.
引用段落的要点是
这些要点仍然有效吗?是否存在更详细的(如果有的话)最新比较?
Mule ESB与Spring Integration
最近,Spring组件中添加了一个名为Spring Integration的新组件,它允许在Spring Framework中创建和管理类似ESB的功能和EIP.Spring Integration采用所谓的"以应用程序为中心"的集成方法.
Spring Integration旨在通过提供实现框架,为特定应用程序提供"只需一点"ESB风格的集成,而不是实现共享总线,允许集中管理,管理和配置组件和系统之间的所有集成和消息传递.常见的EIP,例如消息总线和简单路由.由于其范围有限,Spring Integration最适合于必须集成少量组件的情况,通常是内部组件,并且所讨论的基础架构由大量其他Spring组件组成.对于任何更复杂的事情,缺少公共总线,再加上可用于年轻项目的极少数支持的传输和变换器,使得Spring Integration不适合这项任务.
使用Mule ESB处理Spring环境中的集成的优点是Mule ESB不仅仅是一个ESB - 它是一个集成平台.尽管Spring Integration的范围仅限于Spring Portfolio环境中的小规模集成,但Mule的有意模块化架构允许团队快速为任何场景提供最轻微的集成解决方案,从简单的点对点集成到复杂的SOA,云和伙伴生态系统方案
目前我们有一个巨大的API,我们的后台,我们的前端,以及我们的公共API使用.
这引起了很多麻烦,因为在构建新端点时,我发现代码中有很多特定于应用程序的逻辑,我不一定要在我的端点中包含这些逻辑.例如,创建用户的代码可能包含发送欢迎电子邮件的代码,但由于后台端点不需要,因此我需要添加没有该逻辑的新端点.
我正在考虑使用大型重构来将我们的代码库分解为许多较小的高度特定的服务API,然后在这些API之上构建一组小型应用程序API.
因此,例如,创建新用户的应用程序端点可能会在重构后执行以下操作:
customerService.createCustomer();
paymentService.chargeCard();
emailService.sendWelcomeEmail();
Run Code Online (Sandbox Code Playgroud)
应用程序和服务API将是完全独立的代码库(可能是每个服务单独的代码库),它们也可以使用不同的语言构建.它们只会通过REST API调用进行交互.它们将位于同一个本地网络上,因此延迟不应该是一个大问题.
这是一个坏主意吗?我以前从未见过/曾经在将两者分开的代码库上工作,所以也许有更好的架构来实现我正在寻找的灵活性和可维护性?
建议,链接或评论都将不胜感激.
您认为用 MediatR 替换我的服务层或服务类是否合理?例如,我的服务类如下所示:
public interface IEntityService<TEntityDto> where TEntityDto : class, IDto
{
Task<TEntityDto> CreateAsync(TEntityDto entityDto);
Task<bool> DeleteAsync(int id);
Task<IEnumerable<TEntityDto>> GetAllAsync(SieveModel sieveModel);
Task<TEntityDto> GetByIdAsync(int id);
Task<TEntityDto> UpdateAsync(int id, TEntityDto entityDto);
}
Run Code Online (Sandbox Code Playgroud)
我想实现某种模块化设计,以便其他动态加载的模块或插件可以为我的主要核心应用程序编写自己的通知或命令处理程序。
目前,我的应用程序根本不是事件驱动的,并且我的动态加载的插件没有简单的方法来进行通信。
我可以将 MediatR 合并到我的控制器中,完全删除服务层,或者将它与我的服务层一起使用,只是发布通知,以便我的插件可以处理它们。
目前,我的逻辑主要是 CRUD,但在创建、更新、删除之前有很多自定义逻辑正在进行。
我的服务的可能替换看起来像:
public class CommandHandler : IRequestHandler<CreateCommand, Response>, IRequestHandler<UpdateCommand, Response>, IRequestHandler<DeleteCommand, bool>
{
private readonly DbContext _dbContext;
public CommandHandler(DbContext dbContext)
{
_dbContext = dbContext;
}
public Task<Response> Handle(CreateCommand request, CancellationToken cancellationToken)
{
//...
}
public Task<Response> Handle(UpdateCommand request, CancellationToken cancellationToken)
{
//...
}
public …Run Code Online (Sandbox Code Playgroud) 我是SOA世界的新手.因此,我正在研究一些"SOA框架/技术",并试图了解如何利用它们来构建高度可扩展(Facebook类)的网站.
我想在这里解决几个"痛苦":
我研究了一些能够回答上述标准子集的技术:
现在,我理解如何从上面得到可组合性和语言独立性的某些方面.但是,我没有找到关于如何使用上述/其他工具实现可伸缩性和高可用性的更多具体信息(不是嗡嗡声).最后我得到了我的问题:
如何利用SOA技术来解决我上面定义的痛苦?我在哪里可以找到技术指南?我正在寻找的不仅仅是系统图,而是实际的库,代码示例,APIS ......
假设我有一个大型中间件基础架构来调解多个业务组件(客户应用程序,网络,支付等)之间的请求.中间件堆栈负责编排,路由,转换和其他内容(类似于Gregor Hohpe的Enterprise Integration Patterns一书).
我的问题是:在中间件上放置一些业务逻辑是一种好的设计吗?
假设我的应用程序A从中间件请求一些客户数据.但是为了获得这些数据,我必须提供客户ID和其他一些参数.获取此参数应该由请求应用程序完成,还是负责"促进"并提供接收客户ID的接口并在内部获取其他参数的中间件?
我意识到这不是一个简单的问题(因为业务逻辑的定义),但我想知道它是一般方法还是一些指导方针.
我经常听到面向服务的体系结构(SOA)作为非技术客户或项目经理之间的流行语而被抛弃,对实际需要的内容几乎没有关注或理解(例如:"我可以购买SOA吗?").还有很多关于SOA的错误信息(例如:"只有Web应用程序可以使用SOA")以及对其功能的普遍缺乏理解(例如:"SOA可以使您的所有数据一起工作").
作为了解SOA技术方面的人,您有哪些关键事实可以用来教育项目经理如何正确使用和理解SOA?与非技术人员一起设置记录的最佳方法是什么?
这可能听起来像一个简单的问题,但作为Webservies的新手,这是我第一次使用它,所以我怀疑.
问:如何使用Web服务传递对象或复杂类型?我创建了一个简单的Web服务,并传递字符串和整数类型,但我不知道如何使用webservice传递对象,因此任何指导都将受到高度赞赏.
谢谢.
我部署了一个Web服务并准备使用.客户端应用程序将同步并极其频繁地使用此服务.从Web服务返回的数据量也很大.
Web服务客户端是Web应用程序(liferay portlet).我在eclipse中生成了带有轴的客户端部分.
在我的第一次测试中,在每个请求中,我实例化一个新的ServiceProxy并调用它的方法.我不确定这个结构的健壮性和可靠性(每次都创建一个新的代理对象).
我使用singleton代理将其更改为静态类,但我不确定在同时调用Web应用程序客户端(并发问题)期间会发生什么.
我希望设计能够将我的Web应用程序与Web服务客户端分离,并且具有客户端代理缓存(不是数据缓存,因为我的应用程序是实时的)或类似的东西.
我认为Web服务客户端部分应该有一个设计模式或最佳实践.
soa ×10
web-services ×4
java ×3
soap ×2
api ×1
architecture ×1
asp.net-core ×1
c# ×1
client ×1
eai ×1
esb ×1
jms ×1
mediatr ×1
middleware ×1
mule ×1
rest ×1
scalability ×1
service ×1