简而言之,我想让两个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
如果我只是使用相同的设置配置两个主题,它们仍然只是两个单独的主题,而第一个发布的内容不会被转发到第二个主题。 –