2015-11-06 78 views
2

我是新增的hibernate搜索功能,我爲我的應用程序使用hibernate搜索5.3。我有一個應該維護lucene索引的服務器集羣,如果實體有變化,我試圖把它放在一個jms隊列中,讓所有其他服務器從這裏提取更新並重新索引它們的lucene索引。如何在Hibernate搜索中使用JMS主題在服務器羣集中重新索引lucene索引5.3

我已經寫了一個searchInterceptor,它會在每次事務之後拿起實體並將它們發送給一個主題。我已經擴展了FullTextIndexEventListener並實現了processWork()在隊列中添加消息,現在我被卡住了,因爲這已經是最終的了。 任何人都可以告訴我如何從這裏出發?

回答

0

你爲什麼不選擇Search提供的主/從設置的任何原因,例如JMS主/從設置,其中索引是由單個主設備完成的,然後將索引共享給從設備?

但是如果你想繼續w /你的方法,我會認爲正確的擴展點是一個BackendQueueProcessor。您可能需要混合使用LuceneBackendQueueProcessorJmsBackendQueueProcessor,其中傳入的更改會在本地建立索引並放到所有其他節點的JMS主題上。或者爲了保持體系結構的對稱性,通常可以將所有更新都更新到主題上,並且所有節點僅適用於該主題。無論哪種方式,當前的JMS後端代碼應該能夠引導您進入正確的方向。

+0

謝謝。不使用主/從設置,因爲我們不想配置新的主設備使其停機。 –

+0

嗨,只是一個問題:如果使用JMS主題讓其他節點知道插入/ ...是否有可能發生寫入鎖定問題(讀取JMS消息並嘗試更新索引,但同時實體被創建/更新,因此索引被Hibernate Search刷新=> 2個進程嘗試鎖定相同的索引)?謝謝,五, – Viktor

+0

嗨維克托, 索引在每個服務器中單獨維護,因此沒有鎖定問題:) –