我正在尝试将IBMMQ v6.0.2与jbossESB集成 我们在QA QUEUEMANAGER上的IBMMQ上有本地队列。 我可以使用jboss ESB的JMSprovider来收听QUEUE。一旦消息(类型为jms_text)被删除,esb就会收听并捡起它,然后在它点击下一个动作之前它会抛出以下错误消息。
错误[JmsComposer]不支持的JMS消息类型:com.ibm.jms.JMSTextMessage
以下是我遵循的步骤。
请指导我在这里缺少的内容......我是否需要创建自定义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>
答案 0 :(得分:2)
迟到的反应,但如果有人读到这个,答案是:
queuestartEsbChannel
正在侦听提供jmstextmessages的同一个队列,并且is-gateway
设置为 false (默认值)。
如果is-gateway
false ,则只能在该侦听器上收到ESB消息。
答案 1 :(得分:1)
我原本希望在CLASSPATH中看到com.ibm.mqjms.jar用于JMS应用程序,而不是com.ibm.mq。*。
根据您使用的WMQ版本,请参考信息中心的环境变量页面。 WMQ V6页面is here(参见表#2)和WMQ v7页面is here(参见表和下面的注释)。请注意,这些类已在版本之间重新打包,并且CLASSPATH要求完全不同。
在UNIX flavor上,您可以运行setmqjms脚本来配置WMQ JMS的环境。它位于AIX上的/ opt / mqm / java / bin或/ usr / mqm / java / bin中。但是,这假设是标准的WMQ客户端安装。如果你只是抓住罐子并重新安置它们,它将无法工作。特别是,如果您只是抓住了com.ibm.mq * jars,它可能无法正常工作。您可以通过运行客户端安装提供的初始验证测试(IVT)来验证安装。使用完整WMQ客户端的额外好处是安装了所有跟踪实用程序和示例代码以及其他诊断程序。
另一条建议是,即使WMQ服务器位于v6 ,也要确保使用WMQ v7客户端。这是因为WMQ v6明年将停止服务,之后将不再受支持。现在使用v7客户端将为您节省迁移,CLASSPATH更改等。此外,与v7 QMgr一起使用时,v7类有许多很酷的新功能,例如自动客户端重新连接到相同或不同的QMgr,具体取决于您的组态。 WMQ客户端安装免费下载(需要注册)为SupportPac MQC7。