Spring + JMS + ActiveMQ实现简单的消息队列(监听器异步实现)
首先声明:以下内容均是在网上找别人的博客综合学习而成的,可能会发现某些代码与其他博主的相同,由于参考的文章比较多,这里对你们表示感谢,就不一一列举,如果有侵权的地方,请通知我,我可以把该文章删除。
1、jms-xml Spring配置文件
- <?xml version="1.0" encoding="UTF-8"?>
- <beans
- xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
- <bean id = "connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
- <property name = "brokerURL" value = "tcp://localhost:61616"/>
- </bean>
- <bean id = "topicDestination" class="org.apache.activemq.command.ActiveMQTopic"
- autowire="constructor">
- <constructor-arg value="com.spring.xkey.jms.topic"/>
- </bean>
- <bean id="sendMessage" class="com.spring.xkey.jms.SendMessage">
- <property name="username" value="xkey"/>
- <property name="password" value="1234567890"/>
- </bean>
- <bean id = "jmsMessageConverter" class="com.spring.xkey.jms.JmsMessageConverter">
- <property name="sendMessage" ref="sendMessage"/>
- </bean>
- <!-- 创建JMS发送信息的模板的对象 -->
- <bean id = "jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
- <property name="connectionFactory" ref="connectionFactory"/>
- <!--property name="defaultDestination" ref="topicDestination"/-->
- <property name="receiveTimeout" value="6000"/>
- <property name="messageConverter" ref="jmsMessageConverter"/>
- </bean>
- <bean id = "jmsMessageListener" class="com.spring.xkey.jms.JmsMessageListener">
- </bean>
- <bean id = "publisher" class="com.spring.xkey.jms.Publisher">
- <property name="jmsTemplate" ref="jmsTemplate"/>
- <property name="destinations" ref="topicDestination" />
- <property name="sendMessage" ref="sendMessage"/>
- </bean>
- <bean id = "consumer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
- <property name="connectionFactory" ref="connectionFactory"/>
- <property name="destination" ref="topicDestination" />
- <property name="messageListener" ref="jmsMessageListener" />
- </bean>
- </beans>
2、Listener代码
- package com.spring.xkey.jms;
- import java.util.Date;
- import javax.jms.JMSException;
- import javax.jms.Message;
- import javax.jms.MessageListener;
- import org.apache.activemq.command.ActiveMQMapMessage;
- public class JmsMessageListener implements MessageListener {
- public void onMessage(Message message) {
- ActiveMQMapMessage msg = null;
- //System.out.println("ONMessage-----------------" + message.toString());
- try {
- if (message instanceof ActiveMQMapMessage) {
- msg = (ActiveMQMapMessage) message;
- String username = msg.getString("username");
- String password = msg.getString("password");
- System.out.println("Message::: "+username+", "+password);
- // msg = (ActiveMQMapMessage) message;
- // String sentDate = msg.getString("date");
- // String reMessage = msg.getString("message");
- // int sentCount = msg.getInt("count");
- // System.out
- // .println("-------------New Message Arrival-----------"
- // + new Date());
- // System.out.println("It's " + sentCount + " time From Darcy: "
- // + reMessage + " ---Send time :" + sentDate);
- }
- } catch (JMSException e) {
- System.out.println("JMSException in onMessage(): " + e.toString());
- } catch (Throwable t) {
- System.out.println("Exception in onMessage():" + t.getMessage());
- }
- }
- }
3、Converter代码
- package com.spring.xkey.jms;
- import javax.jms.JMSException;
- import javax.jms.MapMessage;
- import javax.jms.Message;
- import javax.jms.Session;
- import org.springframework.jms.support.converter.MessageConversionException;
- import org.springframework.jms.support.converter.MessageConverter;
- public class JmsMessageConverter implements MessageConverter{
- private SendMessage sendMessage;
- public void setSendMessage(SendMessage sendMsg){
- this.sendMessage = sendMsg;
- }
- public Object fromMessage(Message message) throws JMSException,
- MessageConversionException {
- // TODO Auto-generated method stub
- MapMessage mapmessage= (MapMessage)message;
- this.sendMessage.setUsername(mapmessage.getString("username"));
- this.sendMessage.setPassword(mapmessage.getString("password"));
- System.out.println("First");
- return sendMessage;
- }
- public Message toMessage(Object arg0, Session session) throws JMSException,
- MessageConversionException {
- // TODO Auto-generated method stub
- this.sendMessage = (SendMessage)arg0;
- MapMessage mapmessage= (MapMessage) session.createMapMessage();
- mapmessage.setString("username", this.sendMessage.getUsername());
- mapmessage.setString("password", this.sendMessage.getPassword());
- System.out.println("Second");
- return mapmessage;
- }
- }
4、Publisher代码
- package com.spring.xkey.jms;
- import java.util.Scanner;
- import javax.jms.Destination;
- import org.springframework.jms.core.JmsTemplate;
- public class Publisher {
- private JmsTemplate template;
- private Destination[] destinations;
- private SendMessage sendMessage;
- public void chart()
- {
- boolean chart = true;
- int count = 0;
- while(chart)
- {
- count ++;
- Scanner cin=new Scanner(System.in);
- System.out.println("输入聊天内容,输入N停止聊天");
- String text=cin.nextLine();
- if(text.equals("N"))
- {
- chart = false;
- }
- System.out.println("我:"+text);
- sendChartMessage(count,text);
- }
- }
- public void sendMsgCon(){
- Scanner cin=new Scanner(System.in);
- String username = cin.nextLine();
- String password = cin.nextLine();
- this.sendMessage.setUsername(username);
- this.sendMessage.setPassword(password);
- sendConvertor(this.sendMessage);
- }
- public void sendConvertor(SendMessage sendMsg){
- template.convertAndSend(destinations[0],sendMsg);
- }
- protected void sendChartMessage(int count , String strMessage)
- {
- MyMessageCreator creator = new MyMessageCreator(count,strMessage);
- template.send(destinations[0], creator);
- }
- public JmsTemplate getJmsTemplate() {
- return template;
- }
- public void setJmsTemplate(JmsTemplate template) {
- this.template = template;
- }
- public Destination[] getDestinations() {
- return destinations;
- }
- public void setDestinations(Destination[] destinations) {
- this.destinations = destinations;
- }
- public void setSendMessage(SendMessage sendMsg){
- this.sendMessage = sendMsg;
- }
- public SendMessage getSendMessage(){
- return this.sendMessage;
- }
- }
5、SendMessage代码
- package com.spring.xkey.jms;
- public class SendMessage {
- private String username;
- private String password;
- public void setUsername(String user){
- this.username = user;
- }
- public void setPassword(String pass){
- this.password = pass;
- }
- public String getUsername(){
- return this.username;
- }
- public String getPassword(){
- return this.password;
- }
- }
6、Test类
- package com.spring.xkey.jms;
- import javax.jms.JMSException;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import org.springframework.jms.listener.DefaultMessageListenerContainer;
- public class Test {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- ApplicationContext context =
- new ClassPathXmlApplicationContext("jms.xml");
- /**Sender sender = (Sender)context.getBean("sender");
- sender.SendInfo();
- Receiver receiver = (Receiver)context.getBean("receiver");
- try {
- System.out.println(receiver.receiverInfo());
- } catch (JMSException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }*/
- Publisher pub = (Publisher)context.getBean("publisher");
- DefaultMessageListenerContainer consumer =
- (DefaultMessageListenerContainer)context.getBean("consumer");
- consumer.start();
- pub.sendMsgCon();
- //pub.chart();
- }
- }
Spring + JMS + ActiveMQ实现简单的消息队列(监听器异步实现)的更多相关文章
- 深入剖析 RabbitMQ —— Spring 框架下实现 AMQP 高级消息队列协议
前言 消息队列在现今数据量超大,并发量超高的系统中是十分常用的.本文将会对现时最常用到的几款消息队列框架 ActiveMQ.RabbitMQ.Kafka 进行分析对比.详细介绍 RabbitMQ 在 ...
- Spring JMS ActiveMQ整合(转)
转载自:http://my.oschina.net/xiaoxishan/blog/381209#comment-list ActiveMQ学习笔记(四)http://my.oschina.net/x ...
- Java编程的逻辑 (61) - 内存映射文件及其应用 - 实现一个简单的消息队列
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- SpringBoot使用JMS(activeMQ)的两种方式 队列消息、订阅/发布
刚好最近同事问我activemq的问题刚接触所以分不清,前段时间刚好项目中有用到,所以稍微整理了一下,仅用于使用 1.下载ActiveMQ 地址:http://activemq.apache.org/ ...
- spring与activemq(三种消息监听方式)
1.3 消息监听器MessageListener 在Spring整合JMS的应用中我们在定义消息监听器的时候一共可以定义三种类型的消息监听器,分别是MessageListener.Sessio ...
- Spring Boot:使用Rabbit MQ消息队列
综合概述 消息队列 消息队列就是一个消息的链表,可以把消息看作一个记录,具有特定的格式以及特定的优先级.对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息,对消息队列有读权限的进程则可以 ...
- MQ选型对比ActiveMQ,RabbitMQ,RocketMQ,Kafka 消息队列框架选哪个?
最近研究消息队列,发现好几个框架,搜罗一下进行对比,说一下选型说明: 1)中小型软件公司,建议选RabbitMQ.一方面,erlang语言天生具备高并发的特性,而且他的管理界面用起来十分方便.不考虑r ...
- Spring AMQP + Rabbit 配置多数据源消息队列
一般在稍微大一点的项目中,需要配置多个数据库数据源,最简单的方式是用 Spring 来实现,只需要继承 AbstractRoutingDataSource 类,实现 determineCurrentL ...
- 17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列
原文:https://mp.weixin.qq.com/s/lpsQ3dEZHma9H0V_mcxuTw 一.资料文档 二.开发语言 三.支持的协议 四.消息存储 五.消息事务 六.负载均衡 七.集群 ...
随机推荐
- unity--IOC框架资料整理
今天在网上找了一些unity资料研究,出了好多问题,编译无法通过,经人指点总算成功编译运行,做个笔记,整理如下: 一.下载unity: 二.在项目中添加Microsoft.Practices.Unit ...
- XAML 概述三
通过对前面2节对XAML的介绍,我们对XAML有了一定的认识.这一节我们来简单了解一下部分XAML命名空间(x:)语言功能. x命名空间映射的是http://schemas.microsoft.com ...
- with check option(视图 )
建立视图的时候使用WITH CHECK OPTION 与不使用的区别 WITH CHECK OPTION insert update delete 使用with check option 保证ins ...
- DBus接口文档
gitgit.projects.genivi.org / ipc / common-api-dbus-tools.git / blob? search: re 0544e985b6e4a6c83ddf ...
- c++数组-矩阵的转置
#include <iostream> using namespace std; int main(){ ][]={{,,},{,,}}; ][]; ;j<;j++){ ;i< ...
- 敏捷开发之道(二)极限编程XP
上次的博文敏捷开发之道(一)敏捷开发宣言中,我们介绍了一下敏捷开发宣言,在其中,我们了解到了关于敏捷开发的几个重要的价值观.今天我们来了解一个敏捷开发的方法--极限编程XP 1.介绍 极限编程(eXt ...
- left join 过滤条件写在on后面和写在where 后面的区别
create table t1(id int, feild int);insert into t1 values(1 , 1);insert into t1 values(1 , 2);insert ...
- 关于const
1.顶层const和底层const const修饰的对象本身是常量,则为顶层const,否则为底层const 如: const int a=10; //a是int常量,顶层const i ...
- RUP(Rational Unified Process)
RUP Rational Unified Process 目前阶段在学习UML,怎么会写RUP呢?学习UML是为了更好的把系统搭建好,RUP也是一样,为系统服务! 软件危机 美国国家总审计局,在198 ...
- 【个人笔记】003-PHP基础-01-PHP快速入门-03-PHP环境搭建
003-PHP基础-01-PHP快速入门 03-PHP环境搭建 1.客户端(浏览器) IE FireFox CHROME Opera Safari 2.服务器 是运行网站的基本 是放置程序代码的地方 ...