簡而言之,我想讓兩個JNDI名稱(其中一個僅用於發佈消息,另一個僅用於偵聽)同時提供同一對象(即JMS主題)。如何在WebLogic中配置JNDI符號鏈接
如果沒有辦法創建JNDI符號鏈接,那麼在B中出現的任何其他發佈到A中的消息的方式也適用於我。
原因是我有一些遺留代碼訂閱主題B並寫入主題A,我無法更改該代碼。
然後在一些服務器上,我需要A和B是同一個,以便讓一段代碼直接接收另一段代碼發送的消息,而其他服務器A和B可以配置爲引用某些外部資源。
簡而言之,我想讓兩個JNDI名稱(其中一個僅用於發佈消息,另一個僅用於偵聽)同時提供同一對象(即JMS主題)。如何在WebLogic中配置JNDI符號鏈接
如果沒有辦法創建JNDI符號鏈接,那麼在B中出現的任何其他發佈到A中的消息的方式也適用於我。
原因是我有一些遺留代碼訂閱主題B並寫入主題A,我無法更改該代碼。
然後在一些服務器上,我需要A和B是同一個,以便讓一段代碼直接接收另一段代碼發送的消息,而其他服務器A和B可以配置爲引用某些外部資源。
經過大量試驗後,我通過爲JMS主題及其連接工廠配置外部服務器映射來完成工作。
這裏是說明我的配置的WLST腳本:
startEdit()
cd('/')
mod = 'loopback'
module = cmo.createJMSSystemResource(mod)
module.setTargets(cmo.getClusters())
server = module.createForeignServer('loopback_server')
server.setDefaultTargetingEnabled(true)
server.setInitialContextFactory('weblogic.jndi.WLInitialContextFactory')
# When we don't populate connection parameters (URLs, user, password),
# WebLogic defaults to connecting to the current cluster, which is exactly what we need!
topicLink = server.createForeignDestination('A_to_B')
topicLink.setLocalJNDIName('jms/B/topic')
topicLink.setRemoteJNDIName('jms/A/topic')
cfLink = server.createForeignConnectionFactory('A_to_B_cf')
cfLink.setLocalJNDIName('jms/B/connectionfactory')
cfLink.setRemoteJNDIName('jms/A/connectionfactory')
activate()
PS:上面的代碼被放在一起的關鍵線從我巨大的WLST腳本設置了我所有的JMS資源創建的,所以有一種可能性,即它贏得只是按照原樣工作
我想你可以部署一個偵聽主題A並將其發佈到主題B的客戶端,在你想要主題鏡像的服務器上。
我寧願將它全部保留在配置中。除非有人建議更簡單的方法,否則我將使用自己的服務器地址配置外部服務器對象,並使用它將該主題導入爲外部目標。 –
只需在兩個不同的JNDI名稱下提供相同的配置即可。 – EJP
如果我只是使用相同的設置配置兩個主題,它們仍然只是兩個單獨的主題,而第一個發佈的內容不會被轉發到第二個主題。 –