格式化排队消息的最佳方法是什么?

时间:2010-03-14 22:54:46

标签: php message-queue

我最近一直在阅读消息排队,我想为我的应用程序实现一个简单,可扩展的系统。虽然关于设置MQ系统的主题有很多很好的信息,但我找不到很多关于实际实现的信息。

我正在寻找有关如何正确格式化队列消息的模式和最佳实践,以及在PHP中执行作业的方法。我应该使用JSON,序列化对象,文本,URL还是XML?我应该发送什么信息?是一个有switch($job['command']) {}(或类似的东西)的工人要走的路,或者是否有任何已建立的模式来实现工人?

非常感谢!

2 个答案:

答案 0 :(得分:8)

您可以在PHP中选择以下任何MQ实现,因此您不必自己动手,也可以查看其源代码以了解其实现。对于一般集成,请查看ActiveMQ page on Enterprise Integration patterns

  • http://sourceforge.net/projects/beanstalk/

      

    beanstalkd的PHP客户端库。 BeanStalk允许PHP开发人员使用beanstalkd内存中的工作队列服务器(http://xph.us/software/beanstalkd)。

  • http://kr.github.com/beanstalkd/

      

    Beanstalk是一种简单,快速的工作队列服务。它的界面是通用的,但最初设计用于通过异步运行耗时的任务来减少大容量Web应用程序中页面视图的延迟。

  • http://activemq.apache.org/

      

    Apache ActiveMQ是最受欢迎且功能最强大的开源消息传递和集成模式提供程序。 Apache ActiveMQ速度快,支持许多跨语言客户端和协议,带有易于使用的企业集成模式和许多高级功能,同时完全支持JMS 1.1和J2EE 1.4。 Apache ActiveMQ是在Apache 2.0许可下发布的

  • http://memcachedb.org/memcacheq/

      

    Memcachedb是一个专为持久性而设计的分布式键值存储系统。它不是缓存解决方案,而是用于高频写入和读取的持久存储。它符合memcache协议(未完成,见下文),因此任何memcached客户端都可以与它连接。 Memcachedb使用Berkeley DB作为存储后端,因此支持许多功能,包括事务和复制。

  • http://www.zend.com/en/products/server/

      

    Zend Server 5.0集成了作业队列,为创建,执行和管理作业提供全面支持,以优化应用程序性能并减少服务器负载,最大限度地减少应用程序瓶颈并改善最终用户体验。

  • https://www.dropr.org/

      

    dropr是一个用PHP编写的分布式消息队列框架。主要目标是:

         
        
    • 可靠耐用(故障安全) - 通过网络进行消息
    •   
    • 没有单一(故障点)服务器实例的分散式架构
    •   
    • 易于设置和使用
    •   
    • 队列存储和消息传输的模块化(当前实现了文件系统存储和卷曲上传)
    •   
  • http://gearman.org/

      

    Gearman提供了一个通用的应用程序框架,可以将工作分配给更适合工作的其他机器或进程。它允许您并行工作,负载均衡处理以及在语言之间调用函数。

  • http://www.zeromq.org/

      ØMQ(也称为ZeroMQ,0MQ或ZMQ)是一个高性能的异步消息库,旨在用于可扩展的分布式或并发应用程序。它提供了一个消息队列,但与面向消息的中间件不同,ØMQ系统可以在没有专用消息代理的情况下运行。该库旨在具有熟悉的套接字式API。

答案 1 :(得分:1)

如果可以,我会使用JSON - 它简洁,易读,并且可以使用跨语言。

您可能无法使用JSON的一个原因是,您希望您的后台“工作”不仅包括数据(在这种情况下JSON会很好),而是一个序列化对象。如果是这种情况,您需要至少制作一个作业的参数序列化PHP。