Spring对JMS的支持
2014-12-15 11:43
141 查看
JMS两个主要概念:
消息中介消息目标:
1、队列
2、主题
两种传递模式:
点对点消息传递模型:每个消息都有一个发送者和一个消费者发送者-〉队列-〉接受者
发布-订阅者消息传递模型:一条订阅信息,可以发送给多个订阅者
发布者-〉主题-〉订阅者们
JMS优点:
不用等待面向消息
位置独立
确保投送
ActiveQM:开源消息中介。
Spring中安装ActiveMQ
创建连接工厂:
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"><property name = "brokerURL" value="tcp://localhost:61616"/>
</bean>
声明ActiveMQ消息目标:消息目标可以是队列,也可以是主题。
队列:
<bean id="mqiqeDestination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="mqiqe.queue"/>
</bean>
主题:
<bean id="mqiqeDestination" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg index="0" value="mqiqe.topic"/>
</bean>
使用JMS模板:
JmsTemplate是Spring消除冗长和重复JMS代码解决方案。<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<!--注入默认消息目标-->
<property name="defaultDestination" ref="mqiqeDestination"/>
</bean>
发送消息:
jmsTemplate.send(destination, messageCreator);方法发送消息 destination:目标 ,messageCreator: 消息。发送者——〉send(JmsTemplate)——〉队列/主题
消费消息:
MapMessage message=(MapMessage)jmsTemplate.receive(destination);方法接受消息 destination:目标 ,MapMessage: 消息。队列/主题-〉(recive)JmsTemplate-〉Receiver
Demo代码
spring配置文件:
[html] viewplaincopy
<!-- ActiveMQ -->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name = "brokerURL" value="tcp://localhost:61616"/>
</bean>
<bean id="mqiqeDestination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="mqiqe.queue"/>
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="defaultDestination" ref="mqiqeDestination"/>
</bean>
<bean id="mqiqeSend" class="com.activemq.MqiqeSendImpl">
<property name="jmsTemplate" ref="jmsTemplate"/>
</bean>
<bean id="mqiqeReceiver" class="com.activemq.MqiqeReceiverImpl">
<property name="jmsTemplate" ref="jmsTemplate"/>
</bean>
接口文件:
[java] viewplaincopy
package com.activemq;
import javax.jms.JMSException;
public interface IMqiqeReceiver {
public String reveiver() throws JMSException;
}
package com.activemq;
public interface IMqiqeSend {
public void send(final String messageStr);
}
类文件:
[java] viewplaincopy
package com.activemq;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import org.springframework.jms.core.JmsTemplate;
public class MqiqeReceiverImpl implements IMqiqeReceiver {
@Override
public String reveiver() throws JMSException {
System.out.println("开始接受信息。。。");
MapMessage message = (MapMessage) jmsTemplate.receive();
String str = "lastName:" + message.getString("lastName") + "firstName:"
+ message.getString("firstName") + "messageStr:"
+ message.getString("messageStr");
System.out.println("接受完信息。。。");
return str;
}
private JmsTemplate jmsTemplate;
/**
* @param jmsTemplate
* the jmsTemplate to set
*/
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
}
[java] view
plaincopy
package com.activemq;
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 MqiqeSendImpl implements IMqiqeSend {
@Override
public void send (final String motorist){
jmsTemplate.send(
new MessageCreator(){
public Message createMessage(Session session) throws JMSException{
MapMessage message =session.createMapMessage();
message.setString("lastName", "fg\n");
message.setString("firstName", "mqiqe\n");
message.setString("messageStr", motorist);
return message;
}
});
}
private JmsTemplate jmsTemplate;
/**
* @param jmsTemplate the jmsTemplate to set
*/
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
}
测试文件:
[java] viewplaincopy
<pre name="code" class="java">package com.activemq;
import javax.jms.JMSException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestActiveMQ {
static String context = null;
static ApplicationContext applicationContext;
static {
context = "applicationContext.xml";
}
public static void main(String[] arg) {
System.out.println("start---");
applicationContext = new ClassPathXmlApplicationContext(context);
IMqiqeSend demoSend = (IMqiqeSend) applicationContext.getBean("mqiqeSend");
IMqiqeReceiver mqiqeReceiver= (IMqiqeReceiver)applicationContext.getBean("mqiqeReceiver");
System.out.println(demoSend);
demoSend.send("hello,world!");
System.out.println("send Message:hello,world!");
try {
System.out.println(mqiqeReceiver.reveiver());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("end");
}
}
</pre><br>
<pre></pre>
<br>
<br>
<br>
<span style="white-space:pre"></span>
<pre name="code" class="java"></pre>
<br>
<br>
<span style="color:#ff0000">(注:在运行之前要先运行ActiveMQ)</span>
相关文章推荐
- 不明觉厉的spring(7)---spring对远程服务的支持(对rmi和jms支持)
- Spring 对JMS的支持
- Spring 对 JMS的支持
- Spring - Java/J2EE Application Framework 应用框架 第 14 章 JMS支持
- Spring 对JMS的支持
- Spring 中对JMS的支持如何实现?
- spring对jboss与weblogic的jms的支持不一样
- spring 对JMS-RPC的支持
- Spring 对JMS的支持
- Spring对JMS的支持
- ActiveMQ4.1+Spring2.0的POJO JMS方案(上)
- Spring and OSGi,spring2.1将支持OSGI
- Spring+Struts+Hibernate+Buffalo构建支持Ajax的轻量级J2EE框架
- Spring 系列,第 4 部分: Spring JMS 消息处理 1-2-3
- spring对二进制文件(CLOB与BLOB型)的支持
- 用Spring JMS使异步消息变得简单
- 扩展 Spring 的 JMX 支持
- 用Spring快速开发jms应用(JBOSS服务器)
- Spring对JNDI的支持的配置实例
- 使用Spring JMS轻松实现异步消息传递