gpt4 book ai didi

java - 从 Spring 查找 activeMQ 目的地

转载 作者:行者123 更新时间:2023-12-01 05:24:58 27 4
gpt4 key购买 nike

我有一个 Spring 应用程序,它需要查找 JMS 目标才能完成工作。根据我们处于开发环境还是系统测试环境,我们将使用不同的 JMS 实现。 (Oracle AQ在系统测试中使用WebLogic,Apache ActiveMQ部署在Jetty for Dev中)

我已经配置了 ActiveMQ 并很好地部署了它,它在 activemq.xml 文件中创建了它的目标:

<destinations>
<queue physicalName="handlersDest" />
<topic physicalName="notificationsDest" />
</destinations>

当我启动处理程序(Spring)应用程序时,它会查找目的地:

<jee:jndi-lookup id="handlersDest"  jndi-name="$handlersDest">
<jee:environment>
java.naming.factory.initial = ${jndi.jms.naming.factory.initial}
java.naming.provider.url = ${jndi.jms.naming.url}
queue.handlersDest = handlersDest
</jee:environment>
</jee:jndi-lookup>

我的问题是我必须将以下行添加到环境中才能使其工作:

queue.handlersDest = handlersDest

我知道这告诉 ActiveMQ 的初始上下文有一个名为“handlersDest”的目的地,并且它应该确保它在队列名称“handlersDest”下注册,但我不知道为什么需要在客户端中执行此操作应用程序?

我不能在 activemq.xml 中或部署 activemq 的应用程序中的其他位置预定义这些 JNDI 名称吗?

最佳答案

答案是否定的,active-MQs初始上下文不支持预定义目的地的jndi名称。

我通过将 jndi 设置配置为一个属性来解决这个问题,以便在使用另一个不需要进一步配置 jndi 的提供程序时将其设置为空白。

例如:

<jee:jndi-lookup id="handlersDest"  jndi-name="$handlersDest">
<jee:environment>
java.naming.factory.initial = ${jndi.jms.naming.factory.initial}
java.naming.provider.url = ${jndi.jms.naming.url}
queue.handlersDest = handlersDest
</jee:environment>
</jee:jndi-lookup>

变成:

<jee:jndi-lookup id="handlersDest"  jndi-name="$handlersDest">
<jee:environment>
java.naming.factory.initial = ${jndi.jms.naming.factory.initial}
java.naming.provider.url = ${jndi.jms.naming.url}
${jndi.config}
</jee:environment>
</jee:jndi-lookup>

这样,当使用 active-mq 部署时,我可以将 jndi.config 属性指定为“queue.handlersDest = handlersDest”。但不需要时可以将该值留空。

另一个答案是不使用 active-mqs 初始上下文,而是使用容器提供的初始上下文,该容器可以配置为包含来自 active-mq 的目的地。

关于java - 从 Spring 查找 activeMQ 目的地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9809156/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com