2017-03-06 166 views
0

我在嘗試連接到WebSphere JMS。我可以使用HermesJMS連接到它,下面是使用HermesJMS連接到我的隊列的步驟,然後是使用logstash-plugin-jms嘗試連接的步驟。 請真的需要幫助,試圖消費這個隊列中的消息,並找不到任何關於它的文檔。如何使用logstash-input-jms插件與WebSphere JMS建立連接?

續步驟在HermesJMS

1)我創建了一個文件夾,並將其命名爲我的客戶機上的「WASJMS」,並複製從WebSphere下列文件到這個文件夾中讀取的WebSphere JMS隊列中的消息。

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),並添加了所有需要的罐子(3個罐子文件,我提到的步驟1)

enter image description here

6)然後,早在會議標籤我選擇hermes.JNDIQueueConnectionFactory爲類,然後選擇was855sib使用他們的罐子依賴。在那之後,我添加3個屬性並將其值設置如下:

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

而且,我已經通知用戶名和密碼字段,這是WebSphere用戶,並通過有權限讀取隊列。

enter image description here

7)這就是全部。這個設置後所有我需要做的就是右鍵單擊創建的會話,然後選擇「查看」選項,所以它列出的所有JMS隊列,我可以選擇我的JMS/RanieriQueue

enter image description here

就是這樣。我想使用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 

而且,我已經改變了的setup.bat內logstash-5.2.2/bin中加載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 [[主要] javax.jms.JMSSecurityException:CWSIA0006E:該 授權提供的用戶名沒有成功, :回溯=> [「com.ibm.ws.sib (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/connection.rb:20 4)「, 」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/connection.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)「, 」javalang/Thread.java:745)「]}

任何想法,哪裏是我的錯誤? 謝謝

P.S:我也有一個java代碼,可以連接到這個隊列並閱讀消息,讓我知道如果你認爲java代碼可以幫助你瞭解問題出在哪裏。

回答

0

我做到了。主要問題是我在目標參數上使用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