PHP理论中的Stomp/ActiveMQ-如何模拟Java';s MDB


Stomp / ActiveMQ in PHP theory - how to emulate Java's MDBs?

如何在PHP中创建等效的消息驱动Bean?

因此,我知道可以通过Stomp协议向ActiveMQ发送()消息,也可以在ActiveMQ中的队列中有可用消息时连接()到ActiveMQ,然后连接到readFrame()。

我不明白的是如何解决异步处理从队列接收的消息的问题。

如果你有一个线程一直在队列上等待(并阻塞),直到有东西在其中,这是否意味着你在PHP中一次只能处理一条消息?

在Java EE MDB中,您不必担心线程,因为应用程序服务器会在需要的时候实例化MDB,但我不知道如何在PHP中创建一个侦听ActiveMQ队列的高吞吐量应用程序。

有什么想法吗?

你指的是PHP,在语言中指的是PHP,还是在运行时指的是与web服务器一起使用的PHP,这一点还不清楚?

然而,我会创建一个单独的php脚本,并将其与从web应用程序调用的任何脚本分开启动。例如当服务器启动并有一个读取STOMP消息的循环时,就像您描述的那样。

那么,你将如何让它与web应用程序进行通信呢?只需以某种方式将消息的内容处理并存储在web应用程序数据库中。这基本上也是JavaEEMDB的工作方式,但正如您所注意到的,有一个容器可以处理MDB线程的启动。

关于线程:您可以在PHP中派生进程,尽管线程并不是一个真正的选项。看看这个例子:http://us.php.net/pcntl_fork

// fork a php script into two processes. Then make each process
if (pcntl_fork() == -1) {
 die('Forking failed');
} 
// This is run twice in different processes, one main process and one child.
run_message_listener_loop();