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

Spring Boot 与 RabbitMQ 的深度集成实践(二)

集成步骤详解

配置 RabbitMQ 连接信息

在 Spring Boot 项目中,通常在application.properties或application.yml文件中配置 RabbitMQ 的连接信息。以application.yml为例,配置如下:

 

spring:

rabbitmq:

host: localhost

port: 5672

username: guest

password: guest

virtual - host: /

上述配置中:

  • host指定了 RabbitMQ 服务器的地址,这里假设 RabbitMQ 运行在本地。
  • port指定了 RabbitMQ 服务的端口,默认端口是 5672。
  • username和password是连接 RabbitMQ 服务器所需的用户名和密码,默认的用户名和密码都是guest。不过在实际生产环境中,应使用更安全的用户名和密码组合。
  • virtual - host表示虚拟主机,它用于逻辑隔离不同的应用或业务模块之间的消息队列。这里使用根虚拟主机/,在实际应用中,可以根据业务需求创建不同的虚拟主机。例如,对于不同的业务线,可以分别使用/business1、/business2等虚拟主机,每个虚拟主机有独立的队列、交换机和权限控制 。

创建消息队列和交换机

通过配置类可以方便地创建消息队列、交换机以及它们之间的绑定关系。在 Spring Boot 中,使用@Configuration注解来定义配置类,并使用@Bean注解创建所需的 Bean。

下面分别展示direct、topic、fanout类型交换机的配置示例:

Direct Exchange(直连交换机)配置示例

 

import org.springframework.amqp.core.Binding;

import org.springframework.amqp.core.BindingBuilder;

import org.springframework.amqp.core.Queue;

import org.springframework.amqp.core.DirectExchange;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class DirectRabbitConfig {

// 定义队列

@Bean

public Queue directQueue() {

return new Queue("direct.queue", true);

}

// 定义直连交换机

@Bean

public DirectExchange directExchange() {

return new DirectExchange("direct.exchange", true, false);

}

// 绑定队列和交换机,设置路由键

@Bean

public Binding directBinding() {

return BindingBuilder.bind(directQueue()).to(directExchange()).with("direct.routing.key");

}

}

在这个配置中:

  • directQueue方法创建了一个名为direct.queue的队列,true表示该队列是持久化的,即 RabbitMQ 服务器重启后队列依然存在。
  • directExchange方法创建了一个名为direct.exchange的直连交换机,同样设置为持久化。
  • directBinding方法通过BindingBuilder将队列和交换机进行绑定,并指定了路由键direct.routing.key。直连交换机的特点是根据路由键进行精确匹配,只有当消息的路由键与绑定的路由键完全一致时,消息才会被路由到对应的队列。

Topic Exchange(主题交换机)配置示例

 

import org.springframework.amqp.core.Binding;

import org.springframework.amqp.core.BindingBuilder;

import org.springframework.amqp.core.Queue;

import org.springframework.amqp.core.TopicExchange;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class TopicRabbitConfig {

// 定义第一个队列

@Bean

public Queue topicQueue1() {

return new Queue("topic.queue1", true);

}

// 定义第二个队列

@Bean

public Queue topicQueue2() {

return new Queue("topic.queue2", true);

}

// 定义主题交换机

@Bean

public TopicExchange topicExchange() {

return new TopicExchange("topic.exchange", true, false);

}

// 绑定第一个队列和交换机,设置路由键模式为topic.#

@Bean

public Binding topicBinding1() {

return BindingBuilder.bind(topicQueue1()).to(topicExchange()).with("topic.#");

}

// 绑定第二个队列和交换机,设置路由键模式为topic.man

@Bean

public Binding topicBinding2() {

return BindingBuilder.bind(topicQueue2()).to(topicExchange()).with("topic.man");

}

}

这里:

  • topicQueue1和topicQueue2分别创建了两个持久化队列。
  • topicExchange创建了一个名为topic.exchange的主题交换机。
  • topicBinding1将topicQueue1与topicExchange绑定,并使用topic.#作为路由键模式,其中#是通配符,表示匹配零个或多个单词。这意味着只要消息的路由键以topic.开头,就会被路由到topicQueue1。
  • topicBinding2将topicQueue2与topicExchange绑定,路由键模式为topic.man,只有当消息的路由键为topic.man时,消息才会被路由到topicQueue2。主题交换机通过通配符模式实现了更灵活的消息路由,适用于需要根据不同规则进行消息分发的场景 。

Fanout Exchange(扇形交换机)配置示例

 

import org.springframework.amqp.core.Binding;

import org.springframework.amqp.core.BindingBuilder;

import org.springframework.amqp.core.Queue;

import org.springframework.amqp.core.FanoutExchange;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class FanoutRabbitConfig {

// 定义第一个队列

@Bean

public Queue fanoutQueue1() {

return new Queue("fanout.queue1", true);

}

// 定义第二个队列

@Bean

public Queue fanoutQueue2() {

return new Queue("fanout.queue2", true);

}

// 定义扇形交换机

@Bean

public FanoutExchange fanoutExchange() {

return new FanoutExchange("fanout.exchange", true, false);

}

// 绑定第一个队列和交换机

@Bean

public Binding fanoutBinding1() {

return BindingBuilder.bind(fanoutQueue1()).to(fanoutExchange());

}

// 绑定第二个队列和交换机

@Bean

public Binding fanoutBinding2() {

return BindingBuilder.bind(fanoutQueue2()).to(fanoutExchange());

}

}

在这个配置类中:

  • fanoutQueue1和fanoutQueue2创建了两个持久化队列。
  • fanoutExchange创建了一个名为fanout.exchange的扇形交换机。
  • fanoutBinding1和fanoutBinding2分别将两个队列与扇形交换机进行绑定。扇形交换机的特点是将消息广播到所有与之绑定的队列,而不考虑路由键,只要有队列绑定到该交换机,消息就会被发送到这些队列,适用于需要将消息同时发送给多个消费者的场景 。

编写消息生产者

创建一个消息生产者类,通过注入RabbitTemplate来发送消息。RabbitTemplate是 Spring AMQP 提供的用于发送消息的核心类,它封装了与 RabbitMQ 交互的细节,提供了便捷的消息发送方法。

以下是一个消息生产者类的示例,包含普通消息发送和带自定义属性消息发送的示例:

 

import org.springframework.amqp.rabbit.core.RabbitTemplate;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.util.HashMap;

import java.util.Map;

@Service

public class RabbitMQProducer {

@Autowired

private RabbitTemplate rabbitTemplate;

// 发送普通消息

public void sendMessage(String exchange, String routingKey, String message) {

rabbitTemplate.convertAndSend(exchange, routingKey, message);

System.out.println("Sent message: " + message);

}

// 发送带自定义属性的消息

public void sendMessageWithProperties(String exchange, String routingKey, String message) {

Map<String, Object> headers = new HashMap<>();

headers.put("customHeader", "customValue");

rabbitTemplate.convertAndSend(exchange, routingKey, message, messagePostProcessor -> {

messagePostProcessor.getMessageProperties().setHeaders(headers);

return messagePostProcessor;

});

System.out.println("Sent message with properties: " + message);

}

}

在这个生产者类中:

  • sendMessage方法接收交换机名称、路由键和消息内容作为参数,通过rabbitTemplate.convertAndSend方法将消息发送到指定的交换机和队列。该方法会根据路由键将消息路由到对应的队列,如果路由键匹配成功,消息就会被存储在队列中等待消费者获取。
  • sendMessageWithProperties方法展示了如何发送带有自定义属性的消息。首先创建一个Map来存储自定义属性,这里添加了一个名为customHeader,值为customValue的属性。然后使用rabbitTemplate.convertAndSend的另一个重载方法,该方法接收一个MessagePostProcessor作为参数。在MessagePostProcessor的回调函数中,将自定义属性设置到消息的属性中,从而实现发送带有自定义属性的消息 。这种方式在实际应用中非常有用,例如可以通过自定义属性来传递一些额外的元数据,如消息的优先级、创建时间等,以便消费者在处理消息时根据这些属性进行不同的处理逻辑。

编写消息消费者

创建消息消费者类,使用@RabbitListener注解来监听指定的队列,并处理接收到的消息。@RabbitListener是 Spring AMQP 提供的注解,用于声明一个方法作为消息监听器,当队列中有新消息时,该方法会被自动调用。

以下是一个消息消费者类的示例,涵盖消息处理逻辑和异常处理:

 

import org.springframework.amqp.rabbit.annotation.RabbitListener;

import org.springframework.stereotype.Component;

@Component

public class RabbitMQConsumer {

@RabbitListener(queues = "direct.queue")

public void receiveMessage(String message) {

try {

// 消息处理逻辑

System.out.println("Received message: " + message);

// 模拟业务处理

Thread.sleep(1000);

System.out.println("Message processed successfully.");

} catch (Exception e) {

// 异常处理

System.out.println("Error processing message: " + e.getMessage());

// 可以根据具体业务需求进行重试、记录日志或其他操作

}

}

}

在这个消费者类中:

  • @RabbitListener(queues = "direct.queue")注解表示该方法监听名为direct.queue的队列。当该队列中有消息时,receiveMessage方法会被触发。
  • 在receiveMessage方法中,首先打印接收到的消息,然后通过Thread.sleep(1000)模拟业务处理过程,这里让线程睡眠 1 秒来模拟一些耗时操作。如果在处理过程中发生异常,会捕获异常并打印错误信息。在实际应用中,可以根据业务需求进行更复杂的异常处理,例如将消息放入死信队列进行后续处理,或者进行消息重试。如果是因为网络波动等临时原因导致消息处理失败,可以设置重试机制,让消息重新被消费;如果是因为消息内容本身错误等不可恢复的原因,可以将消息放入死信队列,以便后续进行人工处理或分析 。通过合理的异常处理,可以提高系统的稳定性和可靠性,确保消息能够被正确处理。

相关文章:

Spring Boot 与 RabbitMQ 的深度集成实践(二)

集成步骤详解 配置 RabbitMQ 连接信息 在 Spring Boot 项目中&#xff0c;通常在application.properties或application.yml文件中配置 RabbitMQ 的连接信息。以application.yml为例&#xff0c;配置如下&#xff1a; spring: rabbitmq: host: localhost port: 5672 usern…...

医疗信息系统安全防护体系的深度构建与理论实践融合

一、医疗数据访问系统的安全挑战与理论基础 1.1 系统架构安全需求分析 在医疗信息系统中&#xff0c;基于身份标识的信息查询功能通常采用分层架构设计&#xff0c;包括表现层、应用层和数据层。根据ISO/IEC 27001信息安全管理体系要求&#xff0c;此类系统需满足数据保密性…...

多模态大语言模型arxiv论文略读(八十)

## MMWorld: Towards Multi-discipline Multi-faceted World Model Evaluation in Videos ➡️ 论文标题&#xff1a;MMWorld: Towards Multi-discipline Multi-faceted World Model Evaluation in Videos ➡️ 论文作者&#xff1a;Xuehai He, Weixi Feng, Kaizhi Zheng, Yuji…...

FFmpeg:多媒体处理的终极利器

FFmpeg详细介绍 1. 定义与基本概述 FFmpeg是一套开源的跨平台多媒体处理工具集,最初由法国程序员Fabrice Bellard于2000年开发,其名称源自“Fast Forward MPEG”,体现了其高效处理MPEG格式的能力。它不仅是命令行工具,还包含多个库和开发套件,支持视频转码、剪辑、合并、…...

【Leetcode】取余/2的幂次方

给定一个非负整数 num&#xff0c;反复将各个位上的数字相加&#xff0c;直到结果为一位数。返回这个结果。 示例 1: 输入: num 38 输出: 2 解释: 各位相加的过程为&#xff1a; 38 --> 3 8 --> 11 11 --> 1 1 --> 2 由于 2 是一位数&#xff0c;所以返回 2。 …...

程序代码篇---ESP32的数据采集

文章目录 前言 前言 本文简单介绍了ESP32可以怎样采集数据。...

系统架构设计(十三):虚拟机体系结构风格

概念 虚拟机&#xff08;Virtual Machine&#xff09;体系结构风格&#xff0c;是指将整个系统抽象为一台“虚拟机”&#xff0c;通过解释或模拟的方式运行应用程序。 它本质上提供了一种“平台中立”的运行环境&#xff0c;典型代表就是 Java 虚拟机&#xff08;JVM&#xf…...

lvs-dr部署

实验准备&#xff1a; 准备4台设备&#xff0c;1台作为客户机&#xff0c;3台作为服务器&#xff0c;服务器中1台作为调度器&#xff0c;2台作为后端真实访问服务器。并关闭所有防火墙与核心防护。 systemctl stop firewalld setenforce 0 实验开始 调度器配置 yum -y ins…...

数据库blog2_数据结构与效率

&#x1f33f;计算机中的数据————存储结构与逻辑结构 &#x1f342;存储结构&#xff08;物理结构&#xff09; 定义&#xff1a;存储结构是指数据在计算机存储器中的实际存储方式&#xff0c;由计算机硬件特性决定。它涉及到数据的物理位置和存储顺序。存储结构直接影响数…...

聊天室项目总结

已实现的功能点&#xff1a; 存在的问题&#xff1a; 1.没有实现有含金量的创新功能点 2.太过于依赖工具&#xff0c;不喜欢自己看文章总结对知其然而不知其所以然&#xff0c;自己的理解比较少&#xff0c;懒于去思考 3.太过于依赖他人&#xff0c;自己的想法有点少&#x…...

数据结构:二叉树一文详解

数据结构:二叉树一文详解 前言一、二叉树的基本概念与结构特性1.1 二叉树的定义1.2 二叉树的特殊类型1.3 二叉树的性质 二、二叉树的遍历方式2.1 前序遍历&#xff08;Pre-order Traversal&#xff09;2.2 中序遍历&#xff08;In-order Traversal&#xff09;2.3 后序遍历&…...

2025年- H28-Lc136- 24.两两交换链表中的节点(链表)---java版

1.题目描述 2.思路 cur指针要先放在虚拟头节点&#xff0c;才能去操作第一个数和第二个数 先判断偶数个节点&#xff0c;再判断奇数个节点&#xff0c;否则会犯空指针异常。 &#xff08;1&#xff09;如果节点是偶数个节点&#xff0c;只要满足curr.nextnull&#xff0c;就说…...

ubuntu18.04通过cuda_11.3_xxx.run安装失败,电脑黑屏解决办法

项目场景&#xff1a; ubuntu18.04跑DG-SLAM相关代码&#xff0c;安装lietorch包报错&#xff0c;需要用到GPU。 问题描述 跑代码需要cuda11.3&#xff0c;系统里面有另外一个版本&#xff0c;运行cuda_11.3_xxx.run&#xff0c;同时也选择了driver&#xff0c;安装成功后&am…...

Linux之基础IO

目录 一、理解 "文件" 1.1、狭义理解 1.2、广义理解 1.3、文件操作的归类认知 1.4、系统角度 二、回顾C语言接口 2.1、打开文件 2.2、写文件 2.3、读文件 2.4、stdin & stdout & stderr 2.6、打开文件的方式 三、系统文件I/O 3.1、一种传递标志…...

上位机知识篇---涂鸦智能云平台

文章目录 前言 前言 本文简单介绍了涂鸦智能云平台。...

InfluxDB 3 Core + Java 11 + Spring Boot:打造高效物联网数据平台

一、 引言&#xff1a;为什么选择InfluxDB 3&#xff1f; 项目背景&#xff1a; 在我们的隧道风机监控系统中&#xff0c;实时数据的采集、存储和高效查询是至关重要的核心需求。风机运行产生的振动、倾角、电流、温度等参数是典型的时序数据&#xff0c;具有高并发写入、数据…...

Kubernetes控制平面组件:Kubelet详解(七):容器网络接口 CNI

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

Pandas 构建并评价聚类模型② 第六章

构建并评价聚类模型 构建并评价聚类模型一、数据读取与准备&#xff08;代码6 - 6部分&#xff09;结果代码解析 二、Kmeans聚类&#xff08;代码6 - 6部分&#xff09;结果代码解析 三、数据降维可视化&#xff08;代码6 - 6部分&#xff09;结果代码解析 四、FMI评价&#xf…...

【simulink】IEEE33节点系统潮流分析模型

目录 主要内容 程序内容 2.1 33节点simulink模型一览 2.2 节点模型图 下载链接 主要内容 该仿真采用simulink模型对33节点网络进行模拟仿真&#xff0c;在simulink模型中定义了33节点系统的电阻、电抗、节点连接关系等参数&#xff0c;通过控制块来实现信号连接关系&…...

彻底解决docker代理配置与无法拉取镜像问题

为什么会有这篇文章? 博主在去年为部署dify研究了docker,最后也是成功部署,但是因为众所周知的原因,卡ziji脖子 ,所以期间遇到各种网络问题的报错,好在最后解决了. 但时隔一年,博主最近因为学习原因又一次使用docker,原本解决的问题却又没来由的出现,且和之前有很多不同(有时…...

Linux 安装 Unreal Engine

需要对在unreal engine官网进行绑定github账号&#xff0c;然后到unreal engine github仓库中进行下载对应的版本&#xff0c;并进行安装unreal engine官网 github地址...

tensorflow图像分类预测

tensorflow图像分类预测 CPU版本和GPU版本二选一 CPU版本 pip -m install --upgrade pippip install matplotlib pillow scikit-learnpip install tensorflow-intel2.18.0GPU版本 工具 miniconda 升级依赖库 conda update --all创建目录 mkdir gpu-tf进入目录 cd gpu-tf创建虚…...

C++数组详解:一维和多维数组的定义、初始化、访问与遍历

1. 引言 数组是C中最基础的数据结构之一&#xff0c;用于存储相同类型的元素的集合。它提供了高效的内存访问方式&#xff0c;适用于需要快速查找和遍历数据的场景。本文将全面介绍&#xff1a; 一维数组的定义、初始化与遍历多维数组&#xff08;如二维数组&#xff09;的定…...

linux下编写shell脚本一键编译源码

0 前言 进行linux应用层编程时&#xff0c;经常会使用重复的命令对源码进行编译&#xff0c;然后把编译生成的可执行文件拷贝到工作目录&#xff0c;操作非常繁琐且容易出错。本文编写一个简单的shell脚本一键编译源码。 1 linux下编写shell脚本一键编译源码 shell脚本如下&…...

安卓端互动娱乐房卡系统调试实录:从UI到协议的万字深拆(第一章)

前言&#xff1a;调房卡&#xff0c;不如修空调&#xff08;但更费脑&#xff09; 老实说&#xff0c;拿到这套安卓端互动组件源码的时候&#xff0c;我内心是拒绝的。不是因为它不好&#xff0c;而是太好了&#xff0c;目录规整、界面精美、逻辑还算清晰&#xff0c;唯一的问…...

【通用大模型】Serper API 详解:搜索引擎数据获取的核心工具

Serper API 详解&#xff1a;搜索引擎数据获取的核心工具 一、Serper API 的定义与核心功能二、技术架构与核心优势2.1 技术实现原理2.2 对比传统方案的突破性优势 三、典型应用场景与代码示例3.1 SEO 监控系统3.2 竞品广告分析 四、使用成本与配额策略五、开发者注意事项六、替…...

宝塔面板屏蔽垃圾搜索引擎蜘蛛和扫描工具的办法

首先进入宝塔面板&#xff0c;文件管理进入/www/server/nginx/conf目录&#xff0c;新建空白文件kill_bot.conf。然后将以下代码保存到当前文件中。 #禁止垃圾搜索引擎蜘蛛抓取if ($http_user_agent ~* "CheckMarkNetwork|Synapse|Nimbostratus-Bot|Dark|scraper|LMAO|Ha…...

【低成本STM32的T-BOX开发实战:高可靠的车联网解决方案】

基于STM32的车辆远程通信终端&#xff08;T-BOX&#xff09;开发实战&#xff1a;低成本高可靠的车联网解决方案 目录 引言&#xff1a;为什么需要T-BOX&#xff1f;系统总体设计&#xff1a;T-BOX的架构与核心功能硬件设计&#xff1a;STM32主控与关键模块解析 STM32F105VCT6…...

聚类算法K-means和Dbscan的对比

K-means和DBSCAN_dbscan和kmeans的区别-CSDN博客...

mysql的高可用

1. 环境准备 2台MySQL服务器&#xff08;node1: 192.168.1.101&#xff0c;node2: 192.168.1.102&#xff09;2台HAProxy Keepalived服务器&#xff08;haproxy1: 192.168.1.103&#xff0c;haproxy2: 192.168.1.104&#xff09;虚拟IP&#xff08;VIP: 192.168.1.100&#x…...

vue3 elementplus tabs切换实现

Tabs 标签页 | Element Plus <template><!-- editableTabsValue 是当前tab 的 name --><el-tabsv-model"editableTabsValue"type"border-card"editableedit"handleTabsEdit"><!-- 这个是标签面板 面板数据 遍历 editableT…...

printf在c语言中代表什么(非常详细)

在C语言中&#xff0c;有三个函数可以用来向控制台&#xff08;可以理解为显示器或者屏幕&#xff09;输出数据&#xff0c;它们分别是&#xff1a; 输出函数说明用法演示puts()只能输出字符串&#xff0c;并且输出结束后会自动换行puts("C language is great");put…...

Linux梦开始的地方

1.概率 经过C语言&#xff0c;数据结构&#xff0c;C的学习我们现在要开始学习Linux的学习了。我们学习Linux是从四部分来进行的&#xff1a; 1.Linux初识&#xff0c;Linux环境&#xff0c;Linux指令&#xff0c;Linux开发环境。 2.Linux系统。 3.Linux网络 4.MySQL Lin…...

关于机器学习的实际案例

以下是一些机器学习的实际案例&#xff1a; 营销与销售领域 - 推荐引擎&#xff1a;亚马逊、网飞等网站根据用户的品味、浏览历史和购物车历史进行推荐。 - 个性化营销&#xff1a;营销人员使用机器学习联系将产品留在购物车或退出网站的用户&#xff0c;根据客户兴趣定制营销…...

Kubernetes控制平面组件:Kubelet详解(五):切换docker运行时为containerd

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

<前端小白> 前端网页知识点总结

HTML 标签 1. 标题标签 h1到h6 2. 段落标签 p 3. 换行 br 水平线 hr 4. 加粗 strong 倾斜 em 下划线 ins 删除 del 5. 图像标签 img src-图像的位置 alt- 图片加载失败显示的文字 替换文本 title--- 鼠标放到图片上显示的文字 提示…...

【Linux驱动】Linux 按键驱动开发指南

Linux 按键驱动开发指南 1、按键驱动开发基础 1.1. 按键驱动类型 Linux下的按键驱动主要有两种实现方式&#xff1a; 输入子系统驱动&#xff1a;最常用&#xff0c;通过input子系统上报按键事件 字符设备驱动&#xff1a;较少用&#xff0c;需要自己实现文件操作接口 1.…...

AI日报 - 2025年05月19日

&#x1f31f; 今日概览 (60秒速览) ▎&#x1f916; 大模型前沿 | GPT-5传闻再起&#xff0c;将基于全新模型构建&#xff0c;与GPT-4彻底分离&#xff1b;Claude 3.7 Sonnet系统提示泄露&#xff0c;揭示其主动引导对话、多语言支持及安全新特性&#xff1b;研究指出直接复用…...

BUUCTF——ReadlezPHP

BUUCTF——ReadlezPHP 进入靶场 看了看框架和源码信息 没有什么可以利用的地方 爆破一下目录看看 结果只出来个index.php 看了一下Findsomthing 报了个路径 /time.php?source拼接访问一下 出了个php代码 <?php #error_reporting(0); class HelloPhp {public $a;pub…...

java集合相关的api-总结

简介 集合是存储数据的容器&#xff0c;集合相关的API提供了不同的数据结构&#xff0c;来满足不同的需求。这里是对常见集合API的使用场景和相关源码的一个总结&#xff0c;在实际开发中&#xff0c;如果不知道该选择什么集合&#xff0c;这篇文章也许可以参考一下。 集合相…...

FloodFill算法:洪水般的图像处理艺术

简单来说就是一场洪水&#xff08;雨水&#xff09;会把低洼的地方淹没 也就是一道题&#xff0c;你要找出所有为负数的连通块&#xff0c;对角线不能连通&#xff0c;所以上述图有两个 其实也很简单&#xff0c;就是你扫描的过程&#xff0c;发现一个负数&#xff0c;就以这…...

【开源分享】健康饮食管理系统(双端+论文)

&#x1f4bb;技术栈 前后端分离项目&#xff0c;PC双端&#xff08;管理端用户端&#xff09; 后端&#xff1a;Javaspringboot 前端&#xff1a;vue 数据库&#xff1a;mysql &#x1f4a1;运行效果图 1. 管理端&#xff1a; 2. 用户端&#xff1a; &#x1f4d5;源码获…...

【图像生成大模型】CogVideoX-5b:开启文本到视频生成的新纪元

CogVideoX-5b&#xff1a;开启文本到视频生成的新纪元 项目背景与目标模型架构与技术亮点项目运行方式与执行步骤环境准备模型加载与推理量化推理 执行报错与问题解决内存不足模型加载失败生成质量不佳 相关论文信息总结 在人工智能领域&#xff0c;文本到视频生成技术一直是研…...

C++学习:六个月从基础到就业——C++20:协程(Coroutines)

C学习&#xff1a;六个月从基础到就业——C20&#xff1a;协程(Coroutines) 本文是我C学习之旅系列的第五十篇技术文章&#xff0c;也是第三阶段"现代C特性"的第十二篇&#xff0c;继续介绍C20引入的新特性&#xff0c;本篇重点是协程(Coroutines)。查看完整系列目录…...

【DAY22】 复习日

内容来自浙大疏锦行python打卡训练营 浙大疏锦行 仔细回顾一下之前21天的内容 作业&#xff1a; 自行学习参考如何使用kaggle平台&#xff0c;写下使用注意点&#xff0c;并对下述比赛提交代码 kaggle泰坦里克号人员生还预测...

tauri2项目使用sidcar嵌入可执行文件并使用命令行调用

Sidecar 是 Tauri 框架中的一个功能&#xff0c;允许你将现有的命令行程序&#xff08;CLI&#xff09;打包并分发到你的 Tauri 应用程序中。以下是它的主要作用和用法。集成命令行工具&#xff1a;将现有的 CLI 程序无缝集成到你的 Tauri 应用中。跨平台分发&#xff1a;确保你…...

选择合适的AI模型:解析Trae编辑器中的多款模型及其应用场景

在当今数字化时代&#xff0c;人工智能技术飞速发展&#xff0c;各种AI模型层出不穷&#xff0c;为人们的工作和生活带来了极大的便利。Trae编辑器作为一款集成了多种先进AI模型的工具&#xff0c;为用户提供了丰富的选择&#xff0c;以满足不同场景下的多样化需求。本文将深入…...

超越想象:利用MetaGPT打造高效的AI协作环境

前言 在人工智能迅速发展的今天&#xff0c;如何让多个大语言模型&#xff08;LLM&#xff09;高效协同工作成为关键挑战。MetaGPT 作为一种创新的多智能体框架&#xff0c;成功模拟了一个真实软件公司的运作流程&#xff0c;实现了从需求分析到代码实现的全流程自动化&#x…...

BOM知识点

BOM&#xff08;Browser Object Model&#xff09;即浏览器对象模型&#xff0c;是用于访问和操作浏览器窗口的编程接口。以下是一些BOM的知识点总结&#xff1a; 核心对象 • window&#xff1a;BOM的核心对象&#xff0c;代表浏览器窗口。它也是全局对象&#xff0c;所有全…...

IDE/IoT/搭建物联网(LiteOS)集成开发环境,基于 LiteOS Studio + GCC + JLink

文章目录 概述LiteOS Studio不推荐&#xff1f;安装和使用手册呢?HCIP实验的源码呢&#xff1f; 软件和依赖安装软件下载软件安装插件安装依赖工具-方案2依赖工具-方案1 工程配置打开或新建工程板卡配置组件配置编译器配置-gcc工具链编译器配置-Makefile脚本其他配置编译完成 …...