Spring 与 ActiveMQ 的深度集成实践(三)
五、实战案例分析
5.1 案例背景与需求
假设我们正在开发一个电商系统,其中订单模块和库存模块是两个独立的子系统 。当用户下单后,订单模块需要通知库存模块进行库存扣减操作 。在传统的同步调用方式下,订单模块需要等待库存模块完成扣减操作后才能返回响应给用户,这不仅会导致订单处理的响应时间变长,而且当库存模块出现故障时,订单模块也会受到影响,导致整个系统的可用性降低 。
为了解决这些问题,我们决定使用 Spring 与 ActiveMQ 的集成来实现订单模块和库存模块之间的异步通信 。具体需求如下:
- 订单模块在用户下单成功后,将订单信息发送到 ActiveMQ 的消息队列中 。
- 库存模块从消息队列中接收订单信息,并进行库存扣减操作 。
- 确保消息的可靠传输,避免消息丢失 。
- 实现消息的事务处理,保证订单信息的发送和库存扣减操作要么全部成功,要么全部失败 。
5.2 实现过程与代码展示
- 配置文件:在application.properties文件中添加 ActiveMQ 的连接配置:
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.in-memory=false
spring.activemq.pool.enabled=false
- 自定义配置类:创建ActiveMQConfig.java配置类,配置连接工厂、JmsTemplate和消息监听器容器工厂:
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.core.JmsTemplate;
import javax.jms.ConnectionFactory;
@Configuration
@EnableJms
public class ActiveMQConfig {
@Bean
public ConnectionFactory connectionFactory() {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
connectionFactory.setBrokerURL("tcp://localhost:61616");
connectionFactory.setUserName("admin");
connectionFactory.setPassword("admin");
return connectionFactory;
}
@Bean
public JmsTemplate jmsTemplate(ConnectionFactory connectionFactory) {
JmsTemplate jmsTemplate = new JmsTemplate();
jmsTemplate.setConnectionFactory(connectionFactory);
jmsTemplate.setDeliveryPersistent(true);
return jmsTemplate;
}
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(ConnectionFactory connectionFactory) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setConcurrency("1-10");
factory.setSessionAcknowledgeMode(1);
return factory;
}
}
- 订单模块(消息生产者):创建OrderService.java类,模拟订单下单操作,并发送订单消息:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;
import javax.jms.Queue;
@Service
public class OrderService {
@Autowired
private JmsTemplate jmsTemplate;
@Autowired
private Queue orderQueue;
public void placeOrder(String orderInfo) {
// 模拟订单下单的其他业务逻辑
System.out.println("订单下单成功,订单信息: " + orderInfo);
// 发送订单消息到ActiveMQ队列
jmsTemplate.convertAndSend(orderQueue, orderInfo);
System.out.println("订单消息已发送: " + orderInfo);
}
}
- 库存模块(消息消费者):创建StockService.java类,监听订单消息队列,并进行库存扣减操作:
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Service;
@Service
public class StockService {
@JmsListener(destination = "orderQueue")
public void handleOrder(String orderInfo) {
System.out.println("接收到订单消息: " + orderInfo);
// 模拟库存扣减的业务逻辑
System.out.println("库存扣减操作完成,订单信息: " + orderInfo);
}
}
5.3 运行结果与分析
运行电商系统,当用户下单后,订单模块会输出:
订单下单成功,订单信息: 订单编号1001,商品ID: 2001,数量: 5
订单消息已发送: 订单编号1001,商品ID: 2001,数量: 5
库存模块会输出:
接收到订单消息: 订单编号1001,商品ID: 2001,数量: 5
库存扣减操作完成,订单信息: 订单编号1001,商品ID: 2001,数量: 5
从运行结果可以看出,订单模块成功将订单消息发送到 ActiveMQ 队列,库存模块也成功从队列中接收到消息并进行了相应的处理,符合我们的预期 。
可能出现的问题及解决方法:
- 消息丢失:如果在消息发送或接收过程中出现异常,可能会导致消息丢失 。可以通过配置消息的持久化(如在jmsTemplate中设置setDeliveryPersistent(true))和事务处理(如配置JmsTransactionManager)来保证消息的可靠性 。
- 消费者处理消息失败:如果库存扣减操作失败,可能会导致数据不一致 。可以在消费者中添加事务处理,并在处理失败时进行回滚操作,同时可以设置消息的重试机制,如在jmsListenerContainerFactory中设置setRecoveryCallback来处理消息处理失败的情况 。
六、常见问题与解决方案
6.1 集成过程中的错误排查
在 Spring 与 ActiveMQ 的集成过程中,可能会遇到各种各样的错误,以下是一些常见错误及排查解决方法:
- 依赖冲突:在引入 Spring 和 ActiveMQ 的相关依赖时,可能会因为版本不兼容或重复引入导致依赖冲突 。例如,同时引入了不同版本的 Spring-JMS 或 ActiveMQ 的核心依赖,可能会导致类冲突,出现如ClassNotFoundException或NoSuchMethodError等异常 。排查时,可以使用 Maven 的dependency:tree命令查看依赖树,找出冲突的依赖 。解决方法是在pom.xml文件中使用<exclusions>标签排除不需要的依赖,或者调整依赖的版本,确保所有依赖之间的兼容性 。比如,如果发现spring-jms依赖的版本冲突,可以通过以下方式排除冲突的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>5.3.10</version>
</dependency>
- 配置错误:配置文件中的错误是导致集成失败的常见原因 。例如,在application.properties或application.yml文件中,ActiveMQ 的连接配置错误,如spring.activemq.broker-url填写错误,可能会导致无法连接到 ActiveMQ 服务器,出现JMSException: Could not connect to broker URL: tcp://wrongUrl:61616这样的异常 。排查时,仔细检查配置文件中的各项配置,确保 ActiveMQ 的连接地址、用户名、密码等信息准确无误 。还可以通过在配置文件中添加spring.activemq.show - config=true来打印详细的配置信息,以便进行对比和排查 。如果发现配置错误,及时修改配置文件并重启应用程序 。
- 消息监听器未正确注册:在使用@JmsListener注解创建消息消费者时,如果消息监听器未正确注册,可能会导致无法接收到消息 。这可能是因为配置类中JmsListenerContainerFactory的配置有误,或者@EnableJms注解未正确添加 。排查时,检查配置类中JmsListenerContainerFactory的配置是否正确,如连接工厂、并发消费者数量、消息确认模式等设置是否符合需求 。确保在主应用类或配置类上添加了@EnableJms注解,以启用 JMS 功能 。例如,如果发现消息监听器未正确注册,可以检查ActiveMQConfig.java配置类中的jmsListenerContainerFactory方法,确保其配置正确:
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(ConnectionFactory connectionFactory) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setConcurrency("1-10");
factory.setSessionAcknowledgeMode(1);
return factory;
}
6.2 性能优化建议
为了提高 Spring 与 ActiveMQ 集成的性能,可以从以下几个方面进行优化:
- 连接池配置:合理配置 ActiveMQ 的连接池可以显著提高系统的性能和资源利用率 。在 Spring Boot 中,可以通过在application.properties或application.yml文件中配置连接池相关参数来启用连接池 。例如:
spring.activemq.pool.enabled=true
spring.activemq.pool.max - connections=10
spring.activemq.pool.idle - timeout=30000
spring.activemq.pool.enabled设置为true表示启用连接池;spring.activemq.pool.max - connections设置连接池的最大连接数为 10,根据系统的并发需求合理调整该值,避免连接过多导致资源浪费或连接不足导致性能瓶颈 ;spring.activemq.pool.idle - timeout设置空闲连接的过期时间为 30000 毫秒,即如果一个连接在 30 秒内处于空闲状态,将会被关闭,以释放资源 。还可以根据实际情况配置其他连接池参数,如spring.activemq.pool.blockIfFull(连接池满时是否阻塞)、spring.activemq.pool.blockIfFullTimeout(阻塞等待的超时时间)等 。
- 消息持久化策略:消息持久化可以保证在 ActiveMQ 服务器重启或故障时消息不丢失,但同时也会对性能产生一定的影响 。在生产环境中,需要根据业务需求合理选择消息持久化策略 。如果对消息的可靠性要求极高,如金融交易系统中的订单消息,应选择持久化策略,将消息存储到磁盘上 。可以在JmsTemplate中设置setDeliveryPersistent(true)来实现消息的持久化 。但如果对消息的实时性要求较高,且允许在服务器故障时丢失少量消息,如一些实时监控数据的消息,可以选择非持久化策略,将消息存储在内存中,以提高消息的发送和接收速度 。在选择持久化策略时,还可以考虑使用数据库作为持久化存储,如 MySQL、Oracle 等,通过配置jdbcPersistenceAdapter来实现 。
- 网络优化:网络延迟和带宽限制可能会影响消息的传输速度和系统的性能 。可以通过优化网络配置来提高性能 。确保 ActiveMQ 服务器和应用程序所在的服务器之间的网络连接稳定,减少网络延迟 。可以使用高速网络设备,如千兆网卡、高性能交换机等,提高网络带宽 。合理设置消息的发送和接收超时时间,避免因网络问题导致消息发送或接收失败 。在JmsTemplate中,可以通过setReceiveTimeout和setSendTimeout方法设置接收和发送消息的超时时间,例如:
jmsTemplate.setReceiveTimeout(5000);
jmsTemplate.setSendTimeout(3000);
这里将接收超时时间设置为 5000 毫秒,发送超时时间设置为 3000 毫秒,根据实际的网络情况和业务需求进行调整 。
相关文章:
Spring 与 ActiveMQ 的深度集成实践(三)
五、实战案例分析 5.1 案例背景与需求 假设我们正在开发一个电商系统,其中订单模块和库存模块是两个独立的子系统 。当用户下单后,订单模块需要通知库存模块进行库存扣减操作 。在传统的同步调用方式下,订单模块需要等待库存模块完成扣减操…...
30-算法打卡-字符串-重复的子字符串-leetcode(459)-第三十天
1 题目地址 459. 重复的子字符串 - 力扣(LeetCode)459. 重复的子字符串 - 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 示例 1:输入: s "abab"输出: true解释: 可由子串 "ab" 重复两次构成…...
rocketmq一些异常记录
rocketmq一些异常记录 Product 设置不重复发送 发送 一次失败,不会在被发送到mq消息队列中,相当于消息丢失。 2、 Consumer 消费失败 重试三次消费 都失败 则消息消费失败,失败后 会放入 死信队列,可以手动处理在mq面板 处理死信队…...
SQLMesh 测试自动化:提升数据工程效率
在现代数据工程中,确保数据模型的准确性和可靠性至关重要。SQLMesh 提供了一套强大的测试工具,用于验证数据模型的输出是否符合预期。本文将深入探讨 SQLMesh 的测试功能,包括如何创建测试、支持的数据格式以及如何运行和调试测试。 SQLMesh …...
WPF使用SQLite与JSON文本文件结合存储体侧平衡数据的设计与实现
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
关系型数据库PostgreSQL vs MySQL 深度对比:专业术语+白话解析+实战案例
PostgreSQL 与 MySQL 的详细对比 PostgreSQL 和 MySQL 是两种最流行的开源关系型数据库,它们在设计理念、功能特性和适用场景上有显著差异。以下是它们的详细对比: 一、基本架构与设计理念 PostgreSQL:多进程架构,使用共享内存通…...
利用 SSRF 和 Redis 渗透
环境搭建 在本次实验中,我们使用 Docker 环境进行测试。 解压实验包,搭建 docker 环境。 docker环境 web的dockerfile 主要利用代码 : redis服务器 通过 docker-compose up -d 启动相关容器,初次启动失败。 发现 docker 版本问…...
脏读、幻读、可重复读
脏读 定义:一个事务读取了另一个事务尚未提交的数据 。比如事务 A 修改了某条数据但还没提交,此时事务 B 读取了这条被修改但未提交的数据。若事务 A 后续回滚,事务 B 读到的数据就是无效的,相当于读到了 “脏数据”。危害&#…...
第1讲、#PyTorch教学环境搭建与Tensor基础操作详解
引言 PyTorch是当前深度学习领域最流行的框架之一,因其动态计算图和直观的API而备受开发者青睐。本文将从零开始介绍PyTorch的环境搭建与基础操作,适合各种平台的用户和深度学习初学者。 1. 安装和环境搭建 macOS (Apple Silicon) 对于Mac M1/M2/M3用…...
【创新实训个人博客】数据库搭建
1.原因 为了降低模型使用以前训练的数据或者幻觉知识,我们在对话时需要提供相关内容的数据,同时由于需要最新的广告实时数据,实时爬取和版权问题。数据由团队在网上爬取,为了广告内容的有效性,如果长期使用࿰…...
《代码整洁之道》第6章 对象和数据结构 - 笔记
数据抽象 (Data Abstraction) 这个小节主要讲的是**面向对象编程(OOP)**的一种核心思想:对象应该隐藏它的内部数据,只暴露可以操作这些数据的“行为”(也就是方法/函数)。 大白话: 你创建一个…...
Python判断字符串中是否包含特殊字符
在 Python 中,判断一个字符串是否包含特殊字符可以通过多种方法实现。常见的特殊字符包括空格、感叹号、单引号、括号、星号、加号、逗号、斜杠、冒号、分号、等号、问号、 符号、方括号、花括号和 & 符号等。 为了判断字符串中是否包含这些特殊字符࿰…...
disruptor-spring-boot-start版本优化升级
文章目录 1.前言2.升级内容3.依赖4.总结 1.前言 由于之前写了一篇《disruptor-spring-boot-start生产实践导致pod节点CPU爆表100%的问题解决说明》的文章,里面说本地启动没有啥问题,后面我启动之前写的那个测试的controller发现,本地电脑的CP…...
复杂背景下无人机影像小目标检测:MPE-YOLO抗遮挡与抗背景干扰设计
目录 一、引言 二、挑战和贡献 密集小目标和遮挡 实时性要求与精度权衡 复杂背景 三、MPE-YOLO模型细节 多级特征集成器(MFI) 感知增强卷积(PEC) 增强范围C2f模块(ES-C2f) 四、Coovally AI模型训…...
项目实战 -- 状态管理
redux基础 还记得好久好久之前就想要实现的一个功能吗? 收起侧边栏折叠菜单,没错,现在才实现 因为不是父子通信,所以处理起来相对麻烦一点 可以使用状态树或者中间人模式 这就需要会redux了 Redux工作流: 异步就…...
基于单片机的智能药盒系统
标题:基于单片机的智能药盒系统 内容:1.摘要 本文聚焦于基于单片机的智能药盒系统。背景方面,随着人口老龄化加剧,老年人按时准确服药问题愈发凸显,同时现代快节奏生活也使人们容易遗忘服药时间。目的是设计并实现一个能帮助人们按时、按量服…...
【PyCharm- Python- ArcGIS】:安装一个和 ArcGIS 不冲突的独立 Python让PyCharm 使用 (解决全过程记录)
之前电脑上安装了anaconda3,python3和arcgis10.2.其中anaconda3带有python3,arcgis10.2自带python2.7。arcgis不能正常使用,之前为了使用arcgis,因此卸载了anaconda3和python3,PyCharm不能正常使用了 之前安装的卸载后…...
【C语言干货】回调函数
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、回调函数 前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、回调函数 在 C 语言中,当你有一个函数并希望将其作…...
Redis使用总结
NoSQL 1.1为什么要用NoSQL 面对现在用户数据的急剧上升,我们需要对这些用户数据进行挖掘,传统的关系型数据库已经不适合这些 应用了.Nosql 的发展可以很了的处理这些大的数据. 1.2什么是NoSQL Not Only Sql->NoSQL(不仅仅是SQL) 非关系型数据库.随…...
现场问题排查-postgresql某表索引损坏导致指定数据无法更新影响卷宗材料上传
问题现象 今天突然被拉进一个群,说某地区友商推送编目结果报错,在我们自己的卷宗系统上传材料也一直转圈,也删除不了案件卷宗,重置模板也没用,只有个别案件有问题。虽然这事儿不属于我负责,但还是抽时间给…...
数字化转型的未来趋势:从工具到生态,聚焦生态合作、绿色转型与全球化布局
摘要 本文将深入探讨了数字化转型的演进路径,特别是从依赖单一数字化工具向构建和参与复杂商业生态系统的战略转变。分析表明,这一转变不仅是技术升级,更是商业模式、运营逻辑和价值创造方式的根本性变革。云计算、人工智能和大数据分析等 f…...
记录学习记录学习《手动学习深度学习》这本书的笔记(九)
马不停蹄地来到了第十二章:计算性能…… 感觉应该是讲并行计算方面的,比如GPU、CPU、CUDA那些。 第十二章:计算性能 12.1 编译器和解释器 这里先提出了命令式编程和符号式编程的概念。 命令式编程VS符号式编程 目前为止,本书…...
麒麟系统通过 Service 启动 JAR 包的完整指南
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...
【记录maven依赖规则-dependencyManagement,dependencies】
记录maven依赖规则-dependencyManagement,dependencies 依赖方式 直接依赖 间接依赖 依赖关系 直接依赖: 父级管理定义的版本,并且在中进行引用了的版本。 优先使用dependencyManagement定义的版本。 间接依赖: 如果间接依赖…...
macos下mysql 5.7/8.0版本切换
1、首先安装好mysql 5.7/8.0,可以用brew进行安装 5.7 的原始配置文件路径: /usr/local/Cellar/mysql5.7/5.7.44_1/homebrew.mxcl.mysql5.7.plist 配置内容如下: 对应的.cnf配置文件内容如下: 8.0 的原始配置文件路径࿱…...
FPGA时钟设计
实现功能:基于Verilog的动态显示时钟设计,支持整点(时:00:00)闪烁功能。代码包含时钟计数、动态扫描、整点检测和闪烁控制模块: module dynamic_clock(input clk, // 主时钟(假设50MHz࿰…...
【NVM】管理不同版本的node.js
目录 一、下载nvm 二、安装nvm 三、验证安装 四、配置下载镜像 五、使用NVM 前言:不同的node.js版本会让你在使用过程很费劲,nvm是一个node版本管理工具,通过它可以安装多种node版本并且可以快速、简单的切换node版本。 一、下载nvm htt…...
【今日三题】笨小猴(模拟) / 主持人调度(排序) / 分割等和子集(01背包)
⭐️个人主页:小羊 ⭐️所属专栏:每日两三题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 笨小猴(模拟)主持人调度(排序)分割等和子集(01背包) 笨小猴(模拟) 笨小猴 #include <iostream> #include <string…...
android10 卸载应用出现回退栈异常问题
打开设置,打开APP1,使用adb uninstall 卸载APP1/或者杀掉APP1进程,没有回到设置而是回到了桌面 抓取eventlog,查看ams/wms打印,发现“am_focused_stack: appDied leftTaskHistoryEmpty”源码中搜索“leftTaskHistoryE…...
位置差在坐标系间的相互转换
1 NED转经纬高 (n 系下的北向、东向和垂向位置差异(单位 m)转化为纬度、经度和高程分量的差异) 2 基站坐标转换 纬度、经度、高程 到 ECEF %纬度、经度、高程 到 ECEF clc; clear; glvs; addpath(genpath(E:\GNSSINS\ACES)…...
在线重定义——分区表改造
在数据库管理过程中,随着数据量的不断增长,普通表的查询、维护成本不断上升。为了提升查询性能和管理效率,通常需要将大表进行分区处理。 本文介绍如何使用 Oracle 在线重定义(DBMS_REDEFINITION) 的方式对现有大表进行…...
day51—二分法—x 的平方根(LeetCode-69)
题目描述 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 示例 …...
网络安全漏洞现状与风险管理分析
在当今数字化时代,网络安全已成为企业和组织不可忽视的核心问题。网络环境的日益复杂和攻击手段的不断升级,使得漏洞管理成为网络安全战略中的关键环节。下面将详细分析当前网络安全领域的漏洞现状及有效的风险管理策略。 当前网络安全面临的挑战 高危漏…...
二、Web服务常用的I/O操作
一、单个或者批量上传文件 前端: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>文件…...
Pinia——Vue的Store状态管理库
一、Store 是什么? Store (如 Pinia) 是一个保存状态和业务逻辑的实体,它并不与你的组件树绑定。换句话说,它承载着全局状态。它有点像一个永远存在的组件,每个组件都可以读取和写入它。它有三个概念,state、getter 和…...
生成式人工智能认证(GAI认证)适合那些人考?
在人工智能浪潮席卷全球的今天,你是否曾思考过:当机器开始创作诗歌、设计建筑、撰写代码,甚至模拟人类思维时,我们该如何与这个“新物种”共处?更关键的是,当生成式人工智能(Generative AI)从实验室走向千行百业,谁将成为驾驭这场技术革命的“领航者”?答案或许藏在一…...
使用cmd来创建数据库和数据库表-简洁步骤
创建数据库和表: 1. 按WinR打开“运行”,输入cmd,回车 2. 登录数据库:mysql -u root -p 然后输入密码 3. 创建数据库create database myblog; myblog为数据库名(自定义你的数据库名) !注意分号不要漏了! …...
微博安卓版话题热度推荐算法与内容真实性分析
微博是目前最受欢迎的社交平台之一,它的推荐算法在推动话题热度和内容传播方面发挥着重要作用。然而,这一算法也引发了对于内容真实性的担忧。本文将通过分析微博安卓版的推荐机制,探讨其对话题热度的影响以及内容真实性问题。 微博的推荐算法…...
助力产业升级 | BMC安全启动方案上新了!
近日,OurBMC 社区联合其理事成员单位中移(苏州)软件技术有限公司,在产业化落地SIG发布计算机系统安全可信创新解决方案——《 BMC 安全启动方案》。该方案为开发者提供了清晰、可实现的技术实施路径,可有效助力开发者提…...
Python中使用Redis的参数
Python中使用Redis通常是通过redis-py这个库来实现的。redis-py是一个Python客户端,它提供了对Redis数据库的完整操作接口。在使用redis-py时,你需要通过连接参数来配置与Redis服务器的连接。下面是一些常用的连接参数及其解释: host 描述&…...
tensorflow使用详解
一、TensorFlow基础环境搭建 安装与验证 # 安装CPU版本 pip install tensorflow# 安装GPU版本(需CUDA 11.x和cuDNN 8.x) pip install tensorflow-gpu# 验证安装 python -c "import tensorflow as tf; print(tf.__version__)"核心概念 Tensor…...
FreeMarker语法深度解析与Node.js集成实践指南
一、FreeMarker核心语法体系 1.1 基础模板结构 <#-- 注释语法 --> ${expression} <#-- 输出表达式 --> <#directive paramvalue> <#-- 指令语法 -->1.2 数据类型处理 标量类型深度处理: <#assign num 123.45?floor> <#--…...
如何实现一个可视化的文字编辑器(C语言版)?
一、软件安装 Visual Studio 2022 Visual Studio 2022 是微软提供的强大集成开发环境(IDE),广泛用于C/C、C#、Python等多种编程语言的开发。它提供了许多强大的工具,帮助开发者编写、调试和优化代码。 1.下载 Visual Studio 202…...
学习海康VisionMaster之路径提取
一:进一步学习了 今天学习下VisionMaster中的路径提取:可在绘制的路径上等间隔取点或查找边缘点 二:开始学习 1:什么是路径提取? 相当于事先指定一段路径,然后在对应的路径上查找边缘,这个也是…...
【MCP Node.js SDK 全栈进阶指南】中级篇(6):MCP与Web框架集成
背景 在现代Web开发生态中,框架已成为构建高效、可维护应用的核心基础设施。将MCP TypeScript-SDK与流行的Web框架集成,能够充分发挥两者的优势,构建功能丰富、交互智能的现代应用。本文将深入探讨MCP与主流Web框架的集成方法、最佳实践和架构设计,帮助开发者构建强大而灵…...
vue3+vite 项目中使用 Echarts 5.0 按需引入教程
效果图 第一步,封装 ECharts 工具函数 在 utils 目录下新建一个 echarts.js 文件,位置随意这里只引入了 折线图和拼团,需要其他的图自行引入 import * as echarts from "echarts/core"; import { LineChart, PieChart } from "…...
Unreal Engine 实现软件测试方案的仿真体验
以下将以一款模拟物流仓储管理软件的测试为例,详细阐述如何利用 Unreal Engine 实现软件测试方案的仿真体验。 1. 明确测试目标与需求 功能方面:要验证货物出入库管理、库存盘点、货物定位、叉车调度等功能的准确性和稳定性。性能方面:测试…...
蓝绿部署的详细规划文档
一、蓝绿部署概述 蓝绿部署是一种通过运行两套完全相同的生产环境(蓝色和绿色)实现零停机发布的策略。核心流程为:在绿色环境部署新版本并验证通过后,将流量逐步切换至绿色环境,若出现问题可快速回滚至蓝色环境。该策略适用于对可用性要求极高的系统(如金融、电商),可…...
【SpringMVC】概念引入与连接
目录 1.前言 2.正文 2.1SpringMVC是什么 2.2详解RequestMapping注解 2.3创建Spring项目 2.4建立连接 2.5Postman 3.小结 1.前言 哈喽大家好,今天来给大家带来Spring相关的学习,主要内容有概念的讲解以及如何分别通过Java代码和工具Postman来建立…...
NodeJs模块化与JavaScript的包管理工具
Js:模块化规范的文章链接:https://blog.csdn.net/Y1914960928/article/details/131793004?spm1011.2415.3001.5331 一、模块化: 1、导入文件的注意事项: ① 导入路径建议写 相对路径,且不能省略 ./ 和 ../ ② 文件…...