我正在尝试连接到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 Default 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,创建了一个名为is855的新会话,在提供者选项卡上我创建了一个新组(was855sib)并添加了所有需要的jar(我在步骤1中提到的3个jars文件)< / p>
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:The 对提供的用户名的授权不成功。, :回溯=&GT; [ “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(爪哇/郎/反映/ 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: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/ 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 /输入/ 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 /输入/ 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(爪哇/郎/ Thread.java:745)”]}
我的错误在哪里? 感谢
P.S:我还有一个可以连接到这个队列并阅读消息的java代码,如果您认为Java代码可以帮助您了解问题所在,请告诉我。
答案 0 :(得分: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