一:协作服务
1 @CooperationService,类似于Spring的@Service
所有标记@CooperationService的类都将检查类方法里是否有如下annotation
@Publish / @Subscribe
@ClusterSync
@RemotePublish / @RemoteSubscriber
@RemoteNotify / @RemoteWait
@Process / @Task
2 @Publish,有如下属性
path: 一个逻辑路径,必须要
ruleExp: 根据输入值,输出值的表达式判断是否需要Publish,否则,总是通知其他机器. 如规则rule="returnValue==true",默认是发送
argExp:一个参数表达式列表,如果没有,则按照输入参数和输出参数作为参数列表,传递个sub。参数格式如:argExp="args0.orderId,args1,returnValue;"
@Subscribe
path: 一个逻辑路径,必须要
runPolicy: 运行时机,有俩个值,一个是sameTransacion,表示于publish方法在同一事物里,另外一个是afterCommint,这是默认值,表示当事物成功提交后异步执行,如果Publish没有在事物上下文里,则@publish方法执行完毕后立刻执行
3 @ClusterSync
path:一个逻辑路径,一旦机器(JVM)获取锁,将永久占有锁,机器宕机或者失去连接,将导致其他机器中的某一个占用
allowAcessAsFistTime: false或者true,默认false。如果为true,则允许第一次调用忽略锁
4 @RemotePublish,同Publish,但是发布到远程
path 一个路径
ruleEx: 根据输入值,输出值判断是否需要Notify,默认是returnValue!=null ,否则,总是通知其他机器.如规则rule="returnValue==true"
argExp:一个参数表达式列表,如果没有,则按照输入参数和输出参数作为参数列表,传递个sub。参数格式如:argExp="arg0=input0.orderId;arg1=input0.cash;arg2=returnValue;"
@RemoteSubscriber
path:一个路径。
5 @RemoteNotify,远程只能有一个被执行
path 一个路径
rule: 根据输入值,输出值的表达式判断是否需要Notify,否则,总是通知其他机器. 如规则rule="returnValue==true",默认是发送
argExp:一个参数表达式列表,如果没有,则按照输入参数和输出参数作为参数列表,传递个sub。参数格式如:argExp="arg0=input0.orderId;arg1=input0.cash;arg2=returnValue;"
@RemoteWait ,
path:一个路径。
6 @Process
@Task待定
二:协作服务提供者
每组annotation可以有自己的协作服务提供者,或者共用一种协作服务提供者(如果服务提供者都支持)。
协作服务提供时机应该是系统启动成功后(也包括系统各个组件初始化成功后)
Remote的协作服务实现可以通过JMS,ZK,甚至数据库表共享来实现。推荐使用ZK,但ZK 对RemotePublish 支持并不好。不适合线上业务,只适合一些数据同步和管理功能。
@Publish,@Process是基于Local的,则不需一个第三方协作服务提供者。
三:协作服务发现:
通过Spring的机制PostProcessor,首先找到注解为@CooperationService的类,然后依次遍历方法,可以发现这些需要服务的方法和类
也能适合别的框架,如没有spring的情况
四 协作者
分为发起方和接收方,通过申明annotation,可以实现协作。也可以直接在代码里调用协作服务API以满足发起方的灵活性要求.如一个方法体里需要俩次Publish到不同地方
PublicService pub = ctx.get("CooperationService-Pub");pub.send(path1, arglist),pub.send(path2,arglist2)
五 应用场景说明
1 多台机器上只有一台能执行某个job,则使用@RemoteSynronized
2 主业务调用后会调用一些次要业务,不希望次要业务影响主业务的性能和牺牲可维护性 主业务使用@Publish,多个次业务使用@Subscribe。
3 数据需要同步到多台机器上,使用@RemotePublish和 @RemoteSubscriber标签
4 数据需要交给远程的任一台机器处理,使用@RemoteNotify然后结合@RemoteWait 标签一起用
5 主业务和次要业务处理后,还要求交给远端一个机器处理 可以在使用@Publish,@Subscrbie后,可以结合@RemoteNotify,@RemoteWait 来处理
有兴趣可以关注 http://sourceforge.net/p/spring-dumpling/wiki/Home/ 过一阵子会提供更完善的文档和例子
相关推荐
标题 "dumpling-0.2.zip" 暗示我们正在处理一个软件包或库的版本,这里的 "dumpling" 很可能是项目的名字,而 "0.2" 表示这是该项目的第二个次要版本。这个压缩包可能包含源代码、构建脚本和其他资源,用于开发或...
该项目是通过引导的。可用脚本在项目目录中,可以运行:npm start 在开发模式下运行应用程序。 打开在浏览器中查看它。 如果您进行编辑,则页面将重新加载。 您还将在控制台中看到任何棉绒错误。 该项目位于此处: :
【Dumpling网络可视化工具】是一个开放源代码的项目,主要设计用于帮助用户解析和分析网络数据包。这款工具基于PHP编程语言,并依赖于MySql数据库进行数据存储和管理,提供了一个直观的Web界面来展示网络流量信息。...
我还得到了兄弟的帮助,为这个项目制作了一个 Web 应用程序。 我已经了解了这些很酷的虚拟助手的基本工作原理,谷歌助手、Siri 和我一直以来最喜欢的 Jarvis(笑) train 脚本很长,因为它还包括文本预处理过程...
常用的recovery工具
dumpling jump.exe
rice_dumpling.py
7. January - 一月,一年的第一个月。 8. race - 比赛,如龙舟比赛。 9. songbird - 鸣鸟,与春天的生机勃勃相呼应。 10. February - 二月,春节通常在这个月庆祝。 11. place - 地方,指举行活动的场所。 12. knock...
这份资料是针对苏教版牛津小学五年级下学期的英语单词表,涵盖了多个单元的重要词汇,旨在帮助学生系统地学习和复习英语基础知识。以下是各单元的主要知识点: **Unit 1** 主要学习与人物、原因和服装相关词汇,如...
- spring(春天) - summer(夏天) - autumn(秋天) - winter(冬天) 3. **方位**: - east(东) - south(南) - west(西) - north(北) - left(左) - right(右) 4. **交通工具**: - bike...
这个过程涉及到一系列规则,帮助学生理解并记忆不同类型的名词如何转变为复数形式。以下是对这些规则的详细解释: 1. **一般规则**:大多数名词在词尾加-s来形成复数,如:desk -> desks,girl -> girls,boy -> ...
这篇文档包含了三篇关于小学生如何用英语描述包饺子经历的文章,是小学英语学习的一个实践性写作题材。...通过这样的写作练习,学生不仅能学习新的词汇和语法,还能锻炼叙事技巧,并学会如何有条理地描述一个过程。
这篇文档是针对初中一年级学生设计的一份关于外研版英语教材Module 10 Spring Festival的练习题及答案。模块主题围绕春节这一中国传统节日展开,旨在帮助学生提高英语水平,同时了解和学习中国文化。 在练习题中,...
以上是台湾小吃的一些代表,每一种都有其独特的味道和制作工艺,是台湾饮食文化的重要体现。这些美食不仅反映了台湾的历史和地理环境,还承载了当地人的情感与记忆。通过了解和尝试这些小吃,可以更好地体验台湾的...