в настоящее время я работаю с верблюдом и wmq. Я попытался отправить сообщение в wmq. Я настраиваю верблюда, используя Spring Framework. Вот как настроить 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.
В чем проблема на самом деле? Что-то не так или нет в моей конфигурации? Спасибо.
РЕДАКТИРОВАНИЕ
Эй, наконец, я узнал, что не так. Проблема в том, что моя версия jms не совпадает с моей версией верблюда. Но после того, как я изменил версию jms, я получил следующую ошибку (относительно wmq) на моем сервере:
2014-06-05 15: 14: 34,859 [Задача Axis2] ОШИБКА WMQMsg - Ожидаемый формат сообщения MQ "MQSTR", но получил "MQHRF2"
Как его решить? Еще раз спасибо.
Я думаю, ваша проблема в ваших типах сообщений JMS и преобразовании. См. Следующую ссылку и попробуйте преобразовать тип сообщения, которое вы получаете из stream:in
.
Во-первых, я не совсем понимаю ваш маршрут:
В частности, у вас есть два урока. Возможно, я ошибаюсь, но логически вам понадобится какая-то логика для маршрутизации сообщения на одну конечную точку или другую.
Во-вторых, если можно, я предоставлю вам решение, которое сработало бы для меня. Как я понял, вам нужно только настроить конечную точку верблюда типа jms, а затем позволить верблюду сделать для вас весь шаблонный код. Вам требуется конкретное ConnectionFactory (в нашем случае wmq). Я создам его на Java, делая его с помощью Spring beans просто добавляет сложности.
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();
}