消息中间件ActiveMQ的简单使用-Spring整合开发(2)

1.用监听器方式获取消息的spring配置文件

与手动方式有不同之处

<!-- 扫描包 -->
	<context:component-scan base-package="com.djc.jms" />
	
	<!-- ActiveMQ 连接工厂 -->
    <amq:connectionFactory id="amqConnectionFactory"
        brokerURL="tcp://localhost:61616" userName="admin" password="admin"  />

    <!-- Spring Caching连接工厂 -->
    <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
        <property name="targetConnectionFactory" ref="amqConnectionFactory"></property>
        <property name="sessionCacheSize" value="100" />
    </bean>
    
     <!-- Spring JmsTemplate 的消息生产者 start-->
    <jms:listener-container  destination-type="queue" container-type="default" connection-factory="connectionFactory">
       <jms:listener destination="queue_test" ref="queueListener"/>
    </jms:listener-container>
    
     <jms:listener-container  destination-type="topic" container-type="default" connection-factory="connectionFactory">
       <jms:listener destination="topic_test" ref="topicListener1"/>
       <jms:listener destination="topic_test" ref="topicListener2" />
    </jms:listener-container>

2.queue模式

需要一个类实现MessageListener接口,使用@Component交给spring管理

@Component
public class QueueListener implements MessageListener {
	@Override
	public void onMessage(Message arg0) {
		try {
			TextMessage message = (TextMessage) arg0;
			System.out.println("spring接收到消息=="+message.getText());
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}	
}

3.topic模式

这里为了方便测试topic模式编写了两类,模仿两个消费者

//第一个类
@Component
public class TopicListener1 implements MessageListener {

	@Override
	public void onMessage(Message arg0) {
		try {
			MapMessage message = (MapMessage) arg0;
			System.out.println("TopicListener1接收到消息=="+message.getString("username"));
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}

//第二个类
@Component
public class TopicListener2 implements MessageListener {

	@Override
	public void onMessage(Message arg0) {
		try {
			MapMessage message = (MapMessage) arg0;
			System.out.println("TopicListener2接收到消息=="+message.getString("username"));
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}	
}

4.测试

编写一个测试类方便测试,让配置文件加载起来

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext-mq-consumer.xml")
public class SpringActiveMQListener {
	@Test
	public void testRun(){
		while(true);	//让方法一直运行
	}
}

最后通过开始写的方法给中间件发消息,监听器会自动监听。

上一篇:spring aop中引介拦截器的用法


下一篇:Spring AOP 基本概念