我已經瀏覽了rabbitMQ插件的優秀文檔。但是,我仍然對一些事情感到困惑。如何使用rabbitMQ插件和grails發送和接收域對象
方案
我的應用程序將需要來自用戶的文件上傳,做各種事情的文件和相應的域對象上設置的某些屬性。這些工作中的一部分可能是勞動密集型的,所以我正在使用隊列。我設想請求排隊,消費者從隊列中提取請求並使用它們。
問題
我要存儲在隊列中的域對象。我這樣做:rabbitSend 'myqueue', colorObj
。 colorObj
是域類的一個對象Color
但是,在ColorService
handleMessage(...)
當我從隊列中獲取項目時,該項目的類型不是Color
。請注意,在RabbitMQ的儀表板,我可以看到在插入到隊列中的項目,所以在config.groovy
我的隊列開始是好的(我用amq.direct
)
- 我怎麼能發送和從隊列中取出一個域對象?
- 從我目前看到的行爲來看,
handleMessage
不需要實例化。即使我沒有撥打ColorService
,它仍然會自行執行handleMessage
。這是一種正常的行爲?
下面是代碼:
控制器
Color colorObj = colorService.newRequest(params, request.getFile('color.filename')
if (colorObj.validate)
rabbitSend 'myqueue', colorObj
...
服務
class ColorService {
static rabbitQueue = 'myqueue'
void handleMessage(message) {
println "came in message: " + message instanceof Color //this prints false
}
}
太好了,我會試試這個ID,因爲這是最簡單的方法。另外,我是否明白,我的理解是,服務類中的'handleMessage'不需要實例化?我看到的行爲是,當我排隊時,服務的handlemessage可以不用我甚至實例化服務 – Anthony
正確,插件會自動實例化'ColorService'並將它附加到消息偵聽器容器,因爲'static rabbitQueue'屬性。 –