2012-08-31 56 views
0

如何開始在PHP中創建消息驅動Bean的等價物?PHP理論中的Stomp/ActiveMQ - 如何模擬Java的MDB?

所以,我明白有可能通過Stomp協議向ActiveMQ發送()消息,並且在隊列中存在可用消息時可以將()連接到ActiveMQ,然後再連接到readFrame()在ActiveMQ中。

我不明白的是,如何解決從隊列中接收到的消息的異步處理問題。

如果你有一個線程一直等待隊列(和阻塞),直到有東西進入它,這是否意味着你一次只能在PHP中處理一條消息?

在Java EE MDB中,您不必擔心線程,因爲應用程序服務器在需要時實例化MDB,但我不明白如何在PHP中創建一個在ActiveMQ隊列上偵聽的高吞吐量應用程序。

任何想法?

回答

0

您不太清楚您在PHP中使用哪種方式引用PHP,如在語言中使用PHP,或者使用PHP在運行時使用Web服務器?

但是,我會創建一個單獨的php腳本,並從Web應用程序調用的任何腳本單獨啓動它。比如服務器啓動並且有一個讀取STOMP消息的循環,就像你描述的那樣。

那麼你如何獲得它與Web應用程序進行通信呢?只需在Web應用程序數據庫中以某種方式處理和存儲消息的內容即可。這基本上就是JavaEE MDB的工作原理,但您有注意到,有一個容器可以處理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();