2016-01-23 2 views
0

я прочитал: http://www.javaworld.com/article/2074123/java-web-development/transaction-and-redelivery-in-jms.html?page=2как соблюдение Redelivery для ип квитирования JMS сообщение

«В целом, признавая конкретное сообщение подтверждает все предыдущие сообщения сеанса получает» (в режиме подтверждения клиента)

«обратная передача сообщений не является автоматическим, но сообщения повторно доставлены при определенных обстоятельствах»

Мои вопросы:

  1. как можно епз I ure есть новый сеанс каждый раз, когда я получаю сообщение (но повторно использую соединение)?
  2. как обеспечить доставку для подтверждения сообщения?

Im используя этот configration:

<bean id="jmsConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory" 
      lazy-init="true"> 
      <property name="queueManager" value="${queueManager}" /> 
      <property name="hostName" value="${hostName}" /> 
      <property name="transportType" value="${transportType}" /> 
      <property name="port" value="${port}" /> 
      <property name="channel" value="${channel}" /> 
      <property name="SSLCipherSuite" value="${SSLCipherSuite}" /> 
     </bean> 
<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"> 
    <property name="maxConnections" value="10"/> 
    <property name="maximumActive" value="100"/> 
    <property name="connectionFactory" ref="jmsConnectionFactory"/> 
</bean> 
<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration"> 
    <property name="connectionFactory" ref="pooledConnectionFactory"/> 
    <property name="transacted" value="false"/> 
</bean> 

<bean id="mqNonJmsDestRes" class="calypsox.tk.util.NonJmsMQQueueDestinationResolver" /> 

<bean id="jms" class="org.apache.camel.component.jms.JmsComponent"> 
     <property name="configuration" ref="jmsConfig" /> 
     <property name="acknowledgementModeName" value="CLIENT_ACKNOWLEDGE" /> 
     <property name="destinationResolver" ref="mqNonJmsDestRes" /> 
</bean> 

и я использую процессор верблюдов в качестве конечной точки бин, как одиночек

ответ

0

В этой статье вы ссылки от 2002 Всех систем на базе MQ получило много работы с тех пор. На вашем AMQ PooledConnectionFactory есть настройки для контроля того, как долго ваши соединения задерживаются до их уничтожения и что вы должны делать, если столкнулись с ошибкой. Я рекомендую читать некоторые из новых документов, так как за последние 14 лет произошли большие изменения. Поэтому некоторые вещи стали намного проще.

Вы также можете проверить в exceptionListener на "org.apache.camel.component.jms.JmsComponent", чтобы настроить, как управлять исключениями и даже писать свои собственные, если текущие параметры не соответствуют вашим потребностям.

+0

спасибо. некоторые вопросы, пожалуйста: я понимаю, что соединения и сеансы кэширования PooledConnectionFactory/cachedConnectionFactory (и, возможно, получатели/продюсеры). Так что создается новый сеанс для каждого нового сообщения или нет? если нет - я читал, что подтверждение для всех сообщений в сеансе - очень плохо ... Мне нужен новый сеанс для каждого сообщения .. но в этом случае, как сеансы могут быть объединены? а также - если соединение является одним для всех сеансов, сообщения об отказе не будут доставлены до тех пор, пока я не перезапущу приложение, нет? Также не хорошо. – user5157427

+0

Если мы говорим конкретно об ActiveMQ Pooled Connection Factory. Я использовал довольно недавно. Сеансы настраиваются для каждого подключения. Если у вас есть ошибка (IE: тайм-аут или сбой транзакции), вы можете настроить фабрику на уничтожение и воссоздание соединения при ошибке. Когда вы уничтожаете соединение, сеансы будут уничтожены вместе с ним, а затем воссозданы. бит сложно настроить, когда вы получаете более сложные параметры транзакции, но основой является то, что если вы уничтожаете соединение, вы также уничтожаете связанные сеансы. –

+0

да, но сообщения undeliver будут delivar, пока соединение не перезапущено (соединение объединяется и не закрывается для каждого сообщения)? Если нет - у меня есть триггер на моем коде приложения, перезапуск соединения каждый какой-то логический момент, нет? – user5157427

Смежные вопросы