1

我正在尝试将 IBMMQ v6.0.2 与 jbossESB 集成。
我们在我们的一个 QA QUEUEMANAGER 上的 IBMMQ 上有可用的本地队列。我可以使用 jboss ESB 的 JMSprovider 来收听 QUEUE。一旦删除了一条消息(类型为 jms_text ),esb 就会监听它并拾取它,在它执行下一个操作之前它会抛出以下错误消息。

错误 [JmsComposer] 不支持的 JMS 消息类型:com.ibm.jms.JMSTextMessage

这是我遵循的步骤。

  1. jboss-service.mxl : 定义的连接工厂和队列
  2. 将 jars ( com.ibm.mq.* ) 添加到 ${jbossesb}/server/${mynode}/lib
  3. 在 jboss-esb.xml 上添加了 jms lsinterner 配置

请指导我在这里缺少什么...我需要创建自定义 MessagePlugin 吗?

jboss-esb 看起来像这样

<jms-provider name="WSMQ" connection-factory="MQQueueConnectionFactory"> 
     <jms-bus busid="queuestartGwChannel"> <jms-message-filter
                   dest-type="QUEUE"
                   dest-name="wsmq/SerivceOrderQueue"
                   acknowledge-mode ="AUTO_ACKNOWLEDGE"
                />
     </jms-bus>
     <jms-bus busid="queuestartEsbChannel">
               <jms-message-filter
                   dest-type="QUEUE"
                   dest-name="wsmq/SerivceOrderQueue"
               />
     </jms-bus>
  </jms-provider>

jboss-service.xml 看起来像这样

   <mbean code="jmx.service.wsmq.WSMQConnectionFactory"
     name="jmx.service.wsmq:service=MQQueueConnectionFactory">
    <attribute name="JndiName">MQQueueConnectionFactory</attribute>
    <attribute name="JMSStyle">Queue</attribute>
    <attribute name="IsXA">false</attribute>
    <attribute name="QueueManagerName">SQAT0083</attribute>
    <attribute name="HostName">111.111.111.111</attribute>
    <attribute name="Port">1415</attribute>
    <attribute name="Channel">MYCO.SVRCONN</attribute>
    <attribute name="TransportType">CLIENT</attribute>
    <depends>jboss:service=Naming</depends>
  </mbean>
  <mbean code="jmx.service.wsmq.WSMQDestination"
     name="jmx.service.wsmq:service=WSMQRequestQueue">
     <attribute name="JndiName">wsmq/SerivceOrderQueue</attribute>
     <attribute name="JMSStyle">Queue</attribute>
     <attribute name="QueueManagerName">SQAT0083</attribute>
     <attribute name="DestinationName">MYCO.SERVICEORDER.QA01.QL01</attribute>
     <attribute name="TargetClient">MQ</attribute>
     <depends>jboss:service=Naming</depends>
   </mbean>

我正在使用 jboss-eap-4.3。非常感谢任何帮助。

这是我的服务标签看起来像 jboss-esb.xml

        <listeners>


            <jms-listener name="MQ-Gateway"
                 busidref="queuestartGwChannel"
                 is-gateway="true"  maxThreads="1"
             />

            <jms-listener name="MQ-EsbListener"     busidref="queuestartEsbChannel"             />
        </listeners>

        <actions mep="OneWay">
            <action name="serviceOrderMarshaller"
                class="com.my.esb.actions.ServiceOrderMessageUnMarshallerAction"
                process="unmarshalPayload">
                <property name="springContextXml" value="spring/mainApplicationContext.xml"/>
            </action>
            <action name="serviceOrderStaging"
                class="com.my.esb.actions.ServiceOrdersStagingAction"
                process="stageServiceOrders">
                <property name="springContextXml" value="spring/mainApplicationContext.xml"/>
            </action>

            <action name="marginAndLeadTimeRetriever"
                class="com.my.esb.actions.MarginAndLeadTimeRetrieverAction"
                process="retrieveJobCodeInfo">
                <property name="springContextXml" value="spring/mainApplicationContext.xml"/>
            </action>

            <action name="createDraftRequestMapper"
                class="com.my.esb.actions.CreateDraftRequestMapperAction"
                process="mapData">
                <property name="springContextXml" value="spring/mainApplicationContext.xml"/>
            </action>

            <action name="omsCreateDraftRequestTranslator"
                class="com.my.esb.actions.OMSCreateDraftRequestTranslatorAction"
                process="translateData">
                <property name="springContextXml" value="spring/mainApplicationContext.xml"/>
            </action>

            <action name="createDraftRequestProcessor"
                class="com.my.esb.actions.CreateDraftRequestProcessorAction"
                process="dispatchRequest">
                <property name="springContextXml" value="spring/mainApplicationContext.xml"/>
            </action>

</actions>
4

2 回答 2

2

Bit late response but if someone reads this, the answer is:

queuestartEsbChannel is listening to the same queue that is delivering jmstextmessages and it has is-gateway set to false (default value).

If is-gateway is false, only ESB messages can be recieved on that listener.

于 2012-04-25T12:34:31.570 回答
1

我本来希望在 JMS 应用程序的 CLASSPATH 中看到 com.ibm.mqjms.jar,而不是 com.ibm.mq.*。

根据您使用的 WMQ 版本,请参考信息中心的环境变量页面。WMQ V6 页面在此处(参见表 #2),WMQ v7 页面在此处(参见下表注释)。请注意,这些类已在版本之间重新打包,并且 CLASSPATH 要求完全不同。

在 UNIX 风格上,您可以运行 setmqjms 脚本来为 WMQ JMS 配置环境。它位于 AIX 上的 /opt/mqm/java/bin 或 /usr/mqm/java/bin 中。不过,这假定安装了标准 WMQ 客户端。如果你只是抓住罐子并重新安置它们,那是行不通的。特别是,如果您只是抓取 com.ibm.mq* jar,它可能无法正常工作。您可以通过运行随客户端安装提供的初始验证测试 (IVT) 来验证您的安装。使用完整 WMQ 客户端的另一个好处是安装了所有跟踪实用程序、示例代码和其他诊断程序。

另一条建议是,即使 WMQ 服务器位于 v6 ,也请务必使用 WMQ v7 客户端。这是因为 WMQ v6 将于明年停止服务,之后将不再支持。现在使用 v7 客户端将为您节省以后的迁移、CLASSPATH 更改等。此外,v7 类在与 v7 QMgr 一起使用时具有许多很酷的新功能,例如自动客户端重新连接到相同或不同的 QMgr,具体取决于您的配置。WMQ 客户端安装作为SupportPac MQC7可免费下载(需要注册) 。

于 2010-06-03T13:34:04.567 回答