我有以下转换器:
@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
}
我的 bean 定义如下所示:
<!-- 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()
函数是直接从我那里调用的,EventConverter
这很棒。
问题是fromMessage()
没有从我的EventConvertor
. (顺便说一句:org.springframework.jms.support.converter.SimpleMessageConverter
确实被调用了fromMessage()
,就像我EventConverter
没有在特定函数中覆盖它 - fromMessage()
。)
有任何想法吗?