转自:https://blog.csdn.net/dly1580854879/article/details/68488003
最近项目中用到了消息中间件,拿到任务后,各种百度各种学习,现将学习的一个小成果记录一下。
环境:
windows环境下: Spring 3.2.8 、Tomcat 7 、JDK 1.6 、 ActiveMQ 5.9.0
项目目录结构:
applicationContext.xml
-
<!--创建连接工厂 -->
-
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
-
<property name="brokerURL" value="tcp://localhost:61616"> </property>
-
</bean>
-
-
-
<!-- 声明ActiveMQ消息目标,目标可以是一个队列,也可以是一个主题ActiveMQTopic -->
-
<bean id="destinationOne" class="org.apache.activemq.command.ActiveMQQueue">
-
<constructor-arg index="0" value="testQueOne"> </constructor-arg>
-
</bean>
-
-
-
<!-- 设置 消息目的地 start -->
-
<bean id="jmsTemplateOne" class="org.springframework.jms.core.JmsTemplate">
-
<property name="connectionFactory" ref="connectionFactory"> </property>
-
<property name="defaultDestination" ref="destinationOne"> </property>
-
<property name="receiveTimeout" value="6000"> </property>
-
</bean>
-
<!-- 设置 消息目的地 end -->
-
-
<!-- 配置生产者 start -->
-
<bean id="senderOne" class="com.dly.avtivemqtest.SenderOne">
-
<property name="jmsTemplateOne" ref="jmsTemplateOne"> </property>
-
</bean>
-
<!-- 配置生产者 end -->
-
-
<!-- 配置消费者 start -->
-
<bean id="receiverOne" class="com.dly.avtivemqtest.ReceiverOne">
-
<!-- <property name="jmsTemplate" ref="jmsTemplate"></property> -->
-
</bean>
-
<!-- 配置消费者 end -->
-
-
<!-- 消息监听器 -->
-
<bean id="consumerMessageListenerOfOne" class="com.dly.avtivemqtest.ReceiverOne" />
-
-
<!-- 消息监听容器 消息接收监听器用于异步接收消息 -->
-
<bean id="jmsContainerOne" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
-
<property name="connectionFactory" ref="connectionFactory" />
-
<property name="destination" ref="destinationOne" />
-
<property name="messageListener" ref="consumerMessageListenerOfOne" />
-
</bean>
-
</beans>
-
public class SenderOne {
-
private JmsTemplate jmsTemplateOne;
-
-
public JmsTemplate getJmsTemplateOne() {
-
return jmsTemplateOne;
-
}
-
-
public void setJmsTemplateOne(JmsTemplate jmsTemplateOne) {
-
this.jmsTemplateOne = jmsTemplateOne;
-
}
-
-
//测试的
-
public void sendInfo(final String messageRecord,final String flag) {
-
jmsTemplateOne.send(new MessageCreator() {
-
public Message createMessage(Session session) throws JMSException {
-
TextMessage message = session.createTextMessage();
-
return message;
-
}
-
});
-
}
-
}
ReceiverOne.java
-
public class ReceiverOne implements MessageListener {
-
//测试方法
-
public void onMessage(Message message, Session session) {
-
-
//这里我们知道生产者发送的就是一个纯文本消息,所以这里可以直接进行强制转换
-
TextMessage textMsg = (TextMessage) message;
-
try {
-
String endStr = textMsg.getText();
-
Integer endInt = Integer.parseInt(endStr);
-
System.out.println("消息:==="+endInt);
-
} catch (Exception e) {
-
e.printStackTrace();
-
System.out.println("异常信息是:===:" + e.getMessage());
-
}
-
}
-
-
}
-
public class JMSTest {
-
public static void main(String[] args) {
-
-
ApplicationContext context = new ClassPathXmlApplicationContext("resources/applicationContext.xml");
-
SenderOne sender = (SenderOne) context.getBean("senderOne");
-
sender.sendInfo("10","2");
-
}
-
}
运行JMSTest的结果:
看到控制台答应出来的 2 ,就说明 这个消息是发送成功 并且能,成功接收的,说明我们的topic消息的发送与接收是成功的。