Верблюд: написать сообщение на WMQ

1

в настоящее время я работаю с верблюдом и 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"

Как его решить? Еще раз спасибо.

  • 0
    Вы наблюдаете какие-либо ошибки в слое mq? Любой код возврата mq в связанном исключении? Имеет ли очередь, которую вы пытаетесь поставить, права доступа к этому приложению или каналу? Вы используете MQ 7.1 / 7.5 или ниже?
  • 0
    Я проверил это и нет ошибок. К вашему сведению, я бегу MQ 7.1
Показать ещё 6 комментариев
Теги:
spring
ibm-mq
jms
apache-camel

2 ответа

0
Лучший ответ

Я думаю, ваша проблема в ваших типах сообщений JMS и преобразовании. См. Следующую ссылку и попробуйте преобразовать тип сообщения, которое вы получаете из stream:in.

http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_7.0.1/com.ibm.mq.csqzaw.doc/jm25524_.htm?cp=SSFKSJ_7.0.1%2F1-25-3-4-1- 1-1 & языки = еп

http://www.capitalware.com/rl_blog/?p=1168

Обработка MQ ByteMessage с использованием JMS-клиента

0

Во-первых, я не совсем понимаю ваш маршрут:

В частности, у вас есть два урока. Возможно, я ошибаюсь, но логически вам понадобится какая-то логика для маршрутизации сообщения на одну конечную точку или другую.

Во-вторых, если можно, я предоставлю вам решение, которое сработало бы для меня. Как я понял, вам нужно только настроить конечную точку верблюда типа 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();
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню