当前位置: 首页 > news >正文

shardingsphere-jdbc集成Seata分布式事务

1、导入相关依赖

        <!-- shardingsphere-jdbc --><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc</artifactId><version>5.5.1</version></dependency><!-- shardingsphere 集成 seata AT 模式 --><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-transaction-base-seata-at</artifactId><version>5.5.1</version></dependency><dependency><groupId>org.apache.seata</groupId><artifactId>seata-all</artifactId><version>2.3.0</version><exclusions><exclusion><groupId>org.antlr</groupId><artifactId>antlr4-runtime</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><exclusions><exclusion><groupId>com.netflix.archaius</groupId><artifactId>archaius-core</artifactId></exclusion></exclusions></dependency>

备注:
【1】shardingsphere-transaction-base-seata-at 的版本最好与 shardingsphere-jdbc 版本一致
【2】seata-all 版本最好与 seata-server 服务端版本一致

2、在应用服务的 classpath 目录下创建以下配置文件

【1】sharding-config.yml:用于支持读写分离。这里以应用已经集成了 shardingsphere-jdbc 为前提,可参考:
https://blog.csdn.net/hkl_Forever/article/details/146602740

【2】seata.conf:用于 shardingsphere-jdbc 支持 seata 分布式事务,内容案例如下:

shardingsphere.transaction.seata.at.enable = true
shardingsphere.transaction.seata.tx.timeout = 120client {application.id = order-servicetransaction.service.group = default_tx_group
}service {vgroupMapping.default_tx_group = "default"default.grouplist = "服务IP:8091"
}

备注:
(1)事务组名称可以自定义,但要与seata服务端配置文件(seata-server.yml)中配置的事务组名称一致(否则报错),
(2)注意 default_tx_group、default 的映射关系要对应



【3】registry.conf:用于访问 seata 服务所在的注册中心和配置中心,内容案例如下:

registry {type = "nacos"nacos {serverAddr = "http://nacos服务ip:8850"username = "xxx"password = "xxx"namespace = "xxx"group = "DEFAULT_GROUP"}
}config {type = "nacos"nacos {serverAddr = "http://nacos服务ip:8850"username = "xxx"password = "xxx"namespace = "xxx"group = "DEFAULT_GROUP"dataId = "seata-server.yml" # Seata服务端的配置文件,一定要正确保证能访问到该文件}
}

【4】在集成 seata 服务对应的数据库中创建 undo_log 表,(此为必须,否则全局事务无法回滚),可参考:
https://blog.csdn.net/hkl_Forever/article/details/145803842

3、传递 TX_XID(全局事务id)

【1】在调用方的服务中配置openfeign的接口 RequestInterceptor 的实现类进行传递

@Configuration
public class TransferTxXidInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate requestTemplate) {//---------------------- 传递 seata 的 TX_XID  start ---------------------String xid = RootContext.getXID();if (StrUtil.isNotBlank(xid)) {requestTemplate.header(RootContext.KEY_XID, xid);}//---------------------- 传递 seata 的 TX_XID  end ---------------------}}

【2】在被调用方的服务中配置 seata 支持的事务传播拦截器,获取调用方传递过来的 TX_XID

@Configuration
public class JakartaSeataConfig {/*** <p>微服务事务传播拦截器(适用SpringBoot 3.x)</p>*/@Beanpublic JakartaSeataWebMvcConfigurer getJakartaSeataWebMvcConfigurer() {return new JakartaSeataWebMvcConfigurer();}//    /**
//     * <p>微服务事务传播拦截器(适用SpringBoot 2.x)</p>
//     */
//    @Bean
//    public SeataWebMvcConfigurer getSeataWebMvcConfigurer() {
//        return new SeataWebMvcConfigurer();
//    }}

4、验证测试,启用微服务应用

调用方代码案例

	@Transactional(rollbackFor = Exception.class)@Overridepublic void saveOrder(AddOrderReq data) {if (ObjUtil.isNull(data)) {return;}//保存订单Order order = BeanUtil.copyProperties(data, Order.class);order.setOrderNo("S-" + IdUtil.getSnowflake().nextIdStr());order.setOrderTotalPrice(ObjUtil.defaultIfNull(data.getOrderTotalPrice(), NumberUtil.toBigDecimal(0.00)));this.save(order);//记录支付流水InsPaymentFlowReq insPaymentFlowReq = new InsPaymentFlowReq();insPaymentFlowReq.setOrderNo(order.getOrderNo());insPaymentFlowReq.setCostPrice(order.getOrderTotalPrice());insPaymentFlowReq.setRemark(order.getRemark());paymentFlowClient.insPaymentFlow(insPaymentFlowReq);ThrowUtil.fail("order服务出错了!");}

被调用方代码案例

    @Transactional(rollbackFor = {Exception.class})@Overridepublic void insPaymentFlow(InsPaymentFlowReq data) {if (ObjUtil.isNull(data)) {return;}PaymentFlow paymentFlow = BeanUtil.copyProperties(data, PaymentFlow.class);paymentFlow.setFlowNo("F-" + IdUtil.getSnowflake().nextIdStr());this.save(paymentFlow);//ThrowUtil.fail("payment服务出错了!");}

经测试验证后,在 shardingsphere-jdbc 读写分离的前提下,服务调用链路中有报错双方都可以正常回滚,符合预期

5、总结注意

【1】shardingsphere-jdbc 集成 seata 与 单数据源集成 seata 完全是各自独立的方式(不搭嘎)

【2】shardingsphere-jdbc 集成 seata 后,切记在主方法上要使用 @Transactional 不能使用 @GlobalTransactional。单数据源集成 seata 则在主方法上使用 @GlobalTransactional 即可

【3】shardingsphere-jdbc 集成 seata 后,如果只使用读写分离场景没问题。但如果使用分片、分库分表场景则 seata 事务不靠谱(不建议分片场景和seata一起使用)

相关文章:

shardingsphere-jdbc集成Seata分布式事务

1、导入相关依赖 <!-- shardingsphere-jdbc --><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc</artifactId><version>5.5.1</version></dependency><!-- shardingspher…...

基于区块链的技术应用探索

文章目录 前言一、区块链技术的核心特性1.1 去中心化1.2 不可篡改性1.3 透明性与可追溯性1.4 智能合约机制 二、区块链的典型应用场景2.1 金融与支付2.2 溯源与供应链管理2.3 数字身份与数据隐私2.4 数字资产与NFT2.5 公共服务与政务透明 三、区块链的分类1.按权限管理方式分类…...

MQ(RabbitMQ)消息重复消费问题的全面解决方案

MQ消息重复消费是分布式系统中的常见问题&#xff0c;主要由网络问题、消费者故障、消息重试机制等引起。以下是针对RabbitMQ的完整解决方案体系&#xff1a; 一、消息生产端解决方案 1. 消息幂等设计 全局唯一消息ID&#xff1a; MessageProperties props MessagePropert…...

windows Cursor 配置MCP的小坑

以高德地图MCP举例 按需求配置好以后&#xff0c;会提示 Client closed 解决方案&#xff0c; windows 需要更改一下 commandargs 新增一个npx保存后Cursor设置MCP页面Refresh一下即可&#xff0c;打开的终端不要关闭 最后贴一下文本代码&#xff0c;方便复制粘贴 {"m…...

探秘串口服务器厂家:背后的故事与应用

在科技飞速发展的今天&#xff0c;串口服务器作为连接串口设备与网络的桥梁&#xff0c;在工业自动化、智能交通、智能家居等众多领域发挥着关键作用。你是否好奇&#xff0c;那些生产串口服务器的厂家究竟有着怎样的故事&#xff1f;它们的产品背后又蕴含着怎样的原理呢&#…...

二叉树详细讲解(2/2)

4. 实现链式结构二叉树 ⽤链表来表⽰⼀棵⼆叉树&#xff0c;即⽤链来指⽰元素的逻辑关系。通常的⽅法是链表中每个结点由三个域组成&#xff0c;数据域和左右指针域&#xff0c;左右指针分别⽤来给出该结点左孩⼦和右孩⼦所在的链结点的存储地址&#xff0c;其结构如下&#…...

SpringBoot整合Redis限流

通过一个完整的Spring Boot项目演示如何用Redis实现简单的API限流功能。我们将从零开始搭建项目。 一、环境准备 1.1 开发环境要求 JDK 1.8IntelliJ IDEA&#xff08;推荐&#xff09;Redis 5.0&#xff08;本地安装&#xff09;Postman&#xff08;测试用&#xff09; 1.2…...

(Matlab)自动驾驶仿真 设计驾驶场景、配置传感器并生成合成 数据

驾驶场景仿真平台核心功能 一、场景搭建与编辑 ‌可视化场景构建‌ 使用拖放界面创建道路网络和角色模型&#xff08;车辆、行人等&#xff09;支持欧洲新车评估计划&#xff08;Euro NCAP&#xff09;测试协议及其他预置场景模板 二、传感器配置 ‌车载传感器系统‌ 支持…...

接口测试(get请求方法)-----------实战演练

1.最简单的get请求方法 eg:请求一个王者荣耀语音包的接口 接口文档如下&#xff1a; 2.把接口地址、请求方法、请求参数写到postman相应位置 3.填写请求参数的值&#xff0c;点击发送按钮&#xff0c;即可获得到返回参数...

【赵渝强老师】TiDB的列存引擎:TiFlash

TiDB的TiFlash提供列式存储&#xff0c;且拥有借助ClickHouse高效实现的协处理器层。除此以外&#xff0c;它与TiKV非常类似&#xff0c;依赖同样的Multi-Raft体系&#xff0c;以Region为单位进行数据复制和分散。TiFlash以低消耗不阻塞TiKV写入的方式&#xff0c;实时复制TiKV…...

《vue3学习手记3》

标签的ref属性 vue3和vue2中的ref属性&#xff1a; 用在普通DOM标签上&#xff0c;获取的是DOM节点 ref用在组件标签上&#xff0c;获取的是组件实例对象 区别在于&#xff1a; 1.vue3中person子组件中的数据父组件App不能直接使用&#xff0c;需要引入并使用defineExpose才可…...

【Vue】从 MVC 到 MVVM:前端架构演变与 Vue 的实践之路

个人博客&#xff1a;haichenyi.com。感谢关注 一. 目录 一–目录二–架构模式的演变背景​三–MVC&#xff1a;经典的分层起点​四–MVP&#xff1a;面向接口的解耦尝试​五–MVVM&#xff1a;数据驱动的终极形态​​六–Vue&#xff1a;MVVM 的现代化实践​​​ 二. 架构模…...

Docker Compose 命令实现动态构建和部署

Docker Compose 命令实现动态构建和部署 一、编写支持动态版本号的 docker-compose.yml version: 3.8services:myapp:build: context: . # Dockerfile所在目录args:APP_VERSION: ${TAG:-latest} # 从环境变量获取版本号&#xff0c;默认latestimage: myapp:${TAG:-latest} …...

工厂模式实现案例

场景一&#xff1a;配置文件解析&#xff08;工厂模式实现&#xff09; 1. 定义解析器接口与具体实现 from abc import ABC, abstractmethod import json import yaml # 需要安装PyYAML库&#xff1a;pip install pyyamlclass ConfigParser(ABC):"""配置文件解…...

Vue3.5 企业级管理系统实战(十五):其他全局设置项

在设置面板中&#xff0c;除了主题颜色的选择设置&#xff0c;还可以添加其他全局配置选项&#xff0c;如 tagsView 导航栏&#xff0c;Logo 的显示隐藏配置等。 1 Settings 的 Pinia 配置 在 src/stores/settings.ts 中添加要持久存储的全局配置项&#xff0c;这里是 tagsVi…...

L2-052 吉利矩阵分

L2-052 吉利矩阵 - 团体程序设计天梯赛-练习集 所有元素为非负整数&#xff0c;且各行各列的元素和都等于 7 的 33 方阵称为“吉利矩阵”&#xff0c;因为这样的矩阵一共有 666 种。 本题就请你统计一下&#xff0c;把 7 换成任何一个 [2,9] 区间内的正整数 L&#xff0c;把矩…...

408 计算机网络 知识点记忆(9)

前言 本文基于王道考研课程与湖科大计算机网络课程教学内容&#xff0c;系统梳理核心知识记忆点和框架&#xff0c;既为个人复习沉淀思考&#xff0c;亦希望能与同行者互助共进。&#xff08;PS&#xff1a;后续将持续迭代优化细节&#xff09; 往期内容 408 计算机网络 知识…...

矩阵基础+矩阵转置+矩阵乘法+行列式与逆矩阵

GPU渲染过程 矩阵 什么是矩阵&#xff08;Matrix&#xff09; 向量 &#xff08;3&#xff0c;9&#xff0c;88&#xff09; 点乘&#xff1a;计算向量夹角 叉乘&#xff1a;计算两个向量构成平面的法向量。 矩阵 矩阵有3行&#xff0c;2列&#xff0c;所以表示为M32 获取固…...

如何在 .NET 环境中使用 Npgsql 驱动连接 KaiwuDB

在现代软件开发中&#xff0c;数据库连接和操作是任何应用程序的核心部分。本文将介绍如何在 .NET 环境下&#xff0c;使用 Npgsql 驱动连接 KaiwuDB&#xff0c;并执行基本的数据库操作&#xff0c;包括创建表、插入数据和查询操作。我们假设您已经安装并配置好了 KaiwuDB 数据…...

【代理错误 django】Request error: HTTPSConnectionPool(host=‘‘, port=443): 、

❗问题 ❶&#xff1a;仍然是代理错误&#xff08;ProxyError&#xff09; 错误日志&#xff1a; Request error: HTTPSConnectionPool(hostxueshu.baidu.com, port443): Max retries exceeded ... Caused by ProxyError(Unable to connect to proxy, FileNotFoundError(2, N…...

5.9 《GPT-4调试+测试金字塔:构建高可靠系统的5大实战策略》

5.4 测试与调试:构建企业级质量的保障体系 关键词:测试金字塔模型、GPT-4调试助手、LangChain调试模式、异步任务验证 测试策略设计(测试金字塔实践) #mermaid-svg-RblGbJVMnCIShiCW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill…...

Maven 多仓库和多镜像配置

Maven是一个流行的Java项目构建和管理工具。在Maven中&#xff0c;我们可以配置多个仓库源来下载和管理依赖项。同时&#xff0c;我们还可以使用repositories和mirrors进行配置&#xff0c;以满足特定的需求。 首先&#xff0c;让我们了解一下repositories和mirrors的作用。在M…...

案例驱动的 IT 团队管理:创新与突破之路:第五章 创新管理:从机制设计到文化养成-5.1 创新激励体系-5.1.3失败案例的价值转化机制

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 失败案例的价值转化机制&#xff1a;IT团队创新管理中的"黑天鹅"炼金术1. 认知重构&#xff1a;重新定义失败的价值1.1 传统失败管理的困境1.2 失败价值转化模型 …...

华为纯血 卓易通 使用记录

&#xff08;1&#xff09;我们在测试华为纯血的时候&#xff0c;发现了&#xff0c;使用咱们的基站上的wifi, wifi与手机终端是互相ping 通的&#xff0c; 手机可以发信号到基站&#xff0c;但基站收到信号后&#xff0c;也发出信号 &#xff0c;但信号 不能到达手机。 这个是…...

计算机网络中科大 - 第7章 网络安全(详细解析)-以及案例

目录 &#x1f6e1;️ 第8章&#xff1a;网络安全&#xff08;Network Security&#xff09;优化整合笔记&#x1f4cc; 本章学习目标 一、网络安全概念二、加密技术&#xff08;Encryption&#xff09;1. 对称加密&#xff08;Symmetric Key&#xff09;2. 公钥加密&#xff0…...

初识Redis · set和zset

目录 前言&#xff1a; set 基本命令 交集并集差集 内部编码和应用场景 zset 基本命令 交集并集差集 内部编码和应用场景 应用场景&#xff08;AI生成&#xff09; 排行榜系统 应用背景 设计思路 热榜系统 应用背景 设计思路 热度计算方式 总结对比表 前言&a…...

Prometheus+Grafana+K8s构建监控告警系统

一、技术介绍 Prometheus、Grafana及K8S服务发现详解 Prometheus简介 Prometheus是一个开源的监控系统和时间序列数据库&#xff0c;最初由SoundCloud开发&#xff0c;现已成为CNCF(云原生计算基金会)的毕业项目‌。它专注于实时监控和告警&#xff0c;特别适合云原生和分布式…...

用 AI + 前端实现一个简易产品图生成器:上传商品标题 → 多场景展示图自动生成

文章目录 一、项目背景与功能概述核心功能&#xff1a; 二、技术选型与环境准备安装依赖与 API Key 配置 三、核心功能模块实现1. 商品图生成器核心逻辑2. 组件模板与 UI 结构 四、功能拓展与优化建议&#xff08;附代码思路&#xff09;✅ 1. 本地历史记录可视化✅ 3. 支持图片…...

实现高效灵活的模糊搜索:JavaScript中的多条件过滤实践

现代Web应用中&#xff0c;数据搜索功能是用户体验的关键部分。本文将深入探讨如何实现一个高效灵活的模糊搜索函数&#xff0c;支持多条件组合查询、精确匹配、模糊匹配以及时间范围筛选。 需求分析 我们需要一个通用的搜索函数&#xff0c;能够处理以下场景&#xff1a; 多…...

ChatterBot的JupyterLab实践指南,从零开始构建AI聊天机器人

从手机上的语音助手到电商平台的客服机器人&#xff0c;这些能理解人类语言的程序背后&#xff0c;都离不开自然语言处理&#xff08;NLP&#xff09;技术的支撑。本文将以JupyterLab为实验平台&#xff0c;带您亲手打造一个会对话的AI机器人。通过这个项目&#xff0c;您不仅能…...

《深度学习》课程之卷积神经网络原理与实践教学设计方案

《深度学习》课程之卷积神经网络原理与实践教学设计方案 一、教学目标设计 &#xff08;一&#xff09;知识目标 学生能够准确描述卷积神经网络&#xff08;CNN&#xff09;的基本定义&#xff0c;包括其核心组成部分&#xff08;如卷积层、池化层、全连接层等&#xff09;及…...

快手OneRec 重构推荐系统:从检索排序到生成统一的跃迁

文章目录 1. 背景2. 方法2.1 OneRec框架2.2 Preliminary2.3 生成会话列表2.4 利用奖励模型进行迭代偏好对齐2.4.1 训练奖励模型2.4.2 迭代偏好对齐 3. 总结 昨天面试的时候聊到了OneRec&#xff0c;但是由于上次看这篇文章已经是一个月之前&#xff0c;忘得差不多了&#xff0c…...

算法——直接插入排序

目录 一、直接插入排序的定义 二、直接插入排序的原理 三、直接插入排序的特点 四、代码实现 一、直接插入排序的定义 直接插入排序是一种简单直观的排序算法&#xff0c;其基本思想是将一个元素插入到已经排好序的部分数组中&#xff0c;使得插入后的数组仍然保持有序。具…...

Linux 软件管理

文章目录 dpkg软件包管理工具APT软件包管理工具apt-get命令apt-cache Linux操作系统主要支持RPM和Deb两种软件包管理工具。 RPM&#xff08;Redhat Package Manager&#xff09;是一种用于互联网下载包的打包及安装工具。 其原始设计理念是开放的&#xff0c;不仅可以在Redhat平…...

电力实训中应注意以下安全事项

电力实训中应注意以下安全事项&#xff1a; 一、环境准备与设备检查 保持实训场地整洁通风&#xff0c;清除易燃物与杂物&#xff0c;确保操作空间充足。 电路容量需匹配设备功率&#xff0c;安装漏电保护器及空气开关。 非带电金属设备外壳应接地&#xff0c;定期检查线路…...

序列化-流量统计

新建文件夹及文件 编写流量统计的Bean对象 package com.root.mapreduce.writable; import org.apache.hadoop.io.Writable; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; //1 继承Writable接口 public class FlowBean implements Writab…...

矩阵游戏--二分图的匈牙利算法

https://www.luogu.com.cn/problem/P1129 学习路线---https://blog.csdn.net/qq_39304630/article/details/108135381 1.二分图就是两个独立的两个集合&#xff0c;如这里是行和列 2.匈牙利匹配就是媒婆拉媒&#xff0c;没伴侣或者伴侣可以换就将当前的塞给她 3.最后true的…...

spring security解析

Spring Security 中文文档 :: Spring Security Reference 1. 密码存储 最早是明文存储&#xff0c;但是攻击者获得数据库的数据后就能得到用户密码。 于是将密码单向hash后存储&#xff0c;然后攻击者利用彩虹表&#xff08;算法高级&#xff08;23&#xff09;-彩虹表&…...

【技巧】chol分解时,矩阵非正定时的临时补救措施,以MATLAB为例

针对非正定矩阵无法进行标准Cholesky分解的解决方案及MATLAB代码实现&#xff0c;结合不同应用场景的需求分层解析 文章目录 数值修正方法修正Cholesky分解LDL分解 矩阵变换与重构特征值修正乘积法构造正定矩阵 替代分解与降维方法QR分解与SVD主成分分析&#xff08;PCA&#x…...

Hi3518E官方录像例程源码流程分析(三)

文章目录 第二阶段&#xff0c;初始化第一阶段计算好的参数SAMPLE_COMM_SYS_Init 第三阶段&#xff0c;启动VI和chn捕获SAMPLE_COMM_VI_StartVi&#xff08;&#xff09;SAMPLE_COMM_VI_StartBT656小阶段1 SAMPLE_COMM_VI_StartMIPI_BT1120&#xff08;&#xff09;小阶段1 SAM…...

37.Java 异步回调(CompletableFuture 概述、CompletableFuture 使用)

一、CompletableFuture 概述 CompletableFuture 在 Java 里面被用于异步编程&#xff0c;异步通常意味着非阻塞&#xff0c;可以使得任务单独运行在与主线程分离的其他线程中&#xff0c;并且通过回调可以在主线程中得到异步任务的执行状态&#xff0c;是否完成&#xff0c;和是…...

数学建模AI智能体(4.16大更新)

别的不说就说下面这几点&#xff0c;年初内卷到现在&#xff0c;就现阶段AI水平&#xff0c;卷出了我比较满意的作品&#xff0c;这里分享给各位同学&#xff0c;让你们少走弯路&#xff1a; 1.轻松辅导学生 2.帮助学习 3.突破知识壁垒&#xff0c;缩短与大佬的差距 4.打破…...

Python 第三节 流程控制

目录 1.分支结构 条件控制 2.循环语句 3.循环控制语句 4.嵌套循环 控制代码执行的顺序 顺序结构分支结构循环结构 1.分支结构 条件控制 让代码有自主选择的能力, 当满足某个条件的时候执行对应的操作 1.1 if语句 语法格式 if 判断条件:执行语句(当判断条件为真的时候执…...

深入探究Linux编译器gcc/g++:从基础到进阶

目录 一、编译的幕后流程 &#xff08;一&#xff09;预处理&#xff1a;宏与文件的魔法融合 &#xff08;二&#xff09;编译&#xff1a;代码规范性的严格审视 &#xff08;三&#xff09;汇编&#xff1a;迈向机器语言的关键一步 &#xff08;四&#xff09;连接&a…...

用户态网络缓冲区

用户态网络缓冲区 缓冲区作用 用于临时存储数据以便高效地进行读写操作。用户态缓冲区位于用户空间中&#xff0c;与内核空间中的缓冲区&#xff08;内核缓冲区&#xff09;相对。 用户态接受缓存区 粘包问题&#xff0c;缓存非完整数据包 生产者的速度 > 消费者的速…...

解决Flutter 2.10.5在升级Xcode 16后的各种报错

Flutter 环境 Flutter version 2.10.5Dart version 2.16.2DevTools version 2.9.2CocoaPods version 1.16.2Xcode 16.3 问题一&#xff1a;XCResult parsing error: Error: This command is deprecated and will be removed in a future release, --legacy flag is required t…...

【学习笔记】计算机网络(八)—— 音频/视频服务

第8章 互联网上的音频/视频服务 文章目录 第8章 互联网上的音频/视频服务8.1概述8.2 流式存储音频/视频8.2.1 具有元文件的万维网服务器8.2.2 媒体服务器8.2.3 实时流式协议 RTSP 8.3 交互式音频/视频8.3.1 IP 电话概述8.3.2 IP电话所需要的几种应用协议8.3.3 实时运输协议 RTP…...

OpenCv高阶(三)——图像的直方图、图像直方图的均衡化

目录 一、直方图 1、计算并显示直方图 2、使用matplotlib方法绘制直方图&#xff08;不划分小的子区间&#xff09; 3、使用opencv的方法绘制直方图 &#xff08;划分16个小的子亮度区间&#xff09; 4、绘制彩色图像的直方图&#xff0c;将各个通道的直方图值都画出来 二、…...

OpenCV 图形API(39)图像滤波----同时计算图像在 X 和 Y 方向上的一阶导数函数SobelXY()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::gapi::SobelXY 函数是 OpenCV 的 G-API 模块中用于同时计算图像在 X 和 Y 方向上的一阶导数&#xff08;即 Sobel 边缘检测&#xff09;的一…...

领麦微:电炖锅红外测温传感器应用,告别糊锅干烧

领麦微红外测温传感器在电炖锅中的应用&#xff0c;特别是在应对高温环境、实现精准测温以保留食材营养、有效防止干烧与糊锅现象&#xff0c;以及提供安全烹饪新保障等方面&#xff0c;展现出了其独特的技术优势和应用价值。以下是对这些应用特点的深入剖析&#xff1a; 一、高…...