я прочитал: http://www.javaworld.com/article/2074123/java-web-development/transaction-and-redelivery-in-jms.html?page=2как соблюдение Redelivery для ип квитирования JMS сообщение
«В целом, признавая конкретное сообщение подтверждает все предыдущие сообщения сеанса получает» (в режиме подтверждения клиента)
«обратная передача сообщений не является автоматическим, но сообщения повторно доставлены при определенных обстоятельствах»
Мои вопросы:
- как можно епз I ure есть новый сеанс каждый раз, когда я получаю сообщение (но повторно использую соединение)?
- как обеспечить доставку для подтверждения сообщения?
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>
и я использую процессор верблюдов в качестве конечной точки бин, как одиночек
спасибо. некоторые вопросы, пожалуйста: я понимаю, что соединения и сеансы кэширования PooledConnectionFactory/cachedConnectionFactory (и, возможно, получатели/продюсеры). Так что создается новый сеанс для каждого нового сообщения или нет? если нет - я читал, что подтверждение для всех сообщений в сеансе - очень плохо ... Мне нужен новый сеанс для каждого сообщения .. но в этом случае, как сеансы могут быть объединены? а также - если соединение является одним для всех сеансов, сообщения об отказе не будут доставлены до тех пор, пока я не перезапущу приложение, нет? Также не хорошо. – user5157427
Если мы говорим конкретно об ActiveMQ Pooled Connection Factory. Я использовал довольно недавно. Сеансы настраиваются для каждого подключения. Если у вас есть ошибка (IE: тайм-аут или сбой транзакции), вы можете настроить фабрику на уничтожение и воссоздание соединения при ошибке. Когда вы уничтожаете соединение, сеансы будут уничтожены вместе с ним, а затем воссозданы. бит сложно настроить, когда вы получаете более сложные параметры транзакции, но основой является то, что если вы уничтожаете соединение, вы также уничтожаете связанные сеансы. –
да, но сообщения undeliver будут delivar, пока соединение не перезапущено (соединение объединяется и не закрывается для каждого сообщения)? Если нет - у меня есть триггер на моем коде приложения, перезапуск соединения каждый какой-то логический момент, нет? – user5157427