EJB2.0系统中什么时候使用messaging或者RMI/IIOP
2008-04-25 22:36
274 查看
EJB2.0系统中什么时候使用messaging或者RMI/IIOP
以下几条是messaging的优势,和你需要去使用它的原因:
1.数据库性能。如果你去完成一个关系型数据库工作,如
对一个数据库持久化一个定单,使用messaging更有优势。
传送一个消息到一个二级消息队列去被晚些时候处理减轻了
在高峰时刻的主数据库压力。在早上负荷较低的早上,当
通信量比较小时,你能在消息队列中取出并处理那个消息
,并把定单插入到数据库中。注意这只是在用户无论他的操
作成功与否都不需要马上的回答时起作用,如检测他的信用卡。
2.快速反应。一个客户可能不想去被阻塞并去等待一个不存在的
反映。对于返回void值的方法,只可能什么都不返回或返回一个
异常。如果客户没有预料会收到一个异常,为什么非得要会被阻
塞得到一个反应?messaging允许客户去处理其他事情,当他被
阻塞得到一个方法的返回。
3.平滑的负载平衡。message-driven beans比session和entity
bean更加平滑的分布负载。用session和entity bean,一个负载
平衡算法聪明的猜出哪一个服务器负载更小。用messaging,负载
最小的服务器自己请求message来得到那个message。
4.请求优先。异步服务器能排队列,设置优先级,并用与meaasge
到达系统不同的顺序来处理它们。有一些消息系统允许消息按照
商业规则来被设置优先级来被排序。举个例子,在一个军用坦克
中,如果所有的对系统的请求都被发送到集中分发队列来异步,
那么开炮的命令被排在100个通信消息之后可能带来灾难。在军用
系统中,在通信消息前先处理开火控制和安全消息将更有优势。
一个设置了优先级的队列允许在队列中的消息重排来计算坦克中
开火控制的紧急性。
5.快速的集合分离的系统。许多已有系统是建立在面向消息的中
间件之上的,并能够很容易的用messaging来和你的J2EE系统交互。
messaging为商业处理和必须互相通信的分布式节点系统提供一个
快速开发环境。
6.松耦合系统。messaging可以使应用程序之间松散耦合。应用程序
在他们被编译时无需知道对方。这使你有“动态发现”的应用程序
,可能在快速变化、面向服务的商业环境下有用。
7.并行处理。messaging是一个在EJB发布中使用伪线程的的方法。
你能启动一系列消息并继续处理,和分布式的启动许多线程一样。
8.可靠性。messaging被使用即使服务器当掉。系统级的错误(如
数据库当掉了)通常不会影响操作的成功,因为消息仍在队列中
直到系统级的错误被解决。
9.多对多通信。如果你有许多团体一起互相通信,messaging是
合适的,因为它使许多生产者和消费者互相协作,而RMI/IIOP
是单源单目的的请求模型。
以下是你不应使用messaging的情况:
1.当你不确定操作是否成功。RMI/IIOP系统能抛出异常,而
message-driven bean不行。
2.当你需要返回结果。RMI/IIOP系统能马上返回结果,因为
请求是被立即执行的。相反,你能最终通过messaging返回结果,
不过这很让人郁闷:你需要发送分隔的返回消息,并用初始
的客户端来监听它们。
3.当你的操作是一个更大的一个事务的一部分。当你向目的地
发送一个消息,接收到的message-driven bean不能处理其他的
消息直到一个将来的事务。这对你需要这个操作是一个单独的,
原子的,要处理其他操作的一个事务的一部分来说是不合适的。
举个例子,当你操作一个银行帐户传送,这时候使用RMI/IIOP
来向一个银行帐户存钱是个坏主意,用messaging来取钱也一样,
因为取钱可能失败。
4.当你需要把客户的安全ID传给服务器。因为messaging不把
客户的安全ID传给接收的message-driven bean,你不能容易的
保证你的商业操作的安全性。
5.当你关心请求性能。messaging天生的比RMI/IIOP慢,因为
有一个在发送者和接收者之间的中介人(JMS)。
6.当你需要一个强类型,OO的系统。你通过使用messaging API
如JMS来发送消息。这是一个平滑的API而且不是面相对象的。
当你想要完成不同操作,服务器需要crack打开的消息,或
把它滤掉。与之相比,RMI/IIOP让你基于你想操作的商业操作
来调用不同的商业方法。这个更直觉;也更容易做编译时的
语意检查。
7.当你需要更紧密,更直接的系统。同步发布比messaging
更直接。你有巨大的自由什么时候发送数据类型,和你需要写
的和messaging比较最少的代码量。调试也更直接。当使用
完全同步的服务,每个客户端控制线程有一个单独的能被跟
踪的从客户端到服务器的路径,相反亦然。当系统有bug时,
需要跟踪它们的努力也是最小的。
以下几条是messaging的优势,和你需要去使用它的原因:
1.数据库性能。如果你去完成一个关系型数据库工作,如
对一个数据库持久化一个定单,使用messaging更有优势。
传送一个消息到一个二级消息队列去被晚些时候处理减轻了
在高峰时刻的主数据库压力。在早上负荷较低的早上,当
通信量比较小时,你能在消息队列中取出并处理那个消息
,并把定单插入到数据库中。注意这只是在用户无论他的操
作成功与否都不需要马上的回答时起作用,如检测他的信用卡。
2.快速反应。一个客户可能不想去被阻塞并去等待一个不存在的
反映。对于返回void值的方法,只可能什么都不返回或返回一个
异常。如果客户没有预料会收到一个异常,为什么非得要会被阻
塞得到一个反应?messaging允许客户去处理其他事情,当他被
阻塞得到一个方法的返回。
3.平滑的负载平衡。message-driven beans比session和entity
bean更加平滑的分布负载。用session和entity bean,一个负载
平衡算法聪明的猜出哪一个服务器负载更小。用messaging,负载
最小的服务器自己请求message来得到那个message。
4.请求优先。异步服务器能排队列,设置优先级,并用与meaasge
到达系统不同的顺序来处理它们。有一些消息系统允许消息按照
商业规则来被设置优先级来被排序。举个例子,在一个军用坦克
中,如果所有的对系统的请求都被发送到集中分发队列来异步,
那么开炮的命令被排在100个通信消息之后可能带来灾难。在军用
系统中,在通信消息前先处理开火控制和安全消息将更有优势。
一个设置了优先级的队列允许在队列中的消息重排来计算坦克中
开火控制的紧急性。
5.快速的集合分离的系统。许多已有系统是建立在面向消息的中
间件之上的,并能够很容易的用messaging来和你的J2EE系统交互。
messaging为商业处理和必须互相通信的分布式节点系统提供一个
快速开发环境。
6.松耦合系统。messaging可以使应用程序之间松散耦合。应用程序
在他们被编译时无需知道对方。这使你有“动态发现”的应用程序
,可能在快速变化、面向服务的商业环境下有用。
7.并行处理。messaging是一个在EJB发布中使用伪线程的的方法。
你能启动一系列消息并继续处理,和分布式的启动许多线程一样。
8.可靠性。messaging被使用即使服务器当掉。系统级的错误(如
数据库当掉了)通常不会影响操作的成功,因为消息仍在队列中
直到系统级的错误被解决。
9.多对多通信。如果你有许多团体一起互相通信,messaging是
合适的,因为它使许多生产者和消费者互相协作,而RMI/IIOP
是单源单目的的请求模型。
以下是你不应使用messaging的情况:
1.当你不确定操作是否成功。RMI/IIOP系统能抛出异常,而
message-driven bean不行。
2.当你需要返回结果。RMI/IIOP系统能马上返回结果,因为
请求是被立即执行的。相反,你能最终通过messaging返回结果,
不过这很让人郁闷:你需要发送分隔的返回消息,并用初始
的客户端来监听它们。
3.当你的操作是一个更大的一个事务的一部分。当你向目的地
发送一个消息,接收到的message-driven bean不能处理其他的
消息直到一个将来的事务。这对你需要这个操作是一个单独的,
原子的,要处理其他操作的一个事务的一部分来说是不合适的。
举个例子,当你操作一个银行帐户传送,这时候使用RMI/IIOP
来向一个银行帐户存钱是个坏主意,用messaging来取钱也一样,
因为取钱可能失败。
4.当你需要把客户的安全ID传给服务器。因为messaging不把
客户的安全ID传给接收的message-driven bean,你不能容易的
保证你的商业操作的安全性。
5.当你关心请求性能。messaging天生的比RMI/IIOP慢,因为
有一个在发送者和接收者之间的中介人(JMS)。
6.当你需要一个强类型,OO的系统。你通过使用messaging API
如JMS来发送消息。这是一个平滑的API而且不是面相对象的。
当你想要完成不同操作,服务器需要crack打开的消息,或
把它滤掉。与之相比,RMI/IIOP让你基于你想操作的商业操作
来调用不同的商业方法。这个更直觉;也更容易做编译时的
语意检查。
7.当你需要更紧密,更直接的系统。同步发布比messaging
更直接。你有巨大的自由什么时候发送数据类型,和你需要写
的和messaging比较最少的代码量。调试也更直接。当使用
完全同步的服务,每个客户端控制线程有一个单独的能被跟
踪的从客户端到服务器的路径,相反亦然。当系统有bug时,
需要跟踪它们的努力也是最小的。
相关文章推荐
- 什么时候在EJB系统中使用XML
- (4)通过注解方式 注入并使用 其他EJB或者服务
- win7 64位系统下 使用加载工具,加载驱动时提示“驱动服务启动失败”或者“此驱动程序被阻止加载”
- 用SignalR 2.0开发客服系统[系列5:使用SignalR的中文简体语言包和其他技术点]
- Firefox OS 2.0 模拟器 – 使用官方火狐浏览器扩展无痛完美模拟体验火狐手机系统
- 日志采集系统flume和kafka有什么区别及联系,它们分别在什么时候使用,什么时候又可以结合?
- log4net1.2.10 在asp.net 2.0当中的使用:写入文件或者数据库
- EJB第一枪:RMI and RMI-IIOP
- 使用现有ECC数据库进行安装或者恢复系统
- linux系统中使用Vim删除偶数行或者奇数行
- EJB通过注解方式注入并使用其他EJB或者服务、配置JBoss数据源
- 关于Java/RMI/JBoss/EJB/WebService/JMS的使用
- 软件项目或者产品有时候会用到本机网卡的物理MAC地址、IP地址、硬盘序列号加上使用软体名称和地址进行安全加密验证,例如结合MAC地址进行登录验证等等,当然这种项目一般在局域网内运行,能相对提高系统的安全性
- 使用tar或者afio对linux系统进行备份
- Linux下查看进程(ps或者top),或者使用图形化(系统监视器) .
- 用SignalR 2.0开发客服系统[系列4:负载均衡的情况下使用SignalR]
- web.js.什么时候使用“.”或者“[]”
- 一个系统中同时使用VC6.0+OpenCV1.0和VS2005+OpenCV2.0的方法
- 【Android】使用系统相机或者从相册中获取图片资源并进行适当裁剪
- 《使用.net 2.0开发多层架构的系统》系列文章发布预告