spring-jms(activemq实现)使用queue发送消息简单例子
来源:互联网 发布:淘宝网广场舞服装套装 编辑:程序博客网 时间:2024/04/28 15:52
activemq实现了jms规范,使用jms发送消息,从消息的一端发送到另一端,当加入了activemq作为中间作,我们可以使用异步的方式发送消息.大概过程:发送者与activemq建立连接,先发送消息到activemq.然后,接收者与activemq建立连接,从activemq取回消息.发送者发消息的时候不依赖接收者,接收者接收消息的时候不依赖发送者,两个过程可以不同步进行.达到应用解耦的作用.如果接收者不去取消息,消息也没过期,那么消息会一直驻留在activemq这个中间件.
下面只是一个简单例子.接收者和发送者,几乎同时与activemq建立连接,接收者建立起监听,发送者一发送消息,接收者就马上接收到消息.
一.注册Connection Factory Bean.
三.创建Consumer.
1.注册MessageListener实现Bean.
其中ExamQueueListener.java如下:
2.使用connection,destination和listener创建consumer.
四.创建Producer.
1.使用spring的JmsTemplate.
五.单元测试(测试前不要忘了先启动activemq).ExamPublisherTest.java内容如下:
六.应用到Web
1.JmsController.java内容如下:
package com.exam.web;
import com.exam.jms.ExamPublisher;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
@Controller
public class JmsController {
@Resource
private ExamPublisher examPublisher;
@RequestMapping("/test")
public String test(String message){
examPublisher.sendMessage(message);
return "redirect:/index.html";
}
}
2.index.html内容如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="test.do">
<input type="text" name="message" value="test"/>
<input type="submit" value="submit"/>
</form>
</body>
</html>
3.启动jetty,在浏览器打开index.html页面测试(测试前不要忘了先启动activemq).
可能遇到的问题.当停止jetty或tomcat之后,activemq会报下面的警告.警告的原因估计是:客户端(包括Producer和Consumer)没有正确断开连接,上面的例子就是从PooledConnectionFactory生成多少个活跃的连接,就会有多少个警告,(PooledConnectionFactory的默认最大连接数是1,当然注册Bean时可以改).可能是直接断了进程,没有调用stop方法,从输出的警告,我认为问题不大.
下面只是一个简单例子.接收者和发送者,几乎同时与activemq建立连接,接收者建立起监听,发送者一发送消息,接收者就马上接收到消息.
一.注册Connection Factory Bean.
@Bean(destroyMethod = "stop") public PooledConnectionFactory pooledConnectionFactory(){ ActiveMQConnectionFactory activeMQConnectionFactory=new ActiveMQConnectionFactory("admin","admin","tcp://localhost:61616"); return new PooledConnectionFactory(activeMQConnectionFactory); }
二.注册Destination Bean(使用队列发送消息).
@Bean public ActiveMQQueue activeMQQueue(){ return new ActiveMQQueue("ExamQueueName"); }
三.创建Consumer.
1.注册MessageListener实现Bean.
@Bean public ExamQueueListener examQueueListener(){ return new ExamQueueListener(); }
其中ExamQueueListener.java如下:
package com.exam.jms;import javax.jms.Message;import javax.jms.MessageListener;/** * Created by nil on 2014/8/26. */public class ExamQueueListener implements MessageListener { @Override public void onMessage(Message message) { System.out.println(message); }}
2.使用connection,destination和listener创建consumer.
@Bean public DefaultMessageListenerContainer defaultMessageListenerContainer(){ DefaultMessageListenerContainer defaultMessageListenerContainer=new DefaultMessageListenerContainer(); defaultMessageListenerContainer.setConnectionFactory(pooledConnectionFactory()); defaultMessageListenerContainer.setDestination(activeMQQueue()); defaultMessageListenerContainer.setMessageListener(examQueueListener()); return defaultMessageListenerContainer; }
四.创建Producer.
1.使用spring的JmsTemplate.
@Bean public JmsTemplate jmsTemplate(){ return new JmsTemplate(pooledConnectionFactory()); }2.将destination和jmsTemplate注入到examPublisher来注册Producer Bean.
@Bean public ExamPublisher examPublisher(){ return new ExamPublisher(jmsTemplate(),activeMQQueue()); }其中,ExamPublisher.java内容如下:
package com.exam.jms;import org.springframework.jms.core.JmsTemplate;import org.springframework.jms.core.MessageCreator;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.Session;import java.util.Random;/** * Created by nil on 2014/8/26. */public class ExamPublisher { private JmsTemplate jmsTemplate; private Destination destination; public ExamPublisher(){} public ExamPublisher(JmsTemplate jmsTemplate,Destination destination){ this.jmsTemplate = jmsTemplate; this.destination = destination; } public void setJmsTemplate(JmsTemplate jmsTemplate) { this.jmsTemplate = jmsTemplate; } public void setDestination(Destination destination) { this.destination = destination; } public void sendMessage(final String msg){ jmsTemplate.send(destination,new MessageCreator() { @Override public Message createMessage(Session session) throws JMSException { return session.createTextMessage("test message " + msg); } }); }}
五.单元测试(测试前不要忘了先启动activemq).ExamPublisherTest.java内容如下:
package com.exam.jms;import com.exam.config.AppConfig;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.springframework.test.context.support.AnnotationConfigContextLoader;import javax.annotation.Resource;/** * Created by nil on 2014/8/26. */@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(loader=AnnotationConfigContextLoader.class,classes={AppConfig.class})public class ExamPublisherTest { @Resource private ExamPublisher examPublisher; @Test public void testSendMessage(){ examPublisher.sendMessage("x123x"); }}
六.应用到Web
1.JmsController.java内容如下:
package com.exam.web;
import com.exam.jms.ExamPublisher;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
@Controller
public class JmsController {
@Resource
private ExamPublisher examPublisher;
@RequestMapping("/test")
public String test(String message){
examPublisher.sendMessage(message);
return "redirect:/index.html";
}
}
2.index.html内容如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="test.do">
<input type="text" name="message" value="test"/>
<input type="submit" value="submit"/>
</form>
</body>
</html>
3.启动jetty,在浏览器打开index.html页面测试(测试前不要忘了先启动activemq).
可能遇到的问题.当停止jetty或tomcat之后,activemq会报下面的警告.警告的原因估计是:客户端(包括Producer和Consumer)没有正确断开连接,上面的例子就是从PooledConnectionFactory生成多少个活跃的连接,就会有多少个警告,(PooledConnectionFactory的默认最大连接数是1,当然注册Bean时可以改).可能是直接断了进程,没有调用stop方法,从输出的警告,我认为问题不大.
WARN | Transport Connection to: tcp://127.0.0.1:65279 failed: java.net.SocketException: Connection reset
源码:http://download.csdn.net/detail/xiejx618/7822573
0 1
- spring-jms(activemq实现)使用queue发送消息简单例子
- Spring + ActiveMQ实现jms发送消息
- Spring + ActiveMQ实现jms发送消息
- 使用JMS发送消息--ActiveMQ
- Spring+JMS+使用JMS+ActiveMQ中间件+实现简单聊天功能的小例子
- Spring + ActiveMQ兑现jms发送消息
- Spring + ActiveMQ兑现jms发送消息
- ActiveMQ发送queue消息
- Spring+JMS+ActiveMQ+Tomcat实现消息服务
- Spring+JMS+ActiveMQ+Tomcat实现消息服务
- Blazeds+JMS(ActiveMQ)+Spring实现消息
- Spring+JMS+ActiveMQ+Tomcat实现消息服务
- Spring+JMS+ActiveMQ+Tomcat实现消息服务
- Spring+JMS+ActiveMQ+Tomcat实现消息服务
- JMS之Spring +activeMQ实现消息队列
- Spring+JMS+ActiveMQ+Tomcat实现消息服务
- Spring+JMS+ActiveMQ+Tomcat实现消息服务
- Spring JMS ActiveMQ Queue Example
- 纯javascript实现文字、图片无限滚动效果
- Python的日志系统
- Drools入门Helloworld
- 客户端测量输出文章的宽高方案
- Oracle清除表的高水位线
- spring-jms(activemq实现)使用queue发送消息简单例子
- 对自己之前做过项目所做的一些笔记
- 软件开发:个人与团队是永远的核心
- 服务器,tomcat,网页请求错误400,The request sent by the client was syntactically incorrect的问题
- Linux下svn命令行工具使用简介
- VBS基础篇 - 对象(10) - Wscript对象
- JS生成子节点并且附加ID,name,然后提交表单;
- Houdini下如何安装Arnold
- PHP将XML数据转成数组 例子详细介绍