【问题标题】:Not able to specify target for JMS queue and probably therefore getting无法为 JMS 队列指定目标,因此可能会得到
【发布时间】:2017-06-16 19:29:51
【问题描述】:

我正在创建一个 WL JMS 队列,但在创建时我没有看到附加此队列的目标(见下面的屏幕截图),所以我创建它时没有任何目标。

现在,当我尝试使用 JMS 客户端代码进行连接时,出现以下异常:

Exception in thread "main" javax.naming.NameNotFoundException: Unable to resolve 'dq1'. Resolved '' [Root exception is javax.naming.NameNotFoundException: Una
ble to resolve 'dq1'. Resolved '']; remaining name 'dq1'
        at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:251)
        at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:466)
        at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:274)
        at weblogic.jndi.internal.ServerNamingNode_12120_WLStub.lookup(Unknown Source)
        at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:440)
        at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:426)
        at javax.naming.InitialContext.lookup(Unknown Source)

我很确定我的客户端代码没有错误,因为其他人可以使用相同的代码并将消息推送到队列。

是否因为队列未附加到任何目标而发生异常?如何将此队列附加到目标,例如托管服务器?

我将 JMS 服务器定位到托管服务器,我想我也可以选择为队列选择目标,但它没有出现,可能这就是异常的原因。请注意,我已经尝试为队列创建子部署模板,但没有成功。

如果需要任何其他信息,请告诉我。


更新:

问题现在已隔离到托管服务器,我可以将消息推送到以管理服务器为目标的队列,但是当我尝试与托管服务器相同时,它没有成功,下面是我所做的。

我有一个托管服务器(使用节点管理器运行)-ms1,然后我创建了一个针对 ms1 的 JMS 服务器 JMSServer2

然后我创建了一个目标为ms1的JMS模块JmsModule2,创建了一个目标为JMSServer2的JMS子部署Subdeployment2,并创建了一个连接工厂和队列,其子部署为Subdeployment2,目标为@ 987654341@。以下屏幕截图:

【问题讨论】:

  • 您必须创建一个 JMS 服务器,这将是您的目标
  • 我已经创建了 JMS 服务器和 JMS 模块,然后在 JMS 模块中添加了 JMS 资源(连接工厂、队列等),但不知何故我没有得到它,我已经尝试过子部署也是如此,但它也不起作用。
  • 哪个版本的weblogic?
  • @Rouliboy WLS 12.1.3

标签: java jms weblogic


【解决方案1】:

好的,我想通了。实际上,您似乎必须创建一个子部署才能在 JMS 队列上启用定位。

我假设您已经正确创建了 JMS 服务器JMS 模块

现在你必须:

创建子部署

首先,您需要创建一个子部署,指定您的 JMS 服务器作为此子部署的目标:

这里我的 JMS 服务器被命名为JMSServer

使用子部署创建队列

然后创建 JMS 队列。请注意,如果您未在 Queue 配置中指定任何子部署,则看不到任何目标:

但是,如果您正确指定先前创建的子部署,您将看到您的目标是 JMSServer:

仅此而已!

希望这会有所帮助。

编辑

我也在集群上进行了测试,它在针对单个托管服务器实例时运行良好。你必须

  1. 创建 JMS 服务器将您的单个托管服务器实例指定为目标。

  2. 创建一个 JMS 模块使用“集群的一部分”部分将您的单个托管服务器实例指定为目标。

  3. 在此 JMS 模块中,创建一个子部署使用“集群的一部分”部分将您的单个托管服务器实例指定为目标。

  4. 最后创建您的 JMS 队列并指定相应的子部署:您将看到 JMS 服务器作为目标。

【讨论】:

  • 感谢您一直以来的宝贵回复。因此我已经尝试过了,让我今天从头开始尝试。
  • 顺便说一句,当您回答我关于 WL 依赖问题的最后一个问题时,您还创建了一个 POC,所以当时您在 WL 中创建了一个物理队列?如果是,那么您当时是否也创建了子部署?
  • 我昨天在全新安装的 WLS 12.1.3 上创建了子部署。可能你忘记在子部署创建中指定目标了?
  • 好的,谢谢。我也确实指定了这一点,唯一的问题是我到目前为止一直在使用托管服务器,现在我将尝试使用管理服务器,如果它有效,那么我将尝试理解为什么它不适用于托管服务器,因为它应该可以工作也可以使用托管服务器。
  • 好的。我明天将在集群上对其进行测试,因为我的答案是关于单个 weblogic 服务器(一个实例)。如果需要,我会更新我的答案。
猜你喜欢
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-14
  • 1970-01-01
  • 1970-01-01
  • 2020-01-03
相关资源
最近更新 更多