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
}

私の豆の定義は次のようになります。

    <!-- 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()ようです - .)EventConverterfromMessage()

何か案は?

4

0 に答える 0