一、服务和状态
1、无状态服务
从概念上,一个无状态服务是在不同服务调用之间不维持任何状态的服务。这就是说,
在服务调用结束后,要销毁所有为运行服务临时创建的局部变量和对象。
2、有状态服务
一个有状态的服务,指的是在多个服务调用之间,可以保持状态的服务。
有状态服务的典型例子是购物车。
3、无状态服务为什么更好
首先,对无状态服务来说,在服务层做到负载平衡和失效备援相当简单、
而有状态服务的确定就是,它们被绑定在绘会话上。
二、幂等性
1、幂等的服务
所有读取服务都是幂等的,因为一个服务供应者无论多频繁地执行返回数据的请求都没有关系。
2、实现幂等性
实现幂等的普通方法相当简单,消费者发送数据的方式必须能让供应者看得出
两个技术性请求其实是同一个。为此,消费者可以随着每次新请求发送一个唯一的ID,
如果消费者没有得到应答,他的每次重试都用同样的ID。
三、测试和调试
1、单元测试、
2、分布式测试
3、关联ID
对基础设施(ESB)有一个至关重要的要求:能将构成服务调用或完整业务流程的消息关联起来。
另外,你还必须能将ESB外部的数据流和ESB内部的数据流关联起来。因此,通常你需要能对不同
系统和流程的数据用一个或多个ID打标签。这样的ID被称为“关联ID”。
对每个服务调用,你最终可能需要用到多达4个ID
①一个用于消息的本地ID,由你的基础设施(工具)提供。
②一个ID将消息与所有其他属于同一个服务调用的消息关联起来。
③一个ID将消息或服务与所有其他属于同一个业务流程的消息和服务调用关联起来。
④一个技术性ID用于处理幂等性
四、处理技术性数据(头数据)
关联ID只是ESB内部在运行时使用技术性数据处理消息的一个例子。除业务数据("有效载荷")之外,
你还需要数据用于路由消息、检查安全考量、跟踪和监测消息,如此等等。所有这些如何处理依赖于
你的中间件和ESB技术,然而,这些消息通常都存放在某种类型的头部(例如一个SOAP头)中。关于这样
的头数据,给出一个通用的提示:永远不要假设你事先就了解所有的技术特性。
对你的技术性头部来说,推荐的方法是包含一个可以随着时间增长的通用链表(比如一个健/值链表)
五、数据类型
1、基础数据类型
2、引用语义
实现引用语义(有时也称为"空值语义")意味着存在被定义为代表"未设置"状态的值。
3、更高阶的数据类型
六、错误处理
通用的服务异常类型的属性