次のコンバータがあります。
@Component
public class EventConverter implements MessageConverter {
@Override
public Object fromMessage(Message message) throws JMSException, MessageConversionException {
// ...DO SOMETHING HERE
}
@Override
public Message toMessage(Object eventObject, Session session) throws JMSException, MessageConversionException {
// ... DO ANOTHER THING HERE
}
私の豆の定義は次のようになります。
<!-- Message converter - to convert between out Event class and JMS message -->
<bean id="eventConverter"
class="com.shared.events.common.handlers.EventConverter" />
<bean id="redeliveryConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="${activemq_url}" />
<property name="redeliveryPolicy" ref="redeliveryPolicy" />
<property name="nonBlockingRedelivery" value="true" />
</bean>
<bean id="redeliveryCachingConnectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory"
p:targetConnectionFactory-ref="redeliveryConnectionFactory"
p:sessionCacheSize="10" />
<!-- Redelivery: retry after 3sec, 6sec,9sec,12sec,15sec finally put in
DLQ -->
<bean id="redeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy">
<property name="queue" value="*" />
<property name="initialRedeliveryDelay" value="0" />
<property name="redeliveryDelay" value="3000" />
<property name="maximumRedeliveryDelay" value="3600000" />
<property name="maximumRedeliveries" value="5" />
<property name="useExponentialBackOff" value="true" />
<property name="backOffMultiplier" value="1" />
</bean>
<!-- A JmsTemplate instance that uses the cached connection and destination -->
<bean id="redeliveryJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="redeliveryCachingConnectionFactory" />
<property name="messageConverter" ref="eventConverter" />
<property name="sessionTransacted" value="true" />
</bean>
<!-- EDIT EDIT EDIT -->
<!-- The Spring message listener container configuration -->
<jms:listener-container container-type="default"
destination-type="queue" connection-factory="redeliveryConnectionFactory"
acknowledge="transacted" concurrency="5" cache="consumer"> <!-- remove prefetch on production -->
<jms:listener destination="accountStatsQueue" ref="accountStatsService"
method="onMessage" />
<!-- Listeners -->
<bean id="accountStatsService" class="com.service.AccountStatsService" />
<!-- Destinations -->
<bean id="accountStatsQueue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="AccountStatsQueue" />
toMessage()
関数は my から直接呼び出されていEventConverter
ます。これは素晴らしいことです。
問題は、fromMessage()
が私の から呼び出されていないことEventConvertor
です。(ところで:org.springframework.jms.support.converter.SimpleMessageConverter
で呼び出されます。特定の関数でそれをオーバーライドしていないfromMessage()
ようです - .)EventConverter
fromMessage()
何か案は?