繁体   English   中英

JbossESB jmsProvider无法转换IBMMQ JMS消息JMSTextMessage

[英]JbossESB jmsProvider cannot convert IBMMQ JMS Message JMSTextMessage

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

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

这是我遵循的步骤。

  1. jboss-service.mxl:定义的连接工厂和队列
  2. 将jar(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>

回复迟了一点,但是如果有人读过这个,答案是:

queuestartEsbChannel正在侦听传递jmstextmessages的队列,并且is-gateway设置为false (默认值)。

如果is-gatewayfalse ,则只能在该侦听器上接收ESB消息。

我本来希望在CLASSPATH中看到JMS应用程序的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 QMgr一起使用时,v7类具有许多很酷的新功能,例如自动将客户端重新连接到相同或不同的QMgr,具体取决于您的组态。 WMQ客户端安装可以免费下载(需要注册)作为SupportPac MQC7

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM