InfoQ

新闻

使用AP4R在Ruby中实现可靠消息传送

作者 Sebastien Auvray译者 Jason Lai 发布于 2007年6月19日 下午7时30分

社区
Ruby
主题
消息传送
标签
JMS,
Ruby on Rails,
DRb

AP4R Logo一直以来,篠原俊一(Shunichi Shinohara)和加藤究(Kiwamu Kato)在致力于将可靠消息传送(Reliable Messaging)引入Ruby。他们以先前设计基于Java的高容量消息传送框架的经验为基础,通过他们自主的API和协议的项目,试图将这个努力变为现实。AP4R这个项目的名称是Asynchronous Processing for Ruby的缩写,意即“Ruby的异步处理”。该项目是一个异步可靠消息处理的实现,提供消息队列和消息分派的功能。篠原和加藤在日本Ruby会议2007(RubyKaigi 2007)上进行了演讲(PDF幻灯片),介绍了他们的API,并强调其核心设计哲学:鲁棒性和轻量级。

这个项目问世仅仅一年,但已经能支持:

  1. 不管业务逻辑是非同步调用还是同步调用的,都可以以简单的Web应用或者Ruby代码的形式实现;
  2. RBMS(MySQL)或者基于文件的消息持久化能力;
  3. 支持在单个或者多个服务器上跨多个AP4R进程的负载平衡;
  4. 对以下多个协议的支持:XML-RPC、SOAP和HTTP POST等等。

先前,篠原和加藤已经实现过他们自己的基于Java的API和协议(称为RtFA),这项成果被用于一个包含100台服务器的大型应用中,该应用每天处理超过1亿条消息。篠原和加藤声称,他们已经改进了先前在AP4R上的工作,并且也在易用性上花了很大工夫。AP4R所附带的文档非常完整详尽。

要将AP4R整合进Rails,典型流程如下:

  1. 客户端(如Web浏览器)向Web服务器(Apache和Lighttpd等)发送请求;(
  2. Rails应用通过mod_proxy或者其它被同步地在mongrel上执行;
  3. Rails应用通过AP4R的API发送消息,并可以在随后立刻响应给客户端;
  4. AP4R将消息放入队列,并且异步地将其请求到Web服务器;
  5. 异步的业务逻辑(以常见的Rails Action的形式实现)被执行。

0.3.x关注的是后台服务化(Daemonization)、URL重写过滤器(URL-rewrite filter)、DLQ / SAF恢复,以及对将Stomp和HTTP作为底层协议的支持。今后的版本将包含对监控和管理的支持(如线程状态和Web前端)、与Cacti和Nagios等的协作、多进程、动态可配置性、自动恢复和阻塞队列等等。

查看英文原文:Reliable Messaging in Ruby with AP4R

没有回复

回复

独家内容

专访开源项目Amoeba架构师陈思儒

DBA notes站长冯大辉(Fenng)代表InfoQ中文站采访了分布式数据库Proxy开源项目Amoeba的架构师和主要开发者陈思儒,内容包括Amoeba项目的起因、功能及其愿景等。

使用JSF、Ajax和Seam开发Portlets(2/3)

作为三期系列文章的第二部分,本文延续了上一期内容,介绍了RichFaces,包括如何把RichFaces集成到之前提到的示例应用中、如何部署RichFaces porlet和RichFaces的多种特性和功能。

Jeff Barr谈论Amazon Web服务

Amazon Web Services(AWS)的传道者Jeff Barr讨论了SimpleDB、S3、EC2、SQS、云计算、Amazon的不同服务如何与应用交互、AWS的起源、SimpleDB和微软SQL Server Data Services、AWS cloud的全球化、三月份的AWS停机。

用Erlang实现领域特定语言

Erlang的并发模型很有名,它的健壮性也很有名。但其他方面呢?在这篇文章里,Dennis Byrne演示了如何用Erlang建立内部DSL。

基于Rails的企业级应用剖析

本视频主要以FreeWheel为例,对一个基于Rails的企业级应用进行了剖析。其中包括:FreeWheel的架构、部署、数据库的问题、REST API、敏捷开发过程、如何去写测试以及持续集成等等。

JavaFX技术预览

JavaFX显示了Sun的Java系列产品市场方向的一个重大转变。随着1.0版的即将发布,InfoQ以JavaFX预览版为参考,与Sun高级工程师Joshua Marinacci探讨了即将发布的1.0正式版。

剖析短迭代

敏捷教练Dave Nicolette提出:我们应该如何设定迭代长度?是要根据发布周期的时间么?使用短迭代又有哪些好处?

应用JSF、Ajax和Seam开发Portlets(1/3)

本文主要讲述了如何用JBoss Portlet Container 和JBoss Portlet Bridge创建新项目,怎样配置一个JSF应用去使用JBoss Portlet Bridge,以及JBoss Portlet Bridge所具备的功能。