Spring整合ActiveMQ,实现队列主题消息生产消费
1、引入依赖
pom.xml
1 <!-- activemq -->
2 <dependency>
3 <groupId>org.springframework</groupId>
4 <artifactId>spring-jms</artifactId>
5 <version>4.3.23.RELEASE</version>
6 </dependency>
7
8 <dependency>
9 <groupId>org.apache.activemq</groupId>
10 <artifactId>activemq-pool</artifactId>
11 <version>5.15.9</version>
12 </dependency>
2、配置属性文件(配置文件也要加入到spring配置管理中)
activemq.properties
activemq_url=tcp://192.168.0.102:61616
activemq_username=admin
activemq_password=admin
3、在com.activemq包下增加监听类
MyMessageListener.java (队列、主题消费者接收代码)
package com.activemq; import org.springframework.stereotype.Component; import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage; /**
* 自定义监听类
* 记得加上注解@Component
* @author 。
*/
@Component
public class MyMessageListener implements MessageListener {
@Override
public void onMessage(Message message) {
if (null!=message && message instanceof TextMessage){
TextMessage textMessage= (TextMessage) message;
try {
System.out.println(textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
4、编写配置文件(需要把该配置加入Spring管理中,这里不再说明)
spring-activemq.xml
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
"> <context:annotation-config/>
<!--扫描类所在位置-->
<context:component-scan base-package="com.activemq"/> <!-- 读取配置文件 -->
<bean id="propertyPlaceholderConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<array>
<!-- activemq.properties所在文件路径-->
<value>/WEB-INF/config/activemq.properties</value>
</array>
</property>
</bean> <!--配置生产者-->
<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
<property name="connectionFactory">
<!--真正可以产生Connection的ConnectionFactory,由对应的jms服务厂商提供-->
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="${activemq_url}"/>
<!--连接的账号密码,没有密码可以不写-->
<property name="userName" value="${activemq_username}"/>
<property name="password" value="${activemq_password}"/>
</bean>
</property>
<!--最大连接数-->
<property name="maxConnections" value="100"></property>
</bean> <!--这个是队列目的地,点对点的-->
<bean id="destinationQueue" class="org.apache.activemq.command.ActiveMQQueue">
<!--queue是对应名字,这里根据自己的填写-->
<constructor-arg index="0" value="queue"/>
</bean> <!--这个是主题-->
<bean id="destinationTopic" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg index="0" value="topic"/>
</bean> <!--Spring提供的JMS工具类,进行消息发送、接收-->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsFactory"/>
<!--
这里的值destinationQueue对应上面的<bean id="destinationQueue"
如果这里的值写 destinationQueue 表示是队列
如果这里的值写 destinationTopic 表示这个是主题
以上可以根据具体的需要更改
-->
<property name="defaultDestination" ref="destinationQueue"/>
<property name="messageConverter">
<!--消息类型的转换-->
<bean class="org.springframework.jms.support.converter.SimpleMessageConverter"/>
</property>
</bean> <!--配置监听程序,只需要启动生产者 消费者不用启动,自动会监听记录-->
<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsFactory"/>
<!--
这里的值destinationQueue对应上面的<bean id="destinationQueue"
如果这里的值写 destinationQueue 表示是队列消费监听
如果这里的值写 destinationTopic 表示这个是主题消费监听
以上可以根据具体的需要更改
-->
<property name="destination" ref="destinationQueue"/>
<!--myMessageListener是在上面配置的base-package="com.activemq" 包下的监听类-->
<property name="messageListener" ref="myMessageListener"/>
</bean> </beans>
3、队列、主题生产者生产代码 (不可直接使用,这是伪代码,需根据具体情况自行调用send()里面的 jmsTemplate.send 代码方法)
package com.queue.activemq; import org.springframework.jms.core.JmsTemplate;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext; import javax.jms.TextMessage; public class Produce { private JmsTemplate jmsTemplate; public void send() {
WebApplicationContext webctx = ContextLoader.getCurrentWebApplicationContext();
this.jmsTemplate = (JmsTemplate) webctx.getBean("jmsTemplate");
/*队列生产者*/
jmsTemplate.send(session1 -> {
TextMessage textMessage = session1.createTextMessage("发送的消息内容");
return textMessage;
});
} }
Spring整合ActiveMQ,实现队列主题消息生产消费的更多相关文章
- Spring整合ActiveMQ实现消息延迟投递和定时投递
linux(centos)系统安装activemq参考:https://www.cnblogs.com/pxblog/p/12222231.html 首先在ActiveMQ的安装路径 /conf/ac ...
- Spring整合ActiveMQ及多个Queue消息监听的配置
消息队列(MQ)越来越火,在java开发的项目也属于比较常见的技术,MQ的相关使用也成java开发人员必备的技能.笔者公司采用的MQ是ActiveMQ,且消息都是用的点对点的模式.本文记录了实 ...
- spring整合ActiveMq
spring整合ActiveMq: 1:依赖的jar包: 2:spring-activemq.xml 的配置: 代码: <?xml version="1.0" enco ...
- 【报错】spring整合activeMQ,pom.xml文件缺架包,启动报错:Caused by: java.lang.ClassNotFoundException: org.apache.xbean.spring.context.v2.XBeanNamespaceHandler
spring版本:4.3.13 ActiveMq版本:5.15 ======================================================== spring整合act ...
- Java消息队列-Spring整合ActiveMq
1.概述 首先和大家一起回顾一下Java 消息服务,在我之前的博客<Java消息队列-JMS概述>中,我为大家分析了: 消息服务:一个中间件,用于解决两个活多个程序之间的耦合,底层由Jav ...
- Spring整合ActiveMq消息队列
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久 ...
- spring整合activemq发送MQ消息[queue模式]实例
queue类型消息 pom依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</ ...
- spring 整合 ActiveMQ
1.1 JMS简介 JMS的全称是Java Message Service,即Java消息服务.它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息.把它应用到 ...
- Spring整合JMS(二)——三种消息监听器
原文地址:http://haohaoxuexi.iteye.com/blog/1893676 1.3 消息监听器MessageListener 在Spring整合JMS的应用中我们在定义消息监 ...
随机推荐
- Linux运维工程师面试题整理
1. Nginx 反向代理,负载均衡,动静分离,工作原理及优化nginx配置反向代理. vim Nginx.confServer模块中配置Listen 80Server_name ip;在server ...
- Golang gRPC调试工具
目录 Golang gRPC调试工具 1. 命令行工具 grpcurl 1.1 安装 1.2 验证 1.3 注册反射 1.4 使用示例 2. web调试工具grpcui 2.1 安装 2.2 验证 2 ...
- 数据分析体系 — 用户粘性的两个计算指标(DAU/MAU和月人均活跃天数)
很多运营都了解DAU(日活跃用户数)和MAU(月活跃用户数)的重要性,但在某些情况下这两个数值本身并不能反映出太多问题,这个时候就要引用到[DAU/MAU]的概念,即[日活/月活] 用户粘性的两个计算 ...
- mysql 中@ 和 @@的区别
@x 是 用户自定义的变量 (User variables are written as @var_name)@@x 是 global或session变量 (@@global @@session )@ ...
- 小程序https启用tls1.2
公司的web服务器是iis7,在开发微信小程序的时候,需要启用TLS1.2. 将下面的代码复制到文本,存为reg文档,双击搞定. Windows Registry Editor Version 5.0 ...
- 内网穿透—使用 frp 实现内外网互通
前言 什么是内网穿透? 内网穿透,又叫 NET 穿透,是计算机用语.用通俗的说法就是你家里的个人电脑,可以直接被外网的人访问.例如你在公司,不通过远程工具,直接也可以访问到家里的电脑(本文章特指 we ...
- 巩固javaweb的第二十三天
巩固内容: 调用验证方法 验证通常在表单提交之前进行,可以通过按钮的 onClick 事件,也可以通过 form 表单 的 onSubmit 事件来完成. 本章实例是通过 form 表单的 onSub ...
- Shell $()、${}、$[]、$(())
目录 Shell中的 $().${}.$[].$(()) $().${} 替换 ${} 变量内容的替换.删除.取代 数组 $[].$(()) 运算符 Shell中的 $().${}.$[].$(()) ...
- Linux学习 - 网络命令
一.write 1 功能 给指定在线用户发信息,以Ctrl + D保存结束 2 语法 write <用户名> [信息] 二.wall(write all) 1 功能 给所有在线用户发送 ...
- SpringMVC responseBody注解分析
@responsebody表示该方法的返回结果直接写入HTTP response body中一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@respo ...