【问题标题】:Camel: Write Message to WMQCamel:将消息写入 WMQ
【发布时间】:2014-07-26 06:52:10
【问题描述】:

目前我正在使用骆驼和 wmq。我试图做的是向 wmq 发送消息。我使用 Spring Framework 配置骆驼。以下是配置 wmq 的方法:

组件.xml

<bean id="websphere-mq" class="org.apache.camel.component.jms.JmsComponent">
        <property name="connectionFactory">
            <bean class="com.ibm.mq.jms.MQQueueConnectionFactory">
                <property name="transportType">
                    <util:constant static-field="com.ibm.mq.jms.JMSC.MQJMS_TP_CLIENT_MQ_TCPIP" />
                </property>
                <property name="hostName" value="localhost" />
                <property name="port" value="1414" />
                <property name="queueManager" value="localmanager" />
                <property name="channel" value="CH.ADM1" />
                <property name="CCSID" value="819"/>
                <property name="useConnectionPooling" value="true" />
            </bean>
        </property>
</bean>

config.xml

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">

    <route>
        <from uri="stream:in?promptMessage=Ausweisnummer: "/>
        <process ref="TransformToXML"/>
        <to uri ="xslt:mobako.sender.xsl"/>
        <to uri ="websphere-mq:queue:LSMH.ZKSEAP.SERVICEBUS"/>
    </route>

    <route>
        <from uri="websphere-mq:queue:ZKSEAP.LSMH.SERVICEBUS"/>
        <to uri="stream:out"/>
    </route>

</camelContext>

查看wmq的时候发现wmq一直在监听我的进程,但是没有收到任何消息。

然后为了检查我的 wmq 配置是否正确,我尝试将我的 config.xml 更改为如下内容:

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">

    <route>
        <from uri="websphere-mq:queue:ZKSEAP.LSMH.SERVICEBUS"/>
        <to uri="stream:out"/>
    </route>

</camelContext>

之后我尝试手动将消​​息写入 wmq。当我尝试运行我的进程时,来自 wmq 的消息会写在我的控制台上。

那我总结一下,用我的配置,我可以从wmq得到消息,但是我不能写到wmq。

实际上是什么问题?我的配置有什么问题或遗漏吗?非常感谢。

已编辑

嘿,我终于发现了问题所在。 问题是:我的jms版本和我的camel版本不一样。 但是,在我更改 jms 版本后,我的服务器上出现以下错误(关于 wmq):

2014-06-05 15:14:34,859 [Axis2 任务] 错误 WMQMsg - 预期的 MQ 消息格式' MQSTR ',但收到 'MQHRF2 '

如何解决?再次感谢。

【问题讨论】:

  • 您是否观察到 mq 层抛出的任何错误?链接异常中有任何 mq 返回码吗?您尝试放置的队列是否已为此应用程序或通道设置权限?您运行的是 MQ 7.1/7.5 还是更低版本?
  • 我已经检查过了,没有错误。仅供参考,我正在运行 MQ 7.1
  • 您确定在xslt: 行之后有一个有效的交换正文,您可以在该行和下一行之间添加一个日志语句吗?
  • 嗨 nsupathy 和 vikingsteve,我发现了问题所在,这是我的 jms 版本。但是我收到了一个关于 wmq 的新错误。其中说:“2014-06-05 15:14:34,859 [Axis2 Task] ERROR WMQMsg - Expected MQ message format 'MQSTR', but received 'MQHRF2'”你知道如何解决吗?非常感谢
  • MQHRF2 是 MQ JMS 格式。消息通常有一个 标头(在 XML 中),而 MQSTR 只是纯文本。读者期待的是纯文本消息,但遇到的是 JMS 格式。

标签: java spring jms apache-camel ibm-mq


【解决方案1】:

【讨论】:

    【解决方案2】:

    首先,我不太明白你的路线:

    具体来说,您有两个 .to uri。也许我错了,但从逻辑上讲,您需要某种逻辑来将消息路由到一个端点或另一个端点。

    其次,如果可以的话,我会为您提供适合我的解决方案。 据我了解,您只需要设置一个 jms 类型的骆驼端点,然后让骆驼为您完成所有样板代码。您确实需要一个特定的 ConnectionFactory(在我们的例子中是 wmq)。我将使用 Java 创建它,使用 Spring bean 只会增加复杂性。

    CamelContext camelContext = new DefaultCamelContext();
        MQQueueConnectionFactory connectionFactory = new MQQueueConnectionFactory();
        connectionFactory.setHostName("localhost");
    try {
            connectionFactory.setPort(1414);
            connectionFactory.setQueueManager("QueueManagerName");
            connectionFactory.setChannel("ChannelName");
            connectionFactory.setTransportType(1);
        } catch (JMSException e) {
            e.printStackTrace();
        }
        camelContext.addComponent("wmq", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
    

    对于第二部分,我们可以将 wmq 用作任何其他端点。

    try {
            camelContext.addRoutes(new RouteBuilder() {
    
                @Override
                public void configure() throws Exception {
                    from("file://data/in/?noop=true")
                            .to("wmq:queue:YourQueueName");
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    

    【讨论】:

      猜你喜欢
      • 2016-09-26
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      相关资源
      最近更新 更多