消息队列实现

时间:2012-05-22 10:27:14

标签: php message-queue rabbitmq

我正在寻找记录消息的最快方法,而不会让生产者在发送日志时连接到任何服务器。最好的情况是将消息记录到本地非常快的内存(内存,本地消息队列),然后退出。然后一个单独的进程将其出列并将其发送给实际的消费者(可能具有持久连接)。这有助于通过阻止额外连接来降低生产者进程(例如Web服务器句柄)的处理速度。

使用PHP的RabitMQ会对我感兴趣吗?

3 个答案:

答案 0 :(得分:1)

Logstash(http://www.logstash.net/)在您选择的本地日志文件上设置监听器,然后通过AMQP(RabbitMQ,我在2012年检查过)将它们作为消息发送到您选择的中央日志存储/数据库(比如说) ,一个mongoDB实例)。

您可以自定义Logstash侦听器,以便在将日志文件发送到队列代理之前从日志文件中过滤掉某些有趣的日志消息类型/代码。

之后,您可以将Graylog2(http://graylog2.org/)设置为一个有用的界面,用于读取,排序和过滤源自所有服务器的日志,按时间顺序组织在一个视图中(假设您的服务器时间足够)同步)。

答案 1 :(得分:0)

正如@robthewolf在评论中指出的那样,连接到消息队列是一个额外的连接,无论是否在本地。另外,我不确定“处理”是什么意思(格式化消息?显示日志?)。

根据你的描述,我认为你应该研究Graylog。您可以使用MonologGelf-PHP通过AMQP将日志消息发送到Graylog-Server。

答案 2 :(得分:0)

您提出的解决方案可行。但是,内存队列中存在消息构建的所有可能性,因为实际连接到消息传递服务器的生产者可能无法向消息传递服务器发送消息,因为日志将以更快的速度放入内存队列。