Logstash-Plug in-JMS 和 Weblogic 12.2.1 出现问题

问题描述 投票:0回答:3

我已经安装了Weblogic 12.2.1和最新的Logstash 7.5.2版本以及JMS插件v3.1.2。我正在努力使用 JMS 插件,并且我已经设置了 .conf 和 .yml,但它不起作用!

destination
字段中,文档和示例建议没有 JNDI 名称,只有队列或主题名称!

jms.conf
的输入:

input {
   jms {
      pub_sub => false
      include_header => false
      include_properties => false
      include_body => true
      use_jms_timestamp => false
      yaml_file => "/home/chris/Downloads/logstash-7.5.2/config/jms.yml"
      yaml_section => "weblogic"
      destination => "DemoQ"
   }
}

jms.yml

weblogic:
  :jndi_name: jms/DemoCF
  :jndi_context:
    java.naming.factory.initial: weblogic.jndi.WLInitialContextFactory
    java.naming.provider.url: t3://localhost:7001
    java.naming.factory.url.pkgs: javax.naming:javax.jms
    java.naming.security.principal: weblogic
    java.naming.security.credentials: *****!
  :require_jars:
    - /home/chris/Downloads/wlogic/fmw_12.2.1.0.0_wls_quick_Disk1_1of1/wls12210/wlserver/server/lib/wlthint3client.jar
    - /home/chris/Downloads/wlogic/fmw_12.2.1.0.0_wls_quick_Disk1_1of1/wls12210/wlserver/server/lib/wljmsclient.jar
    - /home/chris/Downloads/wlogic/fmw_12.2.1.0.0_wls_quick_Disk1_1of1/wls12210/wlserver/server/lib/wlclient.jar

以及 Logstash 的输出:

[2020-01-31T14:50:10,284][WARN ][logstash.inputs.jms ][main] JMS Consumer Died {:exception=>"Java::WeblogicJmsCommon::JMSException", :exception_message=>"[JMSExceptions:045101]The destination name passed to the createTopic or createQueue "DemoQ" is invalid. If the destination name does not contain a "/" character, then it must be the name of a distributed destination that is available in the cluster to which the client is attached. If it does contain a "/" character, then the string before the "/" must be the name of a JMS server or a ".". The string after the "/" is the name of a the desired destination. If the "./" version of the string is used then any destination with the given name on the local WebLogic Server instance
jms logstash weblogic
3个回答
1
投票

几天后我想通了!在目的地使用领域: jmsmodulename!destinationname(来自 Oracle 文档), 对于集群环境!! 既不是“/”也不是“./”


0
投票

Logstash 不使用 JNDI 查找目标,而是简单地使用 JMS API 调用 javax.jms.Session.createQueue()(如果

pubsub
false
)或 javax.jms.Session.createTopic ()(如果
pubsub
true
)。

虽然我对 WebLogic 不太熟悉,但它返回的错误消息似乎非常清楚:

传递给createTopic或createQueue“DemoQ”的目标名称无效。如果目标名称不包含“/”字符,则它必须是客户端所连接的集群中可用的分布式目标的名称。如果它确实包含“/”字符,则“/”之前的字符串必须是JMS 服务器的名称或“.”。 “/”后面的字符串是所需目的地的名称。如果使用字符串的“./”版本,则本地 WebLogic Server 实例上具有给定名称的任何目标

这表明你的配置无效,特别是这一点:

destination => "DemoQ"

它似乎还建议您改用它:

destination => "./DemoQ"

0
投票

我得到这个是因为我们使用了 Spring 创建的默认

DestinationResolver
bean(
DynamicDestinationResolver
的实例)。

我将其更改为

JndiDestinationResolver
以解决问题。

    @Bean
    static DestinationResolver jndiDestinationResolver(JndiTemplate jndiTemplate) {
        //spring default is DynamicDestinationResolver
        JndiDestinationResolver jndiDestinationResolver = new JndiDestinationResolver()
        jndiDestinationResolver.jndiTemplate = jndiTemplate
        return jndiDestinationResolver
    }
© www.soinside.com 2019 - 2024. All rights reserved.