IBM MQ против JMS - реализация Spring - PullRequest
3 голосов
/ 30 сентября 2011

Я работаю над приложением Spring, в котором мы реализовали код для отправки сообщений через IBM MQ.

Теперь нам посоветовали не использовать напрямую API MQ напрямую, а вместо этого использовать JMS.

Шаги, которые я выполнил:

  1. создал имя JNDI для подключения к очереди сообщений, настроенное как:

    <bean id="emailQueueDestination" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true">
            <property name="jndiName" value="<<JNDI name of Queue" >>/>
    </bean>
    
  2. Мне нужно подключениефабричный объект для подключения к провайдеру JMS, и я настроил его следующим образом:

    <bean id="emailQueueConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
      <property name="queueManager" value="" />
          <property name="hostName" value="" />
      <property name="channel" value="" />
      <property name="port" value="1414" />
    </bean>
    

Далее я ввел 2 вышеупомянутых компонента в класс JMSTemplate:

<bean id="emailQueueTemplate" class="org.springframework.jms.core.JmsTemplate" lazy-init="true">
        <property name="connectionFactory" ref="emailQueueConnectionFactory" />
        <property name="defaultDestination" ref="emailQueueDestination" />
    </bean>

Теперь, поскольку моя цель состоит в том, чтобы удалить зависимость от MQ API, вы думаете, что приведенная выше конфигурация (особенно для фабрики соединений) выглядит хорошо?

1 Ответ

3 голосов
/ 30 сентября 2011

Если , ваш код не ссылается ни на один из классов MQ (то есть он ссылается на этот бин только как JMS ConnectionFactory и , которые вы используетене полагайтесь на какие-либо другие нестандартные функции MQ, тогда это должно сделать ваш код достаточно легким для переноса.

Я бы не поспорил, что переключение на другой продукт потребовало бы нулевых изменений кода (многие реализации JMS кажутсяиметь некоторые интересные особенности), но вы определенно на правильном пути.

...