目前我正在与camel和wmq合作。我试图做的是向wmq发送消息。我使用Spring Framework配置了camel。以下是如何配置wmq:
component.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。
实际上是什么问题?我的配置有什么问题或遗漏吗?非常感谢。
EDITED
嘿,终于我发现了什么是错的。 问题是:我的jms版本与我的骆驼版本不一样。 但是,在我更改了jms版本之后,我在服务器上遇到了以下错误(关于wmq):2014-06-05 15:14:34,859 [Axis2 Task] ERROR WMQMsg - 预期的MQ消息格式' MQSTR',但收到'MQHRF2'
如何解决?再次感谢。
答案 0 :(得分:0)
我认为您的问题出在您的JMS消息类型和转换中。
请参阅以下链接,然后尝试转换您从stream:in
获得的邮件类型。
答案 1 :(得分:0)
首先,我不太了解你的路线:
具体来说,你有两个.to uris。也许我错了,但从逻辑上讲,你需要某种逻辑来将消息路由到一个或另一个端点。
其次,如果可以,我将为您提供适合我的解决方案。 据我所知,你只需要设置jms类型的camel端点,然后让camel为你做所有的样板代码。你确实需要一个特定的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();
}