我需要一个基于Web的系统的消息/排队解决方案

时间:2010-08-08 20:27:50

标签: python mysql ubuntu message-queue

我正在为在Ubuntu上运行的基于Web的系统寻找消息/排队解决方案。

该系统基于以下技术构建:

  
      
  • Javascript(Extjs框架) - 前端
  •   
  • PHP
  •   
  • Python(与加密设备交互的守护程序服务)
  •   
  • Python pyserial - (串口交互)
  •   
  • MySQL
  •   
  • Linux - Ccustom bash脚本(更新数据库/邮件报告)
  •   

该系统具有以下用途:

  
      
  • 在分布式平台上捕获客户端信息
  •   
  • 使用硬件设备加密/解密敏感交易
  •   

系统崩溃:

  
      
  1. 用户可以使用网络浏览器访问系统
  2.   
  3. 用户捕获客户信息并按下“提交”按钮   数据被发送到加密设备,系统进入等待状态
  4.   
  5. 然后在设备上加密数据并将其发送回浏览器
  6.   
  7. 加密数据保存到数据库
  8.   
  9. 系统退出等待状态并显示DONE消息
  10.   

请注意:我已经处理了等待/进度消息,所以请省略。

到目前为止我做了什么:

  
      
  • 我创建了一个python守护程序,它监视数据库视图是否有任何新请求
  •   
  • 守护程序服务使用pyserial和updates在设备上执行新请求   请求表带有“响应”即。加密内容
  •   
  • 我在PHP中创建了一个轮询服务,经常检查>特定请求的请求表中是否有“响应”
  •   
  • 使用适当的等待/完成状态消息创建Extjs前端
  •   

当前设置存在的问题:

  
      
  • Concurreny - 我们期待> 20个用户随时提交加密/解密请求   使用数据库作为消息/排队解决方案由于表锁定而无法扩展,并且只有1个侦听请求的侦听进程
  •   
  • 守护程序服务 - 依赖守护进程服务有点风险,数据库开销似乎有点高,每秒都会查看新请求
  •   
  • 开发 - 只需向加密/解密服务发送请求,而不是在db中插入请求,轮询响应并在守护程序服务中处理请求,这将简化我的开发任务。
  •   

我的问题:

  

在这种情况下,理想的消息/女王解决方案是什么?请进入>帐户我的系统专门在Ubuntu O / S上运行。

我已经完成了一些Google服务并且遇到了一个叫做“Stomp”服务器的东西,但是它设置起来有些困难并缺少一些文档。此外,我更喜欢那些在设置此类内容方面具有一定经验的人的建议,而不是一些“如何”指导:)

感谢您的时间

3 个答案:

答案 0 :(得分:5)

我相信RabbitMQ的热门AMQP实现提供了PHP扩展(here),您绝对可以在Python中访问AMQP,例如通过Qpid。 RabbitMQ也很容易在Ubuntu(或Debian)上安装,参见例如here

无论是通过RabbitMQ还是其他方式,采用开放式消息传递和排队协议(如AMQP)与更“封闭”的解决方案相比具有明显和明确的优势(即使技术上是开源的,这样的解决方案也不会提供尽可能多的实现,因此灵活性,作为一种广泛采用的开放标准协议)。

答案 1 :(得分:0)

我愿意:

  • Web组件连接到加密守护程序/服务,发送数据并等待答案

加密守护程序/服务将:

  • 启动时,启动每个可用串行设备的线程(SerialThread)
  • 所有'串行线程'将执行SerialQueue.get(阻止等待消息)
  • 多线程TCP服务器,从http://docs.python.org/library/socketserver.html
  • 检查ThreadingMixIn
  • TCP服务器线程将接收普通数据并将其放在SerialQueue
  • 随机SerialThread(Python的Queue类管理多线程所需的锁定)将接收请求,加密并将加密数据返回给TCP服务器线程
  • TCP服务器线程会将数据写回Web组件

我在项目中使用此逻辑,您可以在http://bazaar.launchpad.net/~mirror-selector-devs/mirror-selector/devel/files/head:/mirrorselector/检查源,在我的情况下输入是URL,处理是扫描可用镜像,输出是镜像URL。

答案 2 :(得分:0)

可能为时已晚,但请尝试http://www.snakemq.net/