JMS+spring中的简单应用(demo)

来源:互联网 发布:门窗软件 编辑:程序博客网 时间:2024/05/16 06:54

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配置文件:

   <!-- 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>


接口文件:

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);}


类文件:

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 {@Overridepublic 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;}}


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 {@Overridepublic 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;}}


测试文件:

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 blocke.printStackTrace();}System.out.println("end");}}






(注:在运行之前要先运行ActiveMQ)
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 做精细动作手抖怎么办 15个月宝宝缺锌怎么办 八个月宝宝有蛔虫怎么办 两个月婴儿缺锌怎么办 婴儿天热出汗多尿少怎么办 婴儿5个月不主动抓东西怎么办 打疫苗吃了辣怎么办 四个月宝宝枕秃怎么办 四个月的孩子缺钙怎么办 小孩张牙齿会发烧怎么办 对节白蜡叶子干了怎么办 刷机字库坏了怎么办 魅蓝返回键失灵怎么办 牙蛀严重且牙根松动怎么办 蛀牙伤到神经了怎么办 给客户发错邮件怎么办外贸 cf没有枪声和脚步声怎么办 穿越火线fps太低怎么办 win10玩cf没有声音怎么办 儿子死了欠的钱怎么办 儿子欠银行的钱怎么办 惹了社会上的混混怎么办 我是五年级惹上混混怎么办 孩子挨欺负家长怎么办幼儿园 孩子被同学欺负不敢上学怎么办 孩子被欺负不敢还手怎么办 2个月的婴儿内热怎么办 孩子把别人打了怎么办 学生在学校被打怎么办 妈和老丈人搞外遇怎么办? 丈人住在双方出资房中怎么办 金木水火土缺水怎么办? 练太极注意不集中怎么办 白色裙子被染色了怎么办 两边的头发向外翘怎么办 感冒的前兆来了怎么办 压腿把筋拉伤了怎么办 压腿压不下去了怎么办 床的气压杆坏了怎么办 床打开压不下去怎么办 裤子大了怎么办小窍门