我最近一直在阅读消息排队,我想为我的应用程序实现一个简单,可扩展的系统。虽然关于设置MQ系统的主题有很多很好的信息,但我找不到很多关于实际实现的信息。
我正在寻找有关如何正确格式化队列消息的模式和最佳实践,以及在PHP中执行作业的方法。我应该使用JSON,序列化对象,文本,URL还是XML?我应该发送什么信息?是一个有switch($job['command']) {}
(或类似的东西)的工人要走的路,或者是否有任何已建立的模式来实现工人?
非常感谢!
答案 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应用程序中页面视图的延迟。
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集成了作业队列,为创建,执行和管理作业提供全面支持,以优化应用程序性能并减少服务器负载,最大限度地减少应用程序瓶颈并改善最终用户体验。
dropr是一个用PHP编写的分布式消息队列框架。主要目标是:
- 可靠耐用(故障安全) - 通过网络进行消息
- 没有单一(故障点)服务器实例的分散式架构
- 易于设置和使用
- 队列存储和消息传输的模块化(当前实现了文件系统存储和卷曲上传)
Gearman提供了一个通用的应用程序框架,可以将工作分配给更适合工作的其他机器或进程。它允许您并行工作,负载均衡处理以及在语言之间调用函数。
ØMQ(也称为ZeroMQ,0MQ或ZMQ)是一个高性能的异步消息库,旨在用于可扩展的分布式或并发应用程序。它提供了一个消息队列,但与面向消息的中间件不同,ØMQ系统可以在没有专用消息代理的情况下运行。该库旨在具有熟悉的套接字式API。
答案 1 :(得分:1)
如果可以,我会使用JSON - 它简洁,易读,并且可以使用跨语言。
您可能无法使用JSON的一个原因是,您希望您的后台“工作”不仅包括数据(在这种情况下JSON会很好),而是一个序列化对象。如果是这种情况,您需要至少制作一个作业的参数序列化PHP。