JMS(使用消息中介:ActiveMQ)
JMS为JAVA开发者提供了一个与消息中介进行交互,以及发送和接收消息的标准API,而且每一个消
息中介的实现都会支持JMS。(即JMS为所有消息中介提供了统一接口);JmsTemplate是Spring消
除冗长和重复JMS代码的解决方案。JmsTemplate可以创建连接,获取会话,以及发送和接收消息。
1.在Spring中安装ActiveMQ
www.activemq.org apache-activemq-4.1.0-incubator.zip ,把apache-activemq-4.1.0-
incubator.jar复制到lib中
启动ActiveMQ的脚本:运行刚下载的文件/bin/activemq.bat. 这样就可以使用ActiveMQ进行中介服
务了。
2.applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!--创建连接工厂-->
<bean id="connectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616"></property>
</bean>
<!-- 声明ActiveMQ消息目标,目标可以是一个队列,也可以是一个主题ActiveMQTopic-->
<bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="rantz.marketing.queue"></constructor-arg>
</bean>
<!---->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"></property>
<property name="defaultDestination" ref="destination"></property>
<property name="receiveTimeout" value="6000"></property>
</bean>
<bean id="sender" class="com.roadrantz.marketing.Sender">
<property name="jmsTemplate" ref="jmsTemplate"></property>
</bean>
<bean id="receiver" class="com.roadrantz.marketing.Receiver">
<property name="jmsTemplate" ref="jmsTemplate"></property>
</bean>
</beans>
3.发送消息Sender.java
package com.roadrantz.marketing;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.Session;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
public class Sender {
private JmsTemplate jmsTemplate;
public void sendInfo()
{
jmsTemplate.send(new MessageCreator(){
public Message createMessage(Session session) throws JMSException
{ MapMessage message=session.createMapMessage();
message.setString("lastName", "pp");
return message;
}
});
}
public JmsTemplate getJmsTemplate() {
return jmsTemplate;
}
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
}
4.接收消息Receiver.java
package com.roadrantz.marketing;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.support.JmsUtils;
public class Receiver {
private JmsTemplate jmsTemplate;
public Receiver() {}
public String receiveMessage()
{ String my="";
MapMessage message=(MapMessage)jmsTemplate.receive();
try{
my= message.getString("lastName");
}
catch(JMSException e)
{ throw JmsUtils.convertJmsAccessException(e); }
return my;
}
public JmsTemplate getJmsTemplate() {
return jmsTemplate;
}
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
5.测试
test.java发
package com.roadrantz.marketing;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class test {
public static void main(String[] args) {
// TODO 自动生成方法存根
ApplicationContext context = new ClassPathXmlApplicationContext
("applicationContext.xml");
Sender sender = (Sender) context.getBean("sender");
sender.sendInfo();
}
}
test2.java收
package com.roadrantz.marketing;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class test2 {
public static void main(String[] args) {
// TODO 自动生成方法存根
ApplicationContext context = new ClassPathXmlApplicationContext
("applicationContext.xml");
Receiver receiver = (Receiver) context.getBean("receiver");
System.out.print(receiver.receiveMessage()); }
}
附件: csdn空间4/JMS.rar
csdn空间4/apache-activemq-4.1.0-incubator.zip
应用: 站内短信息
异步发,有目标,先发,后收,不管时间