【问题标题】:How to setup a connection with WebSphere JMS using logstash-input-jms plugin?如何使用 logstash-input-jms 插件设置与 WebSphere JMS 的连接?
【发布时间】:2017-07-26 05:55:32
【问题描述】:

我正在尝试连接到 WebSphere JMS。我可以使用 HermesJMS 连接到它,下面是使用 HermesJMS 连接到我的队列所需的步骤,然后是我尝试使用 logstash-plugin-jms 连接的步骤。 拜托,我真的需要帮助才能尝试使用此队列中的消息,但找不到任何有关它的文档。

从 HermesJMS 上的 WebSphere JMS 队列读取消息的恢复步骤

1) 我在客户端计算机上创建了一个文件夹并将其命名为“WASJMS”,并将以下文件从 WebSphere 复制到该文件夹​​。

com.ibm.ws.sib.client.thin.jms_8.5.0.jar
com.ibm.ws.orb_8.5.0.jar
com.ibm.ws.ejb.thinclient_8.5.0.jar
sas.client.props
ssl.client.props

2) 在 WebSphere 上,我有 key.p12 和 trust.p12 文件,我必须将它们转换为 jks 格式,以便 Oracle JVM 可以使用它而不是 IBM JVM(WebSphere 默认 JVM)

# keytool -v -importkeystore -srckeystore trust.p12 -destkeystore trust.jks -srcstoretype pkcs12 -deststoretype jks -srcstorepass WebAS -deststorepass WebAS_JKS -alias root2 -srckeypass WebAS -destkeypass WebAS_JKS

# keytool -v -importkeystore -srckeystore key.p12 -destkeystore key.jks -srcstoretype pkcs12 -deststoretype jks -srcstorepass WebAS -deststorepass WebAS_JKS -alias default -srckeypass WebAS -destkeypass WebAS_JKS

然后我将新文件(key.jks 和 trust.jks)复制到我的客户端文件夹 (WASJMS)

3) 对 ssl.client.props 和 sas.client.props 文件进行了一些更改,以设置 jks 文件路径、密码并将其设置为读取 SUN(Oracle) 类型。这些文件的主要部分如下:

ssl.client.props

com.ibm.ssl.alias=DefaultSSLSettings
com.ibm.ssl.protocol=SSL
com.ibm.ssl.securityLevel=HIGH
com.ibm.ssl.trustManager=SunX509
com.ibm.ssl.keyManager=SunX509
com.ibm.ssl.contextProvider=SunJSSE
com.ibm.ssl.enableSignerExchangePrompt=gui

# KeyStore information
com.ibm.ssl.keyStoreName=ClientDefaultKeyStore
com.ibm.ssl.keyStore=C:/Users/ranieri/WASJMS/key.jks
com.ibm.ssl.keyStorePassword=WebAS_JKS
com.ibm.ssl.keyStoreType=JKS
com.ibm.ssl.keyStoreProvider=SUN
com.ibm.ssl.keyStoreFileBased=true

# TrustStore information
com.ibm.ssl.trustStoreName=ClientDefaultTrustStore
com.ibm.ssl.trustStore=C:/Users/ranieri/WASJMS/trust.jks
com.ibm.ssl.trustStorePassword=WebAS_JKS
com.ibm.ssl.trustStoreType=JKS
com.ibm.ssl.trustStoreProvider=SUN
com.ibm.ssl.trustStoreFileBased=true
com.ibm.ssl.trustStoreReadOnly=false

sas.client.props

com.ibm.CORBA.authenticationTarget=BasicAuth
com.ibm.CORBA.authenticationRetryEnabled=true
com.ibm.CORBA.authenticationRetryCount=3
com.ibm.CORBA.validateBasicAuth=true
com.ibm.CORBA.securityServerHost=bpm857
com.ibm.CORBA.securityServerPort=9810
com.ibm.CORBA.loginTimeout=300
com.ibm.CORBA.loginSource=properties

# RMI/IIOP user identity
com.ibm.CORBA.loginUserid=myuser
com.ibm.CORBA.loginPassword=mypassword

4) 然后,我将 hermes.bat 文件更改为在启动时使用我的 ssl.client.props 和 sas.client.props,将以下文件粘贴到最后一行之前。

set SSL_RMI_DEFS= ^
-Dcom.ibm.SSL.ConfigURL="file:/C:/Users/ranieri/WASJMS/ssl.client.props" ^
-Dcom.ibm.CORBA.ConfigURL="file:/C:/Users/ranieri/WASJMS/sas.client.props" 
set HERMES_OPTS=%HERMES_OPTS% %SSL_RMI_DEFS%

5) 然后我打开 HermesJMS,创建了一个名为 was855 的新会话,并在提供程序选项卡上创建了一个新组 (was855sib) 并添加了所有需要的 jars(我在步骤 1 中提到的 3 个 jars 文件)

6) 然后,回到会话选项卡中,我选择 hermes.JNDIQueueConnectionFactory 作为类并选择 was855sib 以使用他们的 jar 依赖项。之后,我添加了 3 个属性并将它们的值设置如下:

binding: jms/RanieriConnectionFactory
initialContextFactory: com.ibm.websphere.naming.WsnInitialContextFactory
providerURL: iiop://bpm857:9810

另外,我已经通知了用户名和密码字段,这是 WebSphere 用户和有权读取队列的通行证。

7) 就是这样。完成此设置后,我需要做的就是右键单击创建的会话并选择“发现”选项,因此它列出了所有 JMS 队列,我可以选择我的 jms/RanieriQueue

就是这样。我想使用 logstash-input-jms 插件读取相同的队列(jms/RanieriQueue),我尝试使用以下配置。

logstash.conf

input { 
    jms {
        yaml_file => "C:/Users/ranieri/Downloads/logstash-5.2.2/logstash-5.2.2/config/jms.yml"
        yaml_section => "websphere"
        include_header => true
        include_properties => true
        include_body => true
        use_jms_timestamp => false
        destination => "jms/RanieriQueue"
        interval => 3
        runner => async
    }
}
output {
    stdout { codec => rubydebug }
}

jms.yml

# JMS
websphere:
# Connect to a remote WebSphere JMS Queue
    :jndi_name: jms/RanieriConnectionFactory
    :jndi_context: 
    java.naming.factory.initial: com.ibm.websphere.naming.WsnInitialContextFactory
    java.naming.provider.url: iiop://bpm857:9810
    java.naming.factory.url.pkgs: com.ibm.ws.naming
    java.naming.security.principal: bpmadmin
    java.naming.security.credentials: bpmadmin
    :require_jars:
        - C:\Users\ranieri\WASJMS\com.ibm.ws.ejb.thinclient_8.5.0.jar
        - C:\Users\ranieri\WASJMS\com.ibm.ws.orb_8.5.0.jar
        - C:\Users\ranieri\WASJMS\com.ibm.ws.sib.client.thin.jms_8.5.0.jar

另外,我更改了 logstash-5.2.2/bin 中的 setup.bat 以加载 ssl.client.props 和 sas.client.props 添加以下行:

SET JAVA_OPTS=%JAVA_OPTS% -Dcom.ibm.SSL.ConfigURL=file:/C:/Users/ranieri/WASJMS/ssl.client.props
SET JAVA_OPTS=%JAVA_OPTS% -Dcom.ibm.CORBA.ConfigURL=file:/C:/Users/ranieri/WASJMS/sas.client.props

当我尝试启动 logstash 时,我收到以下错误消息。

22:38:29.931 [[main]javax.jms.JMSSecurityException: CWSIA0006E: 对提供的用户名的授权不成功。, :backtrace=>["com.ibm.ws.sib.api.jms.impl.JmsManagedConnectionFactoryImpl.createConnection(com/ibm/ws/sib/api/jms/impl/JmsManagedConnectionFactoryImpl.java:186)", “com.ibm.ws.sib.api.jms.impl.JmsManagedConnectionFactoryImpl.createConnection(com/ibm/ws/sib/api/jms/impl/JmsManagedConnectionFactoryImpl.java:138)”, “java.lang.reflect.Method.invoke(java/lang/reflect/Method.java:498)”, "RUBY.initialize(C:/Users/ranieri/Downloads/logstash-5.2.2/logstash-5.2.2/vendor/bundle/jruby/1.9/gems/jruby-jms-1.2.0-java/lib/jms/连接.rb:204)", "RUBY.start(C:/Users/ranieri/Downloads/logstash-5.2.2/logstash-5.2.2/vendor/bundle/jruby/1.9/gems/jruby-jms-1.2.0-java/lib/jms/连接.rb:50)", "RUBY.run_async(C:/Users/ranieri/Downloads/logstash-5.2.2/logstash-5.2.2/vendor/bundle/jruby/1.9/gems/logstash-input-jms-3.0.0-java/lib/ logstash/inputs/jms.rb:226)", "RUBY.run(C:/Users/ranieri/Downloads/logstash-5.2.2/logstash-5.2.2/vendor/bundle/jruby/1.9/gems/logstash-input-jms-3.0.0-java/lib/ logstash/inputs/jms.rb:257)", “RUBY.inputworker(C:/Users/ranieri/Downloads/logstash-5.2.2/logstash-5.2.2/logstash-core/lib/logstash/pipeline.rb:449)”, “RUBY.start_input(C:/Users/ranieri/Downloads/logstash-5.2.2/logstash-5.2.2/logstash-core/lib/logstash/pipeline.rb:443)”, "java.lang.Thread.run(java/lang/Thread.java:745)"]}

关于我的错误在哪里的任何想法? 谢谢

P.S:我还有一个 java 代码可以连接到这个队列并读取消息,如果您认为 java 代码可以帮助您了解问题所在,请告诉我。

【问题讨论】:

    标签: logstash logstash-configuration


    【解决方案1】:

    我做到了。主要问题是我在目标参数上使用了 jndi 名称,但我应该使用队列名称。要使用 Java 进行连接,我只能使用 jndi 名称进行连接,但要使其与 logstash-input-jms 插件一起使用,我必须通过队列名称进行更改。

    这是我的配置文件。

    logstash.conf

    input { 
        jms {
            yaml_file => "C:/Users/ranieri/Downloads/logstash-5.2.2/logstash-5.2.2/config/jms.yml"
            yaml_section => "websphere"
            include_header => true
            include_properties => true
            include_body => true
            use_jms_timestamp => false
            destination => "RanieriQueueDestination"
            interval => 3
            runner => async
        }
    }
    output {
      stdout { codec => rubydebug }
    }
    

    jms.yml

    # JMS
    websphere:
      # Connect to a remote WebSphere JMS Queue
     :username: myuser
     :password: mypass
     :jndi_name: jms/RanieriConnectionFactory
     :jndi_context:
       java.naming.factory.initial: com.ibm.websphere.naming.WsnInitialContextFactory
       java.naming.provider.url: iiop://bpm857:9810
       java.naming.security.principal: myuser
       java.naming.security.credentials: mypass
     :require_jars:
       - C:\Users\ranieri\WASJMS\com.ibm.ws.ejb.thinclient_8.5.0.jar
       - C:\Users\ranieri\WASJMS\com.ibm.ws.orb_8.5.0.jar
       - C:\Users\ranieri\WASJMS\com.ibm.ws.sib.client.thin.jms_8.5.0.jar
    

    【讨论】:

      猜你喜欢
      • 2013-10-22
      • 1970-01-01
      • 2012-10-02
      • 2016-09-26
      • 1970-01-01
      • 2015-07-08
      • 2014-09-19
      • 2017-02-03
      • 1970-01-01
      相关资源
      最近更新 更多