我正在構建一個功能,允許客戶抓取他們的網站,獲取鏈接並下載html文件。在下載的文件上完成字數統計,並顯示翻譯網頁的成本估算。Coldfusion的任務隊列
我想確保一次只有一個估算正在運行。因此,如果有兩個客戶端試圖同時爲他們的網站估算,則只有一個客戶端估算過程會運行,而其他客戶端需要等待。
爲此,我嘗試使用向我建議的RabbitMQ。我正在使用ColdFusion框架/ 1。我使用了rabbitmq網站中給出的Java示例。我可以發送消息,但我無法使用消息。以下函數創建一個對象,並同時覆蓋一個函數。這在Coldfusion中是不可能的。我試圖在懶散和谷歌團體獲得幫助,但我沒有得到明確的答案。
final Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String message = new String(body, "UTF-8");
System.out.println(" [x] Received '" + message + "'");
try {
doWork(message);
} finally {
System.out.println(" [x] Done");
}
}
};
channel.basicConsume(TASK_QUEUE_NAME, true, consumer);
我不太熟悉Java。我盡我所能在Coldfusion中轉換上述步驟。我沒有成功。我嘗試了以下方法,我甚至不知道它是否是正確的方法。
consumer = javaloader.create("com.rabbitmq.client.DefaultConsumer").init(channel);
envelope = createObject("java","com.rabbitmq.client.Envelope");
properties = createObject("java","com.rabbitmq.client.BasicProperties");
consumerTag = toString(consumer.getConsumerTag());
body = javaCast("byte[]",[]);
consumer.handleDelivery(consumerTag,envelope,properties,body);
我已經浪費的方式更多的時間比我需要在此。我需要雙向溝通。我希望估算過程能夠不斷通知用戶每一個步驟,例如抓取開始,抓取完成等等。
我只想知道是否值得嘗試使rabbitmq工作,或者它甚至是正確的工具?我可以簡單地在數據庫中創建一個表格,並在其中放置一個標誌來排列過程。哪個是實現功能的最佳方式?有沒有其他有用的工具排隊在Coldfusion任務?
P.S.我也嘗試了以下解決方案: https://github.com/lmajano/messaging-polyglot
*這在coldfusion中是不可能的*從技術上講,它是可能的,但只有[interfaces](http://docs.oracle.com/javase/tutorial/java/concepts/interface.html),CF10 +。不幸的是,DefaultConsumer是一個具體的類,所以在這種情況下,你是正確的。 CF中的特定代碼無法輕鬆模擬。 *我沒有成功*如何?你說沒有人工作,但不真正解釋*如何*。你是否收到錯誤,什麼都沒發生(API說handleDelivery是沒有操作的)。關於另一個項目的同樣問題。 – Leigh
@Leigh我對沒有通過足夠道歉。我已經添加了上面的錯誤消息屏幕截圖。我對java的知識非常有限,所以很難理解大多數代碼。在rabbitmq的google組中,我被建議「簡單地對DefaultConsumer進行子類化或從零開始實施Consumer。」我更加困惑於答案。 – Soobax
是的。這在java中很有意義。這就像在CFC中重寫父組件函數一樣。不幸的是,當你從* CF覆蓋*的東西是一個java類的方法時,它會涉及更多 - 並且根本不可能使用具體的類。關於錯誤,乍一看它看起來是正確的,即參數,類型,順序的數量。所以沒有運行它,我不知道它爲什麼抱怨。另一個項目呢?看起來它有一個cfml示例。也就是說,確認方法可能是一個很好的開始,也就是說,如果它不是正確的工具,就沒有必要去追求lib。 – Leigh