Spring整合Activemq

news2024/9/18 15:52:11

目录

一、Pom.xml

二、Spring配置文件

三、队列

四、主题


一、Pom.xml

<dependencies>
   <!-- activemq核心依赖包  -->
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-all</artifactId>
        <version>5.10.0</version>
    </dependency>
    <!--  嵌入式activemq的broker所需要的依赖包   -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.10.1</version>
    </dependency>
    <!-- activemq连接池 -->
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-pool</artifactId>
        <version>5.15.10</version>
    </dependency>
    <!-- spring支持jms的包 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jms</artifactId>
        <version>5.2.1.RELEASE</version>
    </dependency>
    <!--spring相关依赖包-->
    <dependency>
        <groupId>org.apache.xbean</groupId>
        <artifactId>xbean-spring</artifactId>
        <version>4.15</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>5.2.1.RELEASE</version>
    </dependency>
    <!-- Spring核心依赖 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.3.23.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.23.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>4.3.23.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>4.3.23.RELEASE</version>
    </dependency>
</dependencies>

二、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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--  开启包的自动扫描  -->
    <context:component-scan base-package="com.atguigu.activemq"/>
    <!--  配置生产者  -->
    <bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
        <property name="connectionFactory">
            <!--      正真可以生产Connection的ConnectionFactory,由对应的JMS服务商提供      -->
            <bean class="org.apache.activemq.spring.ActiveMQConnectionFactory">
                <property name="brokerURL" value="tcp://193.179.123.10:61616"/>
            </bean>
        </property>
        <property name="maxConnections" value="100"/>
    </bean>

    <!--  这个是队列目的地,点对点的Queue  -->
    <bean id="destinationQueue" class="org.apache.activemq.command.ActiveMQQueue">
        <!--    通过构造注入Queue名    -->
        <constructor-arg index="0" value="spring-active-queue"/>
    </bean>


    <!--  Spring提供的JMS工具类,他可以进行消息发送,接收等  -->
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <!--    传入连接工厂    -->
        <property name="connectionFactory" ref="connectionFactory"/>
        <!--    传入目的地    -->
        <property name="defaultDestination" ref="destinationQueue"/>
        <!--    消息自动转换器    -->
        <property name="messageConverter">
            <bean class="org.springframework.jms.support.converter.SimpleMessageConverter"/>
        </property>
    </bean>
</beans>

三、队列

(一)生产者

@Service
public class SpringMQ_Produce {

    @Autowired
    private JmsTemplate jmsTemplate;

    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        SpringMQ_Produce produce = (SpringMQ_Produce) applicationContext.getBean("springMQ_Produce");
//        produce.jmsTemplate.send(new MessageCreator() {
//            @Override
//            public Message createMessage(Session session) throws JMSException {
//                TextMessage textMessage = session.createTextMessage("spring整合MQ");
//                return textMessage;
//            }
//        });
        produce.jmsTemplate.send((Session session) -> {
            TextMessage textMessage = session.createTextMessage("spring整合MQ");
            return textMessage;
        });
        System.out.println("send task over");
    }
}

(二)消费者

@Service
public class SpringMQ_Consumer {

    @Autowired
    private JmsTemplate jmsTemplate;

    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        SpringMQ_Consumer consumer = (SpringMQ_Consumer) applicationContext.getBean("springMQ_Consumer");
        String revalue = (String)consumer.jmsTemplate.receiveAndConvert();
        System.out.println("消费者收到消息:"+revalue);
    }
}

四、主题

(一)spring配置文件修改(橙色为修改或者添加)

<!--  开启包的自动扫描  -->
<context:component-scan base-package="com.atguigu.activemq.spring"/>
<!--  配置生产者  -->
<bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
    <property name="connectionFactory">
        <!--      真正可以生产Connection的ConnectionFactory,由对应的JMS服务商提供      -->
        <bean class="org.apache.activemq.spring.ActiveMQConnectionFactory">
            <property name="brokerURL" value="tcp://192.168.23.100:61616"/>
        </bean>
    </property>
    <property name="maxConnections" value="100"/>
</bean>

<!--  这个是队列目的地,点对点的Queue  -->
<bean id="destinationQueue" class="org.apache.activemq.command.ActiveMQQueue">
    <!--    通过构造注入Queue名    -->
    <constructor-arg index="0" value="spring-active-queue"/>
</bean>


<!--  这个是队列目的地,  发布订阅的主题Topic-->
<bean id="destinationTopic" class="org.apache.activemq.command.ActiveMQTopic">
    <constructor-arg index="0" value="spring-active-topic"/>
</bean>

<!--  Spring提供的JMS工具类,他可以进行消息发送,接收等  -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <!--    传入连接工厂    -->
    <property name="connectionFactory" ref="connectionFactory"/>
    <!--    传入目的地    -->
    <property name="defaultDestination" ref="destinationTopic"/>
    <!--    消息自动转换器    -->
    <property name="messageConverter">
        <bean class="org.springframework.jms.support.converter.SimpleMessageConverter"/>
    </property>
</bean>

(二)生产者和消费者

可以看到前面的生产者和消费者的代码中我们并没有指定使用队列还是主题,所以代码无需改动,但是要注意主题需要先启动消费者。

(三)在spring中实现消费者不启动,直接通过配置监听完成

 上面的主题相当于我们之前的同步阻塞方式,接下来我们实现异步阻塞方式

(1)spring配置文件添加

<!--配置监听程序-->
    <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="connectionFactory"/>
        <property name="destination" ref="destinationTopic"/>
        <!--public class myMessageListener implements MessafeListener-->
        <property name="messageListener" ref="myMessageListener"/>
    </bean>

(2)编写监听类

@Component
public class myMessageListener implements MessageListener {
    @Override
    public void onMessage(Message message) {
        if(null != message && message instanceof TextMessage) {
            TextMessage textMessage = (TextMessage)message;
            System.out.println("监听到消息:"+textMessage.getText());
        }
    }
}

(3)只启动生产者,不启动消费者,自动会监听记录

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

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

相关文章

安全分析开发环境一键部署

安全分析开发环境一键部署 Gartner 报告中指出 [7]&#xff0c;Platfor m Ops for AI 是一种编排和扩展运营人工智能的方法&#xff0c;利用跨数据、机器学习、人工智能和应用程序 开发管道的多种最佳实践&#xff0c;为基于人工智能的系统创建一个高效的交付模型。Platform O…

Android 8~12蓝牙架构组件介绍

一. Android 蓝牙架构图 可以看到Android蓝牙一共分为几层&#xff1a; APPLICATION FRAMEWORKBLUETOOTH PROCESSJNIBLUETOOTH STACKHIDL INTERFACESVENDOR IMPLEMENTATAION 生成内容路径以rk3399举例,在更新的过程中会遇到这个问题&#xff0c;解决方式是&#xff1a; root a…

node.js+uni计算机毕设项目基于微信小程序的图书管理系统(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

【前端设计】寄存器复位对综合面积的影响

我们的目标是┏ (゜ω゜)=☞芯片前端全栈工程师~喵! 前言 之前在写代码的时候呢,就一直被要求尽量使用不带复位的寄存器,理由是节约面积和降低功耗。因此我一直有两个疑问:能省多少面积?能降低多少功耗? 鉴于我一直没能掌握功耗测试的技能,因此这次先来看看面积的影响…

k8s本地联调工具kt-connect

1、Kt Connect简介 KT Connect &#xff08; Kubernetes Developer Tool &#xff09; 是轻量级的面向 Kubernetes 用户的开发测试环境治理辅助工具。其核心是通过建立本地到集群以及集群到本地的双向通道&#xff0c;从而提升在持续交付生命周期中开发环节的效率问题以及开发测…

[Linux]多线程的同步和互斥(线程池 | 单例模式 | 其他常见的锁 | 读者写者问题)

文章目录线程池线程安全的单例模式单例模式的特点饿汉方式和懒汉方式单例模式实现线程池其他常见的锁读者写者问题线程池 线程池是一种线程使用模式。线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。而线程池维护着多个线程&#xff0c;等待着监督管理者分…

K26 SOM从emmc启动linux——2

问题 在K26 SOM从emmc启动linux文章中&#xff0c;使用EMMC启动后&#xff0c;出现下图打印&#xff1a; 这里本身是存在问题的&#xff0c;没有显示系统名称&#xff0c;打印中有错误提示。 解决办法 在Image Packaging Configuration中将petalinux-initramfs-image修改成p…

教你快速实现“基于Docker快速构建基于Prometheus的MySQL监控系统”

&#x1f341; 个人网站&#xff1a;知识浅谈 &#x1f4cc; 资料分享群&#xff1a;资源分享 &#x1f356;400多套PPT模板&#xff1a;商务模板&学生答辩 &#x1f91e;这次都给他拿下&#x1f91e; 基于Docker快速构建基于Prometheus的MySQL监控系统 先来捋一下数据流的…

Java Lambda表达式原理解析

前言 java中有lambda,在使用java的过程中我们没少用(啥?用的kotlin?你别说话)但是你知道lambda的实现原理吗? 接下来就来解析lambda实现,不过在lambda之前我们与一个熟悉的老伙计谈谈心————匿名类,为什么因为他们有点类似. 匿名类的实现方式 从字节码的层面上来说ne…

长光卫星冲刺科创板上市,预计2025年底前实现300颗卫星在轨

近日&#xff0c;长光卫星技术股份有限公司&#xff08;下称“长光卫星”&#xff09;在上海证券交易所递交招股书&#xff0c;准备在科创板上市。 本次冲刺科创板上市&#xff0c;长光卫星计划募资26.83亿元&#xff0c;将用于“吉林一号”卫星星座建设项目&#xff08;二期&a…

第五章:数据完整性

一、实体、参照、用户自定义完整性 1、【单选题】CREATE TABLE时定义属性上的约束条件&#xff0c;检查列值是否满足一个条件表达式的定义关键词为&#xff1a; 正确答案&#xff1a; A 2、【多选题】创建患者住院主记录表pat_visit&#xff0c;并定义主码{patient_id,visit_…

《图解TCP/IP》阅读笔记(第七章 7.1、7.2、7.3)—— 路由控制概念与路由控制算法

第七章 路由协议 本章旨在将详细介绍路由控制以及实现路由控制功能的相关协议 7.1 路由控制的定义 在互联网这片汪洋大海中&#xff0c;数据就好似一叶扁舟&#xff0c;没有灯塔的指引&#xff0c;是难以寻得目的地的。这种进行正确方向引导的转发数据的处理&#xff0c;就叫…

[LeetCode周赛复盘] 第 94 场双周赛20221225

[LeetCode周赛复盘] 第 94 场双周赛20221225 一、本周周赛总结二、 [Easy] 6273. 最多可以摧毁的敌人城堡数目1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6274. 奖励最顶尖的 K 名学生1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6295. 最小化两个数组中的最大值1. 题…

从入门到项目实战 - Vue 键盘事件

Vue 中键盘事件的使用上一节&#xff1a;《 Vue 事件处理 》| 下一节&#xff1a;《 Vue 中鼠标事件的使用 》jcLee95 邮箱 &#xff1a;291148484163.com CSDN 主页&#xff1a;https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 本文地址&#xff1a;https:/…

【TypeScript】TS泛型讲解及其使用

目录 泛型 泛型函数使用 泛型约束 多泛型使用 泛型接口 泛型类 泛型工具类型 泛型 泛型是可以在保证类型安全的前提下&#xff0c;让函数等与多种类型一起工作&#xff0c;从而实现复用&#xff0c;常用于&#xff1a;函数、接口、class中。日常我们创建的函数&#xf…

车牌检测模型训练(含源码和数据集)

车牌检测模型训练(含源码和数据集) 本教程利用NVIDIA TAO进行车牌检测模型的训练: 模型框架:SSD数据集: CRPD, 连接:https://github.com/yxgong0/CRPD训练框架: NVIDIA TAO, 安装教程连接: https://docs.nvidia.com/tao/tao-toolkit/text/tao_toolkit_quick_start_guide.html…

目标检测之YOLOv3算法分析

基本原理 特征网络 输入输出 输入416∗416∗3416*416*3416∗416∗3大小的图片&#xff08;不唯一&#xff0c;但图片大小必为32的倍数&#xff09;&#xff0c;输出3个尺度的feature map,分别为13∗13∗25513*13*25513∗13∗255&#xff0c;26∗26∗25526*26*25526∗26∗255…

RV1126笔记十九:吸烟行为检测及部署<六>

若该文为原创文章,转载请注明原文出处。 模型测试 一、pt文件测试 pt文件是在windows下训练生成的,测试环境为py3.8 1、首先查看虚拟环境列表,然后切换于是py3.8的虚拟环境。 conda env list // 查看虚拟环境列表 conda activate yolo // 切换虚拟环境 2…

leetcode:1739. 放置盒子【找规律!】

目录题目截图题目分析ac code总结题目截图 题目分析 样例有规律&#xff0c;它希望我们先按每层1, 3, 6这样叠起来&#xff0c;比如能跌i层那么至少有i * ( i 1) // 2个底层多出来的东西再做考虑多出来的东西考虑1 2 3…能加到多少个比如说如果多出来3个的话&#xff0c;放…

【小5聊】Asp.Net Core3.1基础之跨域设置以及设置不对的地方

最近微软的.Net Core平台更新换代速度非常快&#xff0c;还没把2.1整熟悉&#xff0c;就把2.1淘汰了。 目前最新版本已经到了7.0&#xff0c;.net core3.1还在长期维护范围内&#xff0c;估计能用一段时间。 所以&#xff0c;.net core2.1升级到3.1&#xff0c;跨域方法的设置也…