`

ice 的 Nonmutating 和 Idempotent

    博客分类:
  • ICE
 
阅读更多
转载地址:http://duckweeds.blog.sohu.com/95754129.html

Nonmutating 操作

    有一些操作,例如上面代码中的getTime操作,这个操作不会修改所操作的对象的值。它们在概念上等效于C plus plus的const 成员函数。你可以如下的指出这样的操作:

interface Clock       
{               
   nonmutating TimeOfDay getTime();               
   void setTime(TimeOfDay time);       
};   

nonmutating关键字指出了getTime操作不会修改它所操作的对象的状态。这样使用有两个原因:

•语言映射可以关于操作行为的附加知识的好处。例如:对于C plus plus来说,nonmutating操作映射到const成员函数。
•当得知一个操作不会修改对象的状态,则允许Ice运行时更积极的进行错误恢复。特别的,Ice会保证操作调用的最多一次语义。
    对于普通的操作,Ice运行时对于如何处理错误是保守的。例如,如果一个客户端发送一个操作调用到服务器,然后丢失了连接,对于客户端的 Ice运行时来说,没有办法知道调用是否成功。这就意味着,运行时不能通过尝试重新连接和再次发送请求来恢复错误,因为这可能第二次引发操作以及违背了最多一次语义。运行时没有选择,只能把错误报告给应用。对于nonmutating操作,换句话说,客户端的运行时可以尝试再次连接和安全的二次送出失败的请求。如果第二次发送能够到达服务器,那么万事OK。只有第二次再次失败,错误才会报告给应用(错误重试的次数可以在Ice的配置文件中配置)。

    Idempotent操作

    我们可以更进一步去修改上面的Clock接口的定义,从而可以让setTime操作是idempotent的:

interface Clock       
{               
   nonmutating TimeOfDay getTime();               
   idempotent void setTime(TimeOfDay time);       
};   

   对某一个操作进行两次成功的操作,其结果都一样,就像只调用了一次一样,那么这个操作就是idempotent操作。例如,x = 1; 是一个idempotent操作因为不管执行了一次还是两次,x的值都是1。换句话说,x += 1;就不是一个idempotent操作,因为它执行了两次后,结果不同了。

    idempotent关键字指出了一个操作能够安全的执行多次。同nonmutating操作一样,Ice运行时使用idempotent来达到更积极地错误恢复。

    一个操作只能是nonmutating或idempotent,不能两个都是。(nonmutating隐含了idempotent)

分享到:
评论

相关推荐

    ICE中间件教程

    ### ICE中间件教程知识点梳理 #### 一、ICE概述与结构 **1.1 ICE概述** ICE (Internet Communication Engine) 是一种高性能、...这部分内容主要涉及如何在不同的操作系统和编程语言环境下配置ICE的开发和运行环境。

    PHP通过ice调用python程序.pdf

    这些方法的特性如`idempotent`和`cpp:const`是Ice的特定注解,用于指导编译器生成对应语言的代码。 2. 创建Python服务端:在Python中,我们需要实现这个接口并启动服务。`Server.py`展示了如何加载Slice文件,创建...

    idempotent-spring-boot-starter:弹簧启动幂等启动器

    idempotent 幂等处理方案是对原有 代码重构和功能增强。非常感谢 idempotent 作者的分享。1.原理1.请求开始前,根据key查询查到结果:报错未查到结果:存入key-value-expireTimekey=ip+url+args2.请求结束后,直接...

    07-springboot-redis-idempotent.zip

    标题 "07-springboot-redis-idempotent.zip" 暗示了这是一个关于Spring Boot集成Redis实现幂等性的教程。在分布式系统中,幂等性是一个关键概念,确保同一个请求无论执行多少次,结果始终相同,这对于防止重复操作、...

    idempotent.js:JavaScript 的幂等操作

    JavaScript 数组和对象的幂等操作默认情况下,JavaScript 中的大多数操作都会修改特定值(对象)的内部结构。 无论是通过调用sort 、 push / pop / shift / unshift... 幸运的是,这就是idempotent用武之地。 idempoten

    aws-lambda-idempotent:调用 AWS Lambda 函数防止重复执行的库

    aws-lambda 幂等 Internet守护程序在云中不停地运行,可以执行您选择的任何有用的工作。 该库正在调用 AWS Lambda 函数以防止重复执行。 推理 AWS Lambda 函数的一个有点争议但绝对合法的用例是递归。...

    Idempotent_restart_httpd_ansible

    2. **Idempotent Ansible Tasks**:Ansible 提供了 `command` 和 `service` 模块来与系统交互。为了确保 idempotency,通常会使用 `service` 模块的 `state` 参数,如 `state: started` 或 `state: restarted`,配合...

    ng-idempotent

    在 IT 领域,尤其是前端开发中,"ng-idempotent" 提到的概念与 JavaScript 和幂等性有关。幂等性(Idempotency)是计算机科学中的一个重要概念,它指的是一个操作无论执行多少次,结果始终保持不变。在 HTTP 协议中...

    幂等-babel-polyfill:多次导入babel-polyfill

    Silicon Hills提供优质的Node和React开发和支持服务。 联系 。 产品特点 支持ES6导入 支持要求 安装 npm install --save idempotent-babel-polyfill 依存关系 用法 通过ES6 Import实施 import 'idempotent-babel-...

    自定义注解解决API接口幂等设计防止表单重复提交(生成token存放到redis中)

    public Object handleIdempotent(ProceedingJoinPoint joinPoint, Idempotent idempotent) throws Throwable { String key = idempotent.keyPrefix() + generateUniqueId(); // 生成唯一ID if (redisTemplate....

    J2EE_Clustering 王昱.pdf

    文章不仅涵盖了基础理论,还涉及了具体的实现策略和技术细节,为读者提供了全面而深入的理解。 ### J2EE集群技术的重要性 在大型企业级应用中,系统面临的挑战包括不可预测的并发用户增长、海量数据处理需求以及...

    藏经阁-Bulletproof Jobs Scale Patterns for Spark Magic.pdf

    但是,自动重试仅适用于幂等(idempotent) Jobs,因为多次执行不会改变状态。在 Spark 中,Dataset.write.mode("overwrite").save(…) 是一种半幂等的方式来保存数据。 幂等性 幂等性是 Spark Jobs 的第二个最...

    rest-idempotency:REST和幂等性原理样本

    如果您想知道如何使用IDEMPOTENT和NON-IDEMPOTENT方法,请查看“用户”资源。 否则,如果您想知道如何使用“虚拟资源”,则应查看“订单”资源。 要添加新订单,请执行以下操作:POST请求(系统状

    Flink八股文-5分钟学大数据

    Idempotent 操作可以确保数据处理的正确性和一致性,即使下级存储不支持事务。 9. Flink 常用的算子有哪些 Flink 提供了多种算子,包括 Map、Filter、Reduce、Join、Aggregation 等。这些算子可以用于实现各种数据...

Global site tag (gtag.js) - Google Analytics