Logstash-Plug in-JMS 和 Weblogic 12.2.1 的问题

Problem with Logstash-Plug in-JMS and Weblogic 12.2.1

我已经安装了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

Logstash 不使用 JNDI 查找目标,而是简单地使用 JMS API 调用 javax.jms.Session.createQueue() (if pubsub is false) or javax.jms.Session.createTopic()(如果 pubsubtrue)。

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

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

说明你的配置无效,具体是这个位:

destination => "DemoQ"

它似乎也建议您改为使用此:

destination => "./DemoQ"

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