ActiveMQ基本介绍以及Springboot整合ActiveMQ

本文详细介绍ActiveMQ消息中间件的概念、安装及SpringBoot下的整合方法,包括点对点与发布订阅两种消息模型的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是消息中间件

发送者将消息发送给消息服务器,消息服务器将消息存放在队列中,在合适的时候再讲消息转发给接受者。

在这种模式下,发送和接收是异步的,发送者无需进行等待,而且二者的生命周期不一定相同,发送消息的时候接收者不一定正在运行,而接收消息的时候发送者也不一定运行,但是消息中间件服务必须运行。如图:

消费者与消息中间件之间采用长连接方式通讯,在消费者监听到MQ中有消息存在时可以及时获取到消息。

二、ActiveMQ介绍

1.1ActiveMQ是个啥?

ActiveMQ是一个消息队列应用服务器。支持JMS规范。

1.2.ActiveMQ的消息模型

  • Point-to-Point (P2P)   点对点消息模式
  • Publish/Subscribe(Pub/Sub)  发布订阅

1.2.1.点对点

概念:

    发送者(producer):发送消息的生产者;

    消费者(consumer):接收消息的消费者;

    消息队列(queue):用来存储发送者发送消息的中间件;

特点:

1.每一个消息都被发送到一个特定的队列,接收者从队列中获取消息,队列中保留着消息,直到消息被消费或者超时。

2.每一个消息只能被一个消费者消费,被消费后的消息将会从队列中移除。

3.发送者和接收者之间在时间上没有依赖性,即就是当发送者发送消息后,不管接收者是否运行,都不会影响到消息被发送到队列

4.接收者在成功接收到消息后需要向队列应该成功。

点对点模式适合A与B用户发消息,接收消息后,消息即不存在于队列。

1.2.2.发布订阅

概念:

    发布者(Publisher):发布消息的生产者;

    订阅者(Subscriber):接收消息的消费者;

    主题(topic):用来存储发布者发布的消息;

特点:

1.每一个消息可以有多个消费者。

2.对于某一个主题的订阅者,他必须创建了一个订阅之后,才能消费发布者的消息,而且为了消费消息,订阅者需要保持运行状态,所以发布者和订阅者有时间上的依赖性。

三、ActiveMQ的安装

3.1.Windows下安装ActiveMQ

1.下载Windows版本的ActiveMQ压缩包,ActiveMQ官网地址

2.将下载的安装包解压到然后进去bin目录

3.在bin目录中根据自己电脑的位数,进入不同文件夹,双击 activemq.bat 的批处理文件,运行ActiveMQ。

4.启动图如下图,默认端口为6161

5.登录,验证MQ是否启动成功,默认账户名,密码都是 admin

四、SpringBoot整合ActiveMQ

4.1.点对点模式下整合

1.引入依赖

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
    </parent>
    <!-- 管理依赖 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.M7</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <!-- SpringBoot整合Web组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- SpringBoot Activemq -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>
    </dependencies>
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/libs-milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

2.引入application.yml配置

server:
  port: 8080
spring:
  activemq:
    broker-url: tcp://127.0.0.1:61616
    user: admin
    password: admin
#自定义队列名称
queue: gothic-queue

3.创建QueueConfig,注意引包

import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import javax.jms.Queue;

@Component
public class ConfigQueue {

    @Value("${queue}")
    private String queueName;
    //将队列注入到Springboot容器
    @Bean
    public Queue queue(){
        return  new ActiveMQQueue(queueName);
    }
}

4.创建生产者

@Component
public class QueueProducer {

    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

    @Autowired
    private Queue queue;

    private int count = 1;

    //设置五秒钟往队列发送一次消息
    @Scheduled(fixedDelay = 5000)
    public void send() {
        String msg = "消息队列: 第 " + count + " 次发送消息";
        //将消息转化并发送到消息队列
        jmsMessagingTemplate.convertAndSend(queue, msg);
        System.out.println("发送到队列中的消息为:" + msg);
        count++;
    }
}

5.创建消费者

@Component
public class QueueConsumer {

    @JmsListener(destination = "${queue}")
    public void receive(String msg) {
        System.out.println("消费者接收到消息为:" + msg);
    }
}

6.启动服务

@EnableScheduling
@SpringBootApplication
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class,args);
    }
}

7.控制台打印结果以及ActiveMQ客户端查看

在ActiveMQ的管理平台可以看到生产的消息被消息,当把生产者和消费者部署在不通服务下时,会发现之间互不影响。

4.2.发布订阅

4.2.1.创建订阅者(消费者)

1.引入依赖,依赖于点对点相同

2.引入application.yml配置

server:
  port: 8082
spring:
  activemq:
    broker-url: tcp://127.0.0.1:61616
    user: admin
    password: admin
  #### 开启发布订阅
  jms:
    pub-sub-domain: true
##自定义主题名称
topic: gothic-topic

3.创建订阅者

@Component
public class TopicConsumer {

    @JmsListener(destination = "${topic}")
    public void receiveTopic(String msg) {
        System.out.println("消费者消费的消息为: " + msg);
    }
}

4.创建启动类

@SpringBootApplication
public class ConsumerApp {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApp.class, args);
    }
}

5.启动订阅者

4.2.2.创建发布者(生产者)

1.引入依赖,依赖于点对点相同

2.引入application.yml配置

server:
  port: 8081
spring:
  activemq:
    broker-url: tcp://127.0.0.1:61616
    user: admin
    password: admin
##自定义主题名称
topic: gothic-topic

3.创建TopicConfig

@Component
public class TopicConfig {

    //获取主题名称
    @Value("${topic}")
    private String topicName;

    //将topic注入到Springboot的容器中
    @Bean
    private Topic topic(){
        return new ActiveMQTopic(topicName);
    }
}

4.创建生产者

@Component
public class TopicProducer {

    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;

    @Autowired
    private Topic topic;

    private int count = 1;

    //每五秒发布一次
    @Scheduled(fixedDelay = 5000)
    public void sendTopic() {
        String msg = "发布订阅: 第" + count + "次发布消息";
        jmsMessagingTemplate.convertAndSend(topic, msg);
        System.out.println(msg);
        count++;
    }

}

5.创建生产者的启动类

@EnableScheduling
@SpringBootApplication
public class ProducerApp {
    public static void main(String[] args) {
        SpringApplication.run(ProducerApp.class, args);
    }
}

6.启动发布者

4.2.3.测试查看控制台

订阅者控制台打印

生产者控制台

至此Springboot集成ActiveMQ完成。

管理后台HTML页面是Web开发中一种常见的实践,主要用于构建企业或组织内部的管理界面,具备数据监控、用户管理、内容编辑等功能。本文将探讨一套美观易用的二级菜单目录设计,帮助开发者创建高效且直观的后台管理系统。 HTML5:作为超文本标记语言的最新版本,HTML5增强了网页的互动性和可访问性,提供了更多语义元素,如<header>、<nav>、<section>、<article>等,有助于清晰地定义网页结构。在管理后台中,HTML5可用于构建页面布局,划分功能区域,并集成多媒体内容,如图像、音频和视频。 界面设计:良好的管理后台界面应具备清晰的导航、一致的布局和易于理解的图标。二级菜单目录设计能够有效组织信息,主菜单涵盖大类功能,次级菜单则提供更具体的操作选项,通过展开和折叠实现层次感,降低用户认知负担。 CSS:CSS是用于控制网页外观和布局的语言,可对HTML元素进行样式设置,包括颜色、字体、布局等。在管理后台中,CSS能够实现响应式设计,使页面在不同设备上具有良好的显示效果。借助CSS预处理器(如Sass或Less),可以编写更高效、模块化的样式代码,便于维护。 文件结构: guanli.html:可能是管理页面的主入口,包含后台的主要功能和布局。 xitong.html:可能是系统设置或配置页面,用于管理员调整系统参数。 denglu.html:登录页面,通常包含用户名和密码输入框、登录按钮,以及注册或忘记密码的链接。 image文件夹:存放页面使用的图片资源,如图标、背景图等。 css文件夹:包含后台系统的样式文件,如全局样式表style.css或按模块划分的样式文件。 响应式设计:在移动设备普及的背景下,管理后台需要支持多种屏幕尺寸。通过媒体查询(Media Queries)和流式布局(Fluid Grids),可以确保后台在桌面、平板和手机上都能良好展示。
双闭环直流电机调速系统是一种高效且应用广泛的直流调速技术。通过设置转速环和电流环两个闭环,系统能够对电机的转速和电流进行精准控制,从而提升动态响应能力和稳定性,广泛应用于工业自动化领域。 主电路设计:主电路采用三相全控桥整流电路,将交流电转换为可调节的直流电,为电机供电。晶闸管作为核心元件,通过调节控制角α实现输出电压的调节。 元部件设计:包括整流变压器、晶闸管、电抗器等元件的设计与参数计算,这些元件的性能直接影响系统的稳定性和效率。 保护电路:设计过载保护、短路保护等保护电路,确保系统安全运行。 驱动电路:设计触发电路和脉冲变压器,触发电路用于触发晶闸管导通,脉冲变压器用于传递触发信号。 控制器设计:系统核心为转速调节器(ASR)和电流调节器(ACR),分别对转速和电流进行调控。检测电路用于采集实际转速和电流值并反馈给调节器。 仿真分析:利用MATLAB/SIMULINK等工具对系统进行仿真分析,验证其稳定性和性能指标是否达标。 方案确定与框图绘制:明确系统构成及各模块连接方式。 主电路设计:选择整流电路形式,设计整流变压器、晶闸管等元部件并计算参数。 驱动电路设计:设计触发电路和脉冲变压器,确保晶闸管准确触发。 控制器设计: 转速调节器(ASR):根据转速指令调整实际转速。 电流调节器(ACR):根据ASR输出指令调整电流,实现快速响应。 参数计算:计算给定电压、调节器、检测电路、触发电路和稳压电路的参数。 仿真分析:通过软件模拟系统运行状态,评估性能。 电气原理图绘制:完成调速控制电路的电气原理图绘制。 双闭环控制策略:转速环在外,电流环在内,形成嵌套结构,提升动态响应能力。 晶闸管控制角调节:通过改变控制角α调节输出电压,实现转速平滑调节。 仿真分析:借助专业软件验证设计的合理性和有效性。 双闭环直流电机调速系统设计涉及主电路、驱动电路和控制器设计等多个环节,通过仿
电池管理系统(Battery Management System,简称BMS)是电动汽车及储能系统的关键部件,主要负责监控、保护、控制和优化电池组性能。本文重点探讨基于Simulink构建的BMS模型。Simulink是Matlab环境下一款强大的数学建模工具,广泛应用于工程仿真与控制设计,其可视化平台让复杂系统如电池BMS的设计和测试更加直观。 电池均衡是BMS的核心功能之一,旨在确保电池组中各单体电池电压和容量一致,避免因个别电池过充或过放影响系统性能。在Simulink模型中,电池均衡可通过电流注入或能量转移实现,涉及电流控制电路和算法的建模,例如电阻分压、电感平衡或开关电容等方法。 SOC计算(State of Charge,即电池荷电状态)也是BMS的重要功能,它是评估电池剩余能量的关键指标。在BMS模型中,SOC估算通常基于电池的电压、电流、温度数据以及特定电池模型,如阶跃响应模型、等效电路模型或基于物理的模型。这些模型能够精准跟踪电池状态,为充电策略和故障检测提供依据。 在相关文件中,“license.txt”可能包含Simulink模型的使用许可信息,这对于模型的商业应用和合规性至关重要。“batteryBalancing”文件可能是电池均衡模块的具体实现,详细描述了Simulink构建的均衡算法,包括均衡触发条件、控制逻辑及电路模型等。 一个完整的BMS Simulink模型还应涵盖电池健康状态(SOH,State of Health)估计、热管理、安全保护(如过压、欠压、过流保护等)以及通信接口(用于与车辆其他系统交互)等功能模块。这些模块需要精心设计和参数校准,以确保BMS在各种工况下保持稳定性和准确性。 在开发BMS模型时,用户可以借助Matlab的Simulink库,如控制库、信号处理库和电力电子库,并结合电池特性的实验数据进行模型搭建和仿真验证。
YOLOv10-PyQt5-GUI识别扑克牌的花色和点数-检测游戏开发和娱乐应用+数据集+训练好的模型+pyqt5可视化界面包含pyqt可视化界面,有使用教程 1. 内部包含标注好的目标检测数据集,分别有yolo格式(txt文件)和voc格式标签(xml文件), 共1285张图像, 已划分好数据集train,val, test,并附有data.yaml文件可直接用于yolov5,v8,v9,v10,v11,v12等算法的训练; 2. yolo目标检测数据集类别名:poker-cards(扑克牌),包括 10_Diamonds(方块10)、10_Hearts(红心10)、10_Spades(黑桃10)、10_Trefoils(梅花10)、2_Diamonds(方块2)、2_Hearts(红心2)、2_Spades(黑桃2)、2_Trefoils(梅花2)、3_Diamonds(方块3)、3_Hearts(红心3)、3_Spades(黑桃3)、3_Trefoils(梅花3)、4_Diamonds(方块4)、4_Hearts(红心4)、4_Spades(黑桃4)、4_Trefoils(梅花4)、5_Diamonds(方块5)、5_Hearts(红心5)、5_Spades(黑桃5)、5_Trefoils(梅花5)、6_Diamonds(方块6)、6_Hearts(红心6)、6_Spades(黑桃6)、6_Trefoils(梅花6)、7_Diamonds(方块7)、7_Hearts(红心7)、7_Spades(黑桃7)、7_Trefoils(梅花7)、8_Diamonds(方块8)、8_Hearts(红心8)、8_Spades(黑桃8)、8_Trefoils(梅花8)、9_Diamonds(方块9)、9_Hearts(红心9)、9_Spades(黑桃9)、9_Trefoils(梅花9)、A_Diamonds(方块A)、A_Hearts(红心A)、A_Spades(黑桃A)、A_Trefoils(梅花A)、J_Diamonds(方块J)、J_Hearts(红心J)、J_Spades(黑桃J)、J_Trefoils(梅花J)、K_Diamonds(方块K)、K_Hearts(红心K)、K_Spades(黑桃K)、K_Trefoils(梅花K)、Q_Diamonds(方块Q)、Q_Hearts(红心Q)、Q_Spades(黑桃Q)、Q_Trefoils(梅花Q)等 3. yolo项目用途:识别扑克牌的花色和点数,用于游戏开发和娱乐应用 4. 可视化参考链接:https://blog.youkuaiyun.com/weixin_51154380/article/details/126395695?spm=1001.2014.3001.5502
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值