【问题标题】:WS02 JMS transport for Websphere MQWebsphere MQ 的 WS02 JMS 传输
【发布时间】:2018-06-20 15:16:34
【问题描述】:

找了几天后,我遇到了使用来自 IBM MQ 的消息的问题。我按照文档进行了操作,但系统仍然无法正常工作。我正在使用 4.8.0 和 MQ 7.5.0.2

错误

[2014-02-06 01:06:14,341] ERROR - JMSListener Unable to continue server startup as it seems the JMS Provider is not yet started. Please start the JMS provider now.
[2014-02-06 01:06:14,342] ERROR - JMSListener Connection attempt : 1 for JMS Provider failed. Next retry in 20 seconds
[2014-02-06 01:06:34,364] ERROR - JMSListener Unable to continue server startup as it seems the JMS Provider is not yet started. Please start the JMS provider now.
 [2014-02-06 01:06:34,365] ERROR - JMSListener Connection attempt : 2 for JMS Provider failed. Next retry in 40 seconds

root@sandbox:/opt/wso2esb-4.8.0/FFDC# more JMSCC0001.FDC
----------------------------------START FFST------------------------------------
/opt/wso2esb-4.8.0/FFDC/JMSCC0001.FDC PID:5897

                                JMS Common Client First Failure Symptom Report


Product          :- IBM WebSphere MQ classes for JMS
Date/Time        :- Thu Feb 06 00:54:07 CET 2014
System time      :- 1391644447539
Operating System :- SunOS
UserID           :- root
Java Vendor      :- Oracle Corporation
Java Version     :- 23.3-b01

Source Class     :- com.ibm.mq.jms.MQQueueConnectionFactory
Source Method    :- readObject()
ProbeID          :- XF001003
Thread           :- name=localhost-startStop-1 priority=5 group=main ccl=org.eclipse.core.runtime.internal.adaptor.ContextFinder@1da36ad

axis2 配置

<transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
        <parameter name="default" locked="false">
                <parameter name="java.naming.factory.initial" locked="false">com.sun.jndi.fscontext.RefFSContextFactory</parameter>
                <parameter name="java.naming.provider.url" locked="false">file:///var/tmp/jndi</parameter>
                <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">ivtQCF</parameter>
                <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
                <parameter name="transport.jms.Destination" locked="false">ivtQ</parameter>
        </parameter>
</transportReceiver>

测试 jndi 是否正常工作

java JmsJndiConsumer -i file:///var/tmp/jndi -c ivtQCF -d ivtQ
Initial context found!
Received message:

  JMSMessage class: jms_text
  JMSType:          null
  JMSDeliveryMode:  2
  JMSExpiration:    0
  JMSPriority:      4
  JMSMessageID:     ID:414d5120514d412020202020202020204424ee5203db0020
  JMSTimestamp:     1391646438379
  JMSCorrelationID: null
  JMSDestination:   queue://QMA/QUEUE1
  JMSReplyTo:       null
  JMSRedelivered:   false
    JMSXAppID: JmsJndiProducer
    JMSXDeliveryCount: 1
    JMSXUserID: webservd
    JMS_IBM_Character_Set: UTF-8
    JMS_IBM_Encoding: 273
    JMS_IBM_Format: MQSTR
    JMS_IBM_MsgType: 8
    JMS_IBM_PutApplType: 28
    JMS_IBM_PutDate: 20140206
    JMS_IBM_PutTime: 00271840
JmsJndiProducer: Your lucky number today is 324

代理

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="StockQuoteProxy2"
       transports="jms"
       startOnLoad="true"
       trace="disable">
   <description/>
   <target>
      <endpoint>
         <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
      </endpoint>
     <inSequence>
         <property name="OUT_ONLY" value="true"/>
     </inSequence>
     <outSequence>
         <send/>
     </outSequence>
   </target>
   <publishWSDL uri="file:repository/samples/resources/proxy/sample_proxy_1.wsdl"/>
   <parameter name="transport.jms.ContentType">
      <rules>
         <jmsProperty>contentType</jmsProperty>
         <default>application/xml</default>
      </rules>
   </parameter>
</proxy>

我检查了网络,我看不到任何从 esb 到 mq 服务器的连接。

有什么想法吗?

更新

我已在示例 ($WSO2_HOME/samples/axis2Server/repository/conf/axis2.xml) 中使用完全相同的 jms 传输(默认)配置了轴服务器。

Atfer 编译“SimpleStockQuoteService”并启动服务器,我可以看到它工作正常。

cd wso2esb-4.8.1/samples/axis2Server/src/SimpleStockQuoteService/ && ant
cd wso2esb-4.8.1/samples/axis2Server/ && ./axis2server.sh

14/02/10 21:20:29 INFO jms.JMSListener: JMS listener started
14/02/10 21:20:30 INFO jms.JMSListener: Connection attempt: 1 for JMS Provider for
service: SimpleStockQuoteService was successful!
14/02/10 21:20:30 INFO jms.ServiceTaskManager: Task manager for service : 
SimpleStockQuoteService [re-]initialized
14/02/10 21:20:31 INFO jms.JMSListener: Started to listen on destination : ivtQ of 
type queue for service SimpleStockQuoteService
14/02/10 21:20:31 INFO util.SampleAxis2ServerManager: [SimpleAxisServer] Started

我还是不明白为什么不能在碳里面工作!!!

【问题讨论】:

  • 您在 CARBON_HOME/repository/logs/wso2carbon.log 中看到任何错误吗?
  • 从 JNDI 读取配置时出现问题,因此您会在连接工厂中看到问题,因此无法连接到 MQ 服务器。ws02 使用的配置文件存在问题跨度>
  • TID: [0] [ESB] [2014-02-06 22:38:09,956] 错误 {org.apache.axis2.transport.jms.JMSListener} - 无法继续服务器启动似乎 JMS Provider 尚未启动。请立即启动 JMS 提供程序。 {org.apache.axis2.transport.jms.JMSListener} TID:[0] [ESB] [2014-02-06 22:38:09,957] 错误 {org.apache.axis2.transport.jms.JMSListener} - 连接尝试: 7 对于 JMS 提供程序失败。下次重试 1280 秒 {org.apache.axis2.transport.jms.JMSListener}
  • 我在 wso2carbon.log 中看到的唯一错误与我在问题中粘贴的相同。
  • @Neeraj。我用 JmsJndiConsumer 测试 /var/tmp/jndi 并且它正在工作我不知道为什么读取文件时出现问题。

标签: jms wso2 ibm-mq


【解决方案1】:

我发现让它工作的唯一方法是修改启动脚本 (ws02server.sh) 以将 MQ 客户端 java 库添加到类路径中

CARBON_CLASSPATH=/opt/mqm/java/lib/com.ibm.mq.jar:/opt/mqm/java/lib/com.ibm.mqjms.jar:"$CARBON_CLASSPATH"

如果 MQ 传输类型是 BIND(与 MQ 服务器在同一服务器上的 ws02),还需要包含 JNI 库 (-Djava.library.path=/opt/mqm/java/lib)

按照文档中的说明将 MQ java 库复制到 repository/component/lib 不起作用。

在 Solaris 和 RHEL7 上使用 MQ 7.5.0.2 和 ws02 4.8.1 测试

【讨论】:

  • 我在 windows 环境中测试了这个但没有成功(我的 jndi 工作正常我用两个 java 代码测试,我可以从队列发送和接收消息):rem --- FOR IBM MQ set CARBON_CLASSPATH= .\mq\com.ibm.mq.jar;.\mq\com.ibm.mqjms.jar;.\mq\com.ibm.mq.jmqi.jar;.\mq\dhbcore.jar;%CARBON_CLASSPATH%
猜你喜欢
  • 2012-08-27
  • 2015-06-19
  • 2013-01-09
  • 2011-03-24
  • 2010-10-28
  • 2020-02-20
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
相关资源
最近更新 更多