1

I'm new to JMS message passing. I want to publish a message to a topic and subscriber should receive it. Here is my spring bean definition.

<bean id="mySampleListener" class="com.my.sample.jms.MySampleListener" />

<bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="${broker.url}" />
</bean>

<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
    <constructor-arg ref="amqConnectionFactory" />
</bean>

<bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic">
    <constructor-arg index="0" value="sampleTopic"/>
</bean>

<bean id="sampleMessageListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="destinationName" value="sampleTopic" />
    <property name="messageListener" ref="mySampleListener" />
    <property name="pubSubDomain" value="true" />
    <property name="sessionAcknowledgeModeName" value="AUTO_ACKNOWLEDGE"/>
</bean>

<bean id="sampleJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="defaultDestination" ref="topicDestination" />
</bean>

I publish message in the constructor of JmsPublisher.class

<bean class="com.my.sample.jms.JmsPublisher">
    <constructor-arg index="0" ref="sampleJmsTemplate" />
</bean>

but my listener won't get executed.

public class MySampleListener implements MessageListener {

    private static final Logger LOGGER = LoggerFactory.getLogger(MySampleListener.class);

    @Override
    public void onMessage(final Message message) {
        LOGGER.info("Message received. " + message);
    }
}

public class JmsPublisher {
    private static final Logger LOGGER = LoggerFactory.getLogger(JmsPublisher.class);

    public JmsPublisher(final JmsTemplate jmsTemplate) {
        LOGGER.info("Trying to publish JMS message...");

        jmsTemplate.send(new MessageCreator() {
            @Override
            public Message createMessage(final Session session) throws JMSException {
                final Message message = session.createTextMessage("test123");

                return message;
            }
        });

        LOGGER.info("Published JMS message.");
    }
}
4

0 回答 0