SOA 四项信条
- 边界明确
- 服务自治
- 服务共享数据模式和契约而不是类
- 基于策略确定服务兼容性
在大规模分布式应用程序(如 SOA系统)领域中,相关联得涉及模式被称为 Messagign 消息传送模式。
Messaging 模式(与设计模式类似)为复杂问题提供标准得解决方案。
以一种统一得形式解决在众多彼此分离得系统中共享数据得问题。
Document Message 模式使得能够采用一种统一、灵活得方法与服务通信。
该模式并不使用典型得 RPC 风格得参数化方法来暴露服务API,而是采用消息对象。
类似 RPC 的方法:
Customer[] RetrieveCustomers( string country);
Customer[] RetrieveCustomers( string country, string postalCode);
Customer[] RetrieveCustomers( string country, string postalCode, string street);
客户代码能以3种不同方式来获取客户记录。这种方法会很快变得难以维护。
Docment Message 模式通过将所有消息封装到文档正文中以形成一个更简单和干净得服务签名,
简化了通信:
Customer[ ] FindBy(CustomerSearchRequest request) ;
给出 Document Message 类:
public class CustomerSearchRequest
{
public string Country { get; set; }
public string PostalCode { get; set; }
public string Street { get; set; }
}
消息常包含其他热议得信息条目, 包括
1. 服务版本号
2. 确认标识符
3. 身份验证数据
把这些条目添加到一个所有请求都能够继承得基类中,通过在所有通信中使用 Document Message 模式,
可以容易地改进服务方法并包含额外得参数,而不需要修改方法的签名。
Request-Response 模式确保 响应和请求 一样均使用 Document Message 模式 , 因此
RetrieveCustomers 方法得签名类似与下面得代码:
CustomerSearchResponse RetrieveCustomers( CustomerSearchRequest request );
Request 可以继承自某个基类,该基类可以提供对
1. 通用消息
2. 成功标记
3. Correlation ID ( 关联 ID ) 等常见属性得访问。
而 Correlation Id 关联 Idempotent 模式
在所有服务中一致地使用 Request-Response 模式,从而形成灵活得、易于使用得API.
二 。 Reservation 模式
遵循 SOA 服务 4 项信条之一 : 服务自治
一次复杂的事务(为了完成某个工作单元需要发送多条信息)期间有必要维持长流程状态。
解决思路: 为第一个响应指派一个预订号码。
客户代码可以在后续的请求中使用该预订号码。让服务层来获取事务。
使用一个超时时间让预订状态在给定时间之后超时,这样就不会无限制地持有资源。
Idempotent 模式
计算领域, 幂等 Idempotent 操作是指使用相同得输入参数调用多次不会带来副作用得操作。
因为服务不能控制它的客户端如何使用,所以确保重复调用不会对系统状态造成非预期的效果非常重要。
客户代码调用一个服务调用发送请求。并指定一个唯一标识号码。
在接受该请求时,服务进行检查,通过搜索本地响应资源库看以前是否已经处理过它。
如果并不存在匹配该唯一标识符的响应,则该业务事务就可以进行。
如果已经存在,就取出存储的响应并将其返回给客户代码。
除了在每个请求中包含一个唯一的标识符,还可以让服务在返回给客户端的响应结果中包含同样的ID,
还可以带来另一个好处:允许调用该服务的客户代码验证匹配请求的响应,在这里这个唯一标识符
称为关联 ID .