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); //让方法一直运行
}
}
最后通过开始写的方法给中间件发消息,监听器会自动监听。