您的位置:首页 > 编程语言 > Java开发

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] view
plaincopy

   <!-- 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] view
plaincopy

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] view
plaincopy

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] view
plaincopy

<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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: