【问题标题】:JbossESB jmsProvider cannot convert IBMMQ JMS Message JMSTextMessageJbossESB jmsProvider 无法转换 IBMMQ JMS 消息 JMSTextMessage
【发布时间】:2011-02-27 02:31:42
【问题描述】:

我正在尝试将 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>

【问题讨论】:

    标签: jboss ibm-mq jboss-messaging


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢 T. Rob 的回复。首先,我的 lib 目录中已经有了 com.ibm.mq.jar 和 com.ibm.mqjms.jar,它们在 jboss JVM 的类路径中可用。另一件事是 WebSpere MQ 由我们公司的外部部门控制。我为 MQ 编写了简单的 JMS 客户端,并成功接收并转换了对象模型中的消息。我相信它在我的 jboss-esb.xml 中定义了一些相关的 标签。
    • 我的回答有点跑题了,这就是我在维基上写它的原因,但我看到了一些可以追溯到类加载器问题的奇怪行为。对于根本原因,您可能走在正确的轨道上,但我想消除 CLASSPATH 作为可能的促成因素。有问题的两个 jar 依赖于 WMQ 发行版中的其他 jar,因此仅获取这两个可能并不总是按预期工作。
    【解决方案2】:

    回复有点晚,但如果有人读到这个,答案是:

    queuestartEsbChannel 正在侦听发送 jmstextmessages 的同一队列,并将 is-gateway 设置为 false(默认值)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 2021-02-05
      • 2016-01-15
      相关资源
      最近更新 更多