1

我有以下转换器:

@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()。)

有任何想法吗?

4

0 回答 0