格式化消息以进行排队的最佳方法是啥?
Posted
技术标签:
【中文标题】格式化消息以进行排队的最佳方法是啥?【英文标题】:What is the best way to format messages for queueing?格式化消息以进行排队的最佳方法是什么? 【发布时间】:2011-01-27 12:00:09 【问题描述】:我最近一直在阅读消息队列,我想为我的应用程序实现一个简单、可扩展的系统。虽然那里有很多关于设置 MQ 系统的好信息,但我找不到很多关于实际实现的信息。
我正在寻找有关如何正确格式化队列消息的模式和最佳实践,以及在 php 中执行作业的方法。我应该使用 JSON、序列化对象、文本、URL 还是 XML?我应该发送什么信息?有switch($job['command'])
(或类似的东西)的工人是要走的路,还是有任何既定的模式来实施工人?
帮助不胜感激!
【问题讨论】:
【参考方案1】:您可以在 PHP 中选择以下任何 MQ 实现,因此您不必自己动手,您可以查看它们的源代码来了解它们的实现。对于一般集成,请查看ActiveMQ page on Enterprise Integration patterns。
http://sourceforge.net/projects/beanstalk/
beantalkd 的 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 包含 Job Queue,为创建、执行和管理作业提供全面支持,以优化应用程序性能并减少服务器负载,最大限度地减少应用程序瓶颈并改善最终用户体验。
https://www.dropr.org/
dropr 是一个用 PHP 编写的分布式消息队列框架。主要目标是:
可靠且持久(故障安全)- 通过网络发送消息 没有单一(故障点)服务器实例的分散式架构 易于设置和使用 队列存储和消息传输的模块化(目前已实现文件系统存储和 curl-upload)
http://gearman.org/
Gearman 提供了一个通用的应用程序框架,可以将工作分包给更适合完成工作的其他机器或进程。它允许您并行工作、负载平衡处理以及在语言之间调用函数。
http://www.zeromq.org/
ØMQ(也拼写为 ZeroMQ、0MQ 或 ZMQ)是一个高性能异步消息传递库,旨在用于可扩展的分布式或并发应用程序。它提供了一个消息队列,但与面向消息的中间件不同,ØMQ 系统可以在没有专门的消息代理的情况下运行。该库旨在具有熟悉的套接字样式 API。
【讨论】:
我倾向于使用简单的文本(对于非常简单的消息)或 Json。对于基于 PHP 的 beanstalkd 客户端,我还推荐 Pheanstalkd:github.com/pda/pheanstalk【参考方案2】:如果可以的话,我会使用 JSON——它简洁、易于阅读并且可以跨语言工作。
您可能无法使用 JSON 的一个原因是,如果您希望您的后台“工作”不仅包含数据(在这种情况下 JSON 会很好),而且包含序列化对象。如果是这种情况,您至少需要将作业的一个参数序列化为 PHP。
【讨论】:
以上是关于格式化消息以进行排队的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
将 json 格式的键值对转换为以符号为键的 ruby 哈希的最佳方法是啥?