JMS-ActiveMQ学习-3 ActiveMQ与Spring集成

Spring下开发消息的发送和接收程序

点对点模式

一、创建生产者项目

1.创建maven项目

2.添加spring-jms、jms规范、activemq依赖

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.jms</groupId>
<artifactId>javax.jms-apis</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
<version>5.15.4</version>
</dependency>
</dependencies>

3.创建applicationContext.xml和applicationContext-jms.xml

applicationContext.xml中的配置内容:

<import resource="applicationContext-jms.xml"/>

applicationContext-jms.xml中的配置内容:

<!--创建一个连接工厂-->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<!--连接地址-->
<property name="brokerURL" value="tcp://localhost:61616"/>
<property name="userName" value="admin"/>
<property name="password" value="admin"/>
</bean>
<!--jms的操作模板-->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<!--配置目的地-->
<property name="defaultDestinationName" value="myQueue"/>
</bean>

4.具体实现接口和类
1>创建dao层接口和类
public interface MessageDao {
public void sendMessage(String message);
}
@Repository
public class MessageDaoImpl implements MessageDao {
@Autowired
private JmsTemplate jmsTemplate;
public void sendMessage(final String message) {
System.out.println("send message start");
jmsTemplate.send(new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(message);
}
});
}
}
2>创建service层接口和类
public interface MessageService {
public void sendMessage(String message);
}
@Service
public class MessageServiceImpl implements MessageService {
@Autowired
private MessageDao messageDao;
public void sendMessage(String message) {
messageDao.sendMessage(message);
}
}
3>创建Test类
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
MessageService messageService = context.getBean("messageServiceImpl",MessageServiceImpl.class);
messageService.sendMessage("发送消息了");
}
}

4>applicationContext.xml文件中添加
<context:component-scan base-package="com.test.activemq"/>

二、创建消费者项目

1.创建maven项目

2.添加spring-jms、jms规范、activemq依赖

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.jms</groupId>
<artifactId>javax.jms-apis</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
<version>5.15.4</version>
</dependency>
</dependencies>

3.创建applicationContext.xml和applicationContext-jms.xml

applicationContext.xml中的配置内容:

<import resource="applicationContext-jms.xml"/>

applicationContext-jms.xml中的配置内容:

<!--创建一个连接工厂-->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<!--连接地址-->
<property name="brokerURL" value="tcp://localhost:61616"/>
<property name="userName" value="admin"/>
<property name="password" value="admin"/>
</bean>
<!--jms的操作模板-->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<!--配置目的地-->
<property name="defaultDestinationName" value="myQueue"/>
</bean>

4.具体实现接口和类
同步方式接收:
1>创建dao层接口和类
public interface MessageDao {
public String receiveMessage();
}
@Repository
public class MessageDaoImpl implements MessageDao {
@Autowired
private JmsTemplate jmsTemplate;
public String receiveMessage(){
String msg = "";
Message message = jmsTemplate.receive();
if (message instanceof TextMessage){
try {
msg = ((TextMessage) message).getText();
} catch (JMSException e) {
e.printStackTrace();
}
}
return msg;
}
}

2>创建service层接口和类
public interface MessageService {
public String receiveMessage();
}
@Service
public class MessageServiceImpl implements MessageService {
@Autowired
private MessageDao messageDao;
public String receiveMessage() {
return messageDao.receiveMessage();
}
}

3>创建Test类
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
MessageService messageService = context.getBean("messageServiceImpl",MessageServiceImpl.class);
String message = messageService.receiveMessage();
System.out.println("接收到的消息是:"+message);
}
}
4>applicationContext.xml文件中添加
<context:component-scan base-package="com.test.jms"/>
三、消费者点对点模式-异步接收
需要使用监听器
1>创建maven项目
2>添加依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.jms</groupId>
<artifactId>javax.jms-apis</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
<version>5.15.4</version>
</dependency>
</dependencies>
3>创建applicationContext.xml和applicationContext-jms.xml
<!--创建一个连接工厂-->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<!--连接地址-->
<property name="brokerURL" value="tcp://localhost:61616"/>
<property name="userName" value="admin"/>
<property name="password" value="admin"/>
</bean>
<!--配置一个spring的jms消息监听器-->
<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="DestinationName" value="springQueue"/>
<property name="messageListener" ref="myMessageListener"/>

</bean>
<bean id="myMessageListener" class="com.test.jms.listener.MyMessageListener"/>
4>创建MyMessageListener类
/**
* 实现消息监听器
*/
public class MyMessageListener implements MessageListener {
/**
* 当消息监听器监听到消息后,会自动回调该onMessage方法
* 并且把监听到的消息回传给该方法
* @param message
*/
public void onMessage(Message message) {
if (message instanceof TextMessage){
try {
System.out.println("接收到的消息是:"+((TextMessage) message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
5>创建Test测试类
public class Test {
public static void main(String[] args) {
new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
}
}
启动发现可以收到消息 console控制台打印出来的消息是: 接收到的消息是:发送消息了

发布订阅模式

同步和异步接收只是针对消费者而言的

发布订阅模式-同步接收

一、创建生产者

生产者和消费者的都配置成发布订阅模式

同步接收使用receive()接收

创建生产者需要在点对点模式的基础上在applicationContext-jms.xml文件中添加:

<!--创建一个连接工厂-->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<!--连接地址-->
<property name="brokerURL" value="tcp://localhost:61616"/>
<property name="userName" value="admin"/>
<property name="password" value="admin"/>
</bean>
<!--jms的操作模板-->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<!--配置目的地-->
<property name="defaultDestinationName" value="springTopic"/>
<!--pubSubDomain这个property对应模式true代表发布订阅,false代表点对点,默认是false,-->
<property name="pubSubDomain" value="true"/>
</bean>
同理,消费者也是在点对点模式的基础上做上述配置,后消费者先启动,再启动生产者

发布订阅模式-异步接收

 在异步基础上添加发布订阅的配置(生产者和消费者都需要配置)

<!--创建一个连接工厂-->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<!--连接地址-->
<property name="brokerURL" value="tcp://localhost:61616"/>
<property name="userName" value="admin"/>
<property name="password" value="admin"/>
</bean>
<!--jms的操作模板-->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<!--配置目的地-->
<property name="defaultDestinationName" value="springTopic"/>
<property name="pubSubDomain" value="true"/>
</bean>

 

 






转载于:https://www.cnblogs.com/healthinfo/p/9567362.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396995.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

看libevent所遇到的英语生词

libevent – an event notification library The libevent API &#xff08;libevent应用程序&#xff09;provides a mechanism&#xff08;机制&#xff09; to execute&#xff08;执行&#xff09; a callback function&#xff08;回调函数&#xff09; when a specific&a…

java中迭代器要导包吗_java 中迭代器的使用方法详解

java 中迭代器的使用方法详解前言&#xff1a;迭代器模式将一个集合给封装起来&#xff0c;主要是为用户提供了一种遍历其内部元素的方式。迭代器模式有两个优点&#xff1a;①提供给用户一个遍历的方式&#xff0c;而没有暴露其内部实现细节&#xff1b;②把元素之间游走的责任…

android socket 长连接_TCP/IP,http,socket,长连接,短连接

点击上方蓝色字体&#xff0c;选择“标星公众号”优质文章&#xff0c;第一时间送达上一篇&#xff1a;这300G的Java资料是我师傅当年给我的&#xff0c;免费分享给大家下一篇&#xff1a;这200G的Java实战资料是我师傅当年教我的第二招作者 | ksfzhaohui来源 | my.oschina.net…

二、Python安装扩展库

第一步:推荐easy_install工具 下载地址:https://pypi.python.org/pypi/setuptools 下载"ez_setup.py"文件; 通过运行cmd命令找到ez_setup.py文件所在目录,通过命令[python ez_setup.py]执行安装easy_install 安装成功截图 第二步:安装扩展酷 例如安装"suds"…

ORACLE 10.2.01升级10.2.05 for windows 详细文档

最近要做一个数据库的升级工作&#xff0c;提前在自己的PC机上练习了一下&#xff0c;这种文档在网上很多&#xff0c;但是大多都是使用命令编辑脚本&#xff0c;其实数据库还有一个DBUA的升级工具可以使用&#xff0c;使升级工作方便了很多。 OS环境&#xff1a;windows XP 32…

php 导出mysql 结构_导出结构和数据(如phpmyadmin)

在这里,您可以找到一个全面的解决方案来转储MySQL结构和数据,比如在PMA中(不使用exec、passthru等):它是Dszymczuk项目的一个分支,有我的增强功能。用法很简单//MySQL connection parameters$dbhost localhost;$dbuser dbuser;$dbpsw pass;$dbname dbname;//Connects to my…

tableViewCell的操作

在iOS的开发过程中&#xff0c;tableView的使用永远都是最常用的控件。今天学习了一下tableViewCell的操作。代码并不是很复杂&#xff0c;如果有OC开发经验的人&#xff0c;应该很容易看懂的。 class ViewController: UIViewController ,UITableViewDelegate, UITableViewData…

stm32正交编码器 原理图_恶劣环境下应用的电感式增量编码器和绝对编码器

编码器可分为两种基本类型 - 增量编码器和绝对编码器。增量编码器的显着特征是它报告角度的变化。换句话说&#xff0c;当增量编码器通电时&#xff0c;它不会报告其角位置&#xff0c;直到它具有测量的参考点。绝对编码器明确地在比例或范围内报告其位置。换句话说&#xff0c…

【SqlServer】Sqlserver中的DOS命令操作

输入osql ?查看是否支持当前版本&#xff0c;如果是SQL Server 2005以上用Sqlcmd , 以下用Osql连接数据库&#xff08;a&#xff09;Osql -S localhost -U username -P password(SQL Server身份验证&#xff0c;需要用户民和密码)&#xff08;b&#xff09;Osql -S localhos…

微信小程序内训笔记

2016年9月22日凌晨微信官方正式宣布“小程序”开始内测&#xff0c;有“微信之父”之称、腾讯集团高级执行副总裁张小龙在2016年末对外宣布“小程序“应用将于2017年1月9日正式推出 这一次微信还是按照惯例&#xff0c;通过机器跑出的数据&#xff0c;首先将“小程序”开放给了…

python基础代码的含义_Python基础学习篇

原标题&#xff1a;Python基础学习篇 1、编码 默认情况下&#xff0c;Python 3 源码文件以 UTF-8 编码&#xff0c;所有字符串都是unicode 字符串。 当然你也可以为源码文件指定不同的编码&#xff1a;# -*- coding: cp-1252 -*- 2、标识符 第一个字符必须是字母表中字母或下划…

java面向对象super_【JavaSE】面向对象之super、final

一、super关键字它是一个指代变量&#xff0c;用于在子类中指代父类对象。1.作用指代父类对象区分子父类同名的成员变量&#xff0c;区分父类中成员变量和子类中同名的局部变量2.使用与this相同&#xff0c;调用父类成员变量和成员方法&#xff1a;super.xx super.xxx()调用父类…

Week_1_Physical Electronics and Semiconductors

Semiconductors Fundamentals Type of solids 转载于:https://www.cnblogs.com/ronnielee/p/9579783.html

【Linux高频命令专题(23)】tar

概述 通过SSH访问服务器&#xff0c;难免会要用到压缩&#xff0c;解压缩&#xff0c;打包&#xff0c;解包等&#xff0c;这时候tar命令就是是必不可少的一个功能强大的工具。linux中最流行的tar是麻雀虽小&#xff0c;五脏俱全&#xff0c;功能强大。 tar命令可以为linux的文…

2. Add Two Numbers

直接用一个carry记录进位就可以 1 //NEW2 class Solution {3 public ListNode addTwoNumbers(ListNode l1, ListNode l2) {4 ListNode root new ListNode(0);5 return addTwoNumbers(l1, l2, root);6 }7 public ListNode addTwoNumbers(ListNode …

安装Windows更新程序遇到错误:0x80070422

看看服务那里 windows update服务是不是被禁用了&#xff1f; 还有一个问题可能是由于Windows Modules Installer被禁用了。

谈谈对python的理解_浅谈对python pandas中 inplace 参数的理解

这篇文章主要介绍了对python pandas中 inplace 参数的理解&#xff0c;具有很好的参考价值&#xff0c;希望对大家有所帮助。一起跟随小编过来看看吧 pandas 中 inplace 参数在很多函数中都会有&#xff0c;它的作用是&#xff1a;是否在原对象基础上进行修改 inplace True&am…

java中 hashset_Java中的HashSet

HashSet扩展AbstractSet并实现Set接口。它创建一个使用哈希表进行存储的集合。哈希表通过使用称为哈希的机制来存储信息。在散列中&#xff0c;键的信息内容用于确定唯一值&#xff0c;称为其散列码。然后&#xff0c;将哈希码用作存储与键关联的数据的索引。键到其哈希码的转换…

mac下的svn服务器建立

MAC下的SVN服务器建立: from : http://blog.csdn.net/q199109106q/article/details/8655204 在Windows环境中&#xff0c;我们一般使用TortoiseSVN来搭建svn环境。在Mac环境下&#xff0c;由于Mac自带了svn的服务器端和客户端功能&#xff0c;所以我们可以在不装任何第三方软件…

SQL手册

一.SQL简介 二.SQL数据类型 三.SQL语法 四.SQL SELECT语句 五.SQL INSERT语句 六.SQL UPDATE语句 七.SQL DELETE语句 八.SQL DROP语句 九.SQL CREDTE语句 十.SQL ALTER 语句总结 十一.SQL事务 十二.函数总结 十三.数据库其他操作 十四.MySQL 、SQL MS Access、和 SQL Server 数…