2024/5/13 SpringBoot配置多个RabbitMQ

目录

 一、单个RabbitMQ配置

        1.1、导入Maven坐标

        1.2、yaml配置

        1.3、java配置类

                1.3.1、交换机配置

                1.3.2、队列配置

                1.3.3、绑定配置

                1.3.4、连接配置

        1.4、生产者与消费者操作配置

                1.4.1、生产者操作配置

                1.4.2、消费者操作配置

二、多个RabbitMQ配置

        2.1、yaml配置 

        2.2、java配置类

         2.3、生产者与消费者操作配置

                2.3.1、生产者操作配置

                2.3.1、消费者操作配置

三、总结 


需求描述:原SpringBoot工程已经配置了一个RabbitMQ,现需求是再配置一个RabbitMQ,实现效果是不同RabbitMQ推送到不同的队列中,且互不干扰影响使用。

 一、单个RabbitMQ配置

        1.1、导入Maven坐标

        <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.10.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId><version>2.4.4</version></dependency>

        1.2、yaml配置

  rabbitmq:host: xx.xxx.xxx.xxxport: xxxxusername: xxxxpassword: xxxxxxvirtual-host: xxxxpublisher-returns: truepublisher-confirms: truelistener:simple:default-requeue-rejected: trueretry:enabled: falsemax-attempts: 3initial-interval: 5000

        1.3、java配置类

                1.3.1、交换机配置

package com.ruoyi.report.config;import org.springframework.amqp.core.DirectExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;@Component
public class ExchangeConfig {public static final String ecoa_exchange = "ecoaExchange";/*** 1.定义direct exchange* 2.durable="true" rabbitmq重启的时候不需要创建新的交换机* 3.direct交换器相对来说比较简单,匹配规则为:如果路由键匹配,消息就被投送到相关的队列*/@Beanpublic DirectExchange ecoaExchange() {DirectExchange directExchange = new DirectExchange(ecoa_exchange, true, false);return directExchange;}}

                1.3.2、队列配置

package com.ruoyi.report.config;import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;/*** @ClassName QueueConfig* @Description* @Author Mr.Huang* @Date 2023/9/22 16:26* @Version 1.0**/
@Component
public class QueueConfig {private static final String ecoa_file_upload_queue = "ecoa_file_upload_queue";@Beanpublic Queue ecoaFileUploadDispatchQueue() {/**durable="true" 持久化 rabbitmq重启的时候不需要创建新的队列auto-delete 表示消息队列没有在使用时将被自动删除 默认是falseexclusive  表示该消息队列是否只在当前connection生效,默认是false*/return new Queue(ecoa_file_upload_queue, true, false, false);}
}

                1.3.3、绑定配置

package com.ruoyi.report.config;import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;/*** @ClassName BindingConfig* @Description* @Author Mr.Huang* @Date 2023/9/22 16:31* @Version 1.0**/
@Component
public class BindingConfig {@Autowiredprivate QueueConfig queueConfig;@Autowiredprivate ExchangeConfig exchangeConfig;public static final String ECOA_file_upload_key = "ecoa_file_upload_key";@Beanpublic Binding ecoaFileUploadDispatchBinding() {return BindingBuilder.bind(queueConfig.ecoaFileUploadDispatchQueue()).to(exchangeConfig.ecoaExchange()).with(ECOA_file_upload_key);}
}

                1.3.4、连接配置

package com.ruoyi.report.config;import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @ClassName RabbitMqConfig* @Description* @Author Mr.Huang* @Date 2023/9/22 16:14* @Version 1.0**/
@Configuration
public class RabbitMqConfig {/*** 连接工厂*/@Autowiredprivate ConnectionFactory connectionFactory;/*** 自定义rabbit template用于数据的接收和发送* 可以设置消息确认机制和回调** @return*/@Beanpublic RabbitTemplate rabbitTemplate() {RabbitTemplate template = new RabbitTemplate(connectionFactory);return template;}
}

        1.4、生产者与消费者操作配置

                1.4.1、生产者操作配置

package com.ruoyi.report.utils;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.report.config.BindingConfig;
import com.ruoyi.report.config.ExchangeConfig;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.UUID;/*** @ClassName MessageUtils* @Description* @Author Mr.Huang* @Date 2023/9/22 16:36* @Version 1.0**/
@Component
public class MessageUtils {@Autowiredprivate RabbitTemplate rabbitTemplate;/*** 发送消息* 发送随货单信息* @param message 消息*/public void sendMessage(Object message) {String uuid = UUID.randomUUID().toString();CorrelationData correlationId = new CorrelationData(uuid);Message msg = MessageBuilder.withBody(JSON.toJSONStringWithDateFormat(message, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteNullStringAsEmpty).getBytes()).setContentType(MessageProperties.CONTENT_TYPE_JSON).build();rabbitTemplate.convertAndSend(ExchangeConfig.ecoa_exchange, BindingConfig.ECOA_file_upload_key, msg, correlationId);}
}

                1.4.2、消费者操作配置

package com.ruoyi.report.consumer;import com.alibaba.fastjson.JSONObject;
import com.rabbitmq.client.Channel;
import com.ruoyi.report.config.RabbitMqConfig;
import com.ruoyi.report.entity.open.PrintResult;
import com.ruoyi.report.service.open.PrintSendLogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.io.IOException;/*** @ClassName PrintFeedbackConsumer* @Description* @Author Mr.Huang* @Date 2024/4/30 10:23* @Version 1.0**/
@Slf4j
@Component
public class PrintFeedbackConsumer {@Autowiredprivate PrintSendLogService printSendLogService;@RabbitListener(queues = {RabbitMqConfig.print_4pl_dispatch_info_feedback_queue}, containerFactory = "printContainerFactory")public void receiveMq(Message message, Channel channel) {try {String body = new String(message.getBody());log.info("接受【Print结果推送】RabbitMQ消息:"+body);JSONObject objJson = JSONObject.parseObject(body);Thread.sleep(1000);PrintResult printResult = JSONObject.toJavaObject(objJson, PrintResult.class);printSendLogService.updatePrintSendLog(printResult);}catch (Exception e){log.error("",e);try {channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);} catch (IOException ex) {ex.printStackTrace();}}}
}

二、多个RabbitMQ配置

        Maven坐标与上面单个RabbitMQ配置一致

        2.1、yaml配置 

  rabbitmq:first:host: xx.xxx.xxx.xxxport: xxxxusername: xxxxpassword: xxxxxxvirtual-host: xxxxpublisher-returns: truepublisher-confirms: truelistener:simple:default-requeue-rejected: trueretry:enabled: falsemax-attempts: 3initial-interval: 5000          second:host: xx.xxx.xxx.xxxport: xxxxusername: xxxxpassword: xxxxxxpublisher-returns: truepublisher-confirms: truevirtual-host: xxxxlistener:simple:default-requeue-rejected: trueretry:enabled: falsemax-attempts: 3initial-interval: 5000 

        2.2、java配置类

package com.ruoyi.report.config;import com.rabbitmq.client.Channel;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.Connection;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;/*** @ClassName RabbitMqConfig* @Description* @Author Mr.Huang* @Date 2023/9/22 16:14* @Version 1.0**/
@Configuration
public class RabbitMqConfig {// 第一个MQ电子药检队列与keypublic static final String ECOA_file_upload_queue = "ecoa_file_upload_queue";public static final String ECOA_file_upload_key = "ecoa_file_upload_key";// 第二个MQ单据打印平台队列与keypublic static final String print_tms_dispatch_info_queue = "print_tms_dispatch_info_queue";public static final String print_4pl_dispatch_info_feedback_queue = "print_4pl_dispatch_info_feedback_queue";public static final String print_tms_dispatch_info_key = "print_tms_dispatch_info_key";public static final String print_4pl_dispatch_info_feedback_key = "print_4pl_dispatch_info_feedback_key";/** 交换机名称 */public static final String EXCHANGE = "ecoaExchange";public static final String EXCHANGE2 = "tms_exchange";/** 第一个rabbitMq队列 */@Bean(name = "ECOAConnectionFactory")@Primarypublic ConnectionFactory ECOAConnectionFactory(@Value("${spring.rabbitmq.first.host}") String host,@Value("${spring.rabbitmq.first.port}") int port,@Value("${spring.rabbitmq.first.username}") String username,@Value("${spring.rabbitmq.first.password}") String password,@Value("${spring.rabbitmq.first.virtual-host}") String virtualHost) {CachingConnectionFactory connectionFactory = new CachingConnectionFactory();connectionFactory.setHost(host);connectionFactory.setPort(port);connectionFactory.setUsername(username);connectionFactory.setPassword(password);connectionFactory.setVirtualHost(virtualHost);return connectionFactory;}/** 第二个rabbitMq队列 */@Bean(name = "printConnectionFactory")public ConnectionFactory printConnectionFactory(@Value("${spring.rabbitmq.second.host}") String host,@Value("${spring.rabbitmq.second.port}") int port,@Value("${spring.rabbitmq.second.username}") String username,@Value("${spring.rabbitmq.second.password}") String password,@Value("${spring.rabbitmq.second.virtual-host}") String virtualHost) {CachingConnectionFactory connectionFactory = new CachingConnectionFactory();connectionFactory.setHost(host);connectionFactory.setPort(port);connectionFactory.setUsername(username);connectionFactory.setPassword(password);connectionFactory.setVirtualHost(virtualHost);return connectionFactory;}/** 第一个rabbitMq操作模板 */@Bean(name="ECOARabbitTemplate")@Primarypublic RabbitTemplate fplRabbitTemplate(@Qualifier("ECOAConnectionFactory") ConnectionFactory connectionFactory){RabbitTemplate firstRabbitTemplate = new RabbitTemplate(connectionFactory);return firstRabbitTemplate;}/** 第二个rabbitMq操作模板 */@Bean(name="printRabbitTemplate")public RabbitTemplate tcscRabbitTemplate(@Qualifier("printConnectionFactory") ConnectionFactory connectionFactory){RabbitTemplate secondRabbitTemplate = new RabbitTemplate(connectionFactory);return secondRabbitTemplate;}/** 第一个rabbitMq连接工厂 */@Bean(name="ECOAContainerFactory")public SimpleRabbitListenerContainerFactory ECOAContainerFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer,@Qualifier("ECOAConnectionFactory") ConnectionFactory connectionFactory) {SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();factory.setMaxConcurrentConsumers(5);factory.setConcurrentConsumers(1);factory.setPrefetchCount(1);configurer.configure(factory, connectionFactory);return factory;}/** 第二个rabbitMq连接工厂 */@Bean(name="printContainerFactory")public SimpleRabbitListenerContainerFactory printContainerFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer,@Qualifier("printConnectionFactory") ConnectionFactory connectionFactory) {SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();factory.setMaxConcurrentConsumers(5);factory.setConcurrentConsumers(1);factory.setPrefetchCount(1);configurer.configure(factory, connectionFactory);return factory;}/** 第一个mq绑定队列绑定交换机 */@Beanpublic String runECOAQueue(@Qualifier("ECOAConnectionFactory") ConnectionFactory connectionFactory) {System.out.println("configuration ECOAQueue ........................");Connection connection = connectionFactory.createConnection();Channel channel = connection.createChannel(false);try {channel.exchangeDeclare(EXCHANGE, "direct", true, false, null);// 单据推送电子药检队列channel.queueDeclare(ECOA_file_upload_queue, true, false, false, null);channel.queueBind(ECOA_file_upload_queue, EXCHANGE, ECOA_file_upload_key);} catch (Exception e) {e.printStackTrace();} finally {return "ECOAQueue";}}/** 第二个mq绑定队列绑定交换机 */@Beanpublic String runPrintQueue(@Qualifier("printConnectionFactory") ConnectionFactory connectionFactory) {System.out.println("configuration printQueue ........................");Connection connection = connectionFactory.createConnection();Channel channel = connection.createChannel(false);try {channel.exchangeDeclare(EXCHANGE2, "direct", true, false, null);// 单据推送单据打印平台队列channel.queueDeclare(print_tms_dispatch_info_queue, true, false, false, null);channel.queueBind(print_tms_dispatch_info_queue, EXCHANGE2, print_tms_dispatch_info_key);// 单据打印平台反馈队列channel.queueDeclare(print_4pl_dispatch_info_feedback_queue,true,false,false,null);channel.queueBind(print_4pl_dispatch_info_feedback_queue,EXCHANGE2,print_4pl_dispatch_info_feedback_key);} catch (Exception e) {e.printStackTrace();} finally {return "printQueue";}}
}

注意:需将原MQ:交换机、队列、绑定配置类注释掉,只留这一个配置文件即可,这个配置文件已经将对应的:交换机、队列绑定好,只是需要注意队列名字、交换机不要绑定错了

         2.3、生产者与消费者操作配置

                2.3.1、生产者操作配置

package com.ruoyi.report.utils;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.ruoyi.report.config.RabbitMqConfig;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;import javax.annotation.Resource;
import java.util.UUID;/*** @ClassName MessageUtils* @Description* @Author Mr.Huang* @Date 2023/9/22 16:36* @Version 1.0**/
@Component
public class MessageUtils {@Resource(name = "ECOARabbitTemplate")private RabbitTemplate ECOARabbitTemplate;@Resource(name = "printRabbitTemplate")private RabbitTemplate printRabbitTemplate;/*** 向ECOA发送消息* 发送随货单信息* @param message 消息*/public void sendMessage(Object message) {String uuid = UUID.randomUUID().toString();CorrelationData correlationId = new CorrelationData(uuid);Message msg = MessageBuilder.withBody(JSON.toJSONStringWithDateFormat(message, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteNullStringAsEmpty).getBytes()).setContentType(MessageProperties.CONTENT_TYPE_JSON).build();ECOARabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE, RabbitMqConfig.ECOA_file_upload_key, msg, correlationId);}/*** 向print发送消息* 发送派车单信息* @param message 消息*/public void sendPrintMessage(Object message) {String uuid = UUID.randomUUID().toString();CorrelationData correlationId = new CorrelationData(uuid);Message msg = MessageBuilder.withBody(JSON.toJSONStringWithDateFormat(message, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteNullStringAsEmpty).getBytes()).setContentType(MessageProperties.CONTENT_TYPE_JSON).build();printRabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE2, RabbitMqConfig.print_tms_dispatch_info_key, msg, correlationId);}
}

                2.3.1、消费者操作配置

package com.ruoyi.report.consumer;import com.alibaba.fastjson.JSONObject;
import com.rabbitmq.client.Channel;
import com.ruoyi.report.config.RabbitMqConfig;
import com.ruoyi.report.entity.open.PrintResult;
import com.ruoyi.report.service.open.PrintSendLogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.io.IOException;/*** @ClassName PrintFeedbackConsumer* @Description* @Author Mr.Huang* @Date 2024/4/30 10:23* @Version 1.0**/
@Slf4j
@Component
public class PrintFeedbackConsumer {@Autowiredprivate PrintSendLogService printSendLogService;@RabbitListener(queues = {RabbitMqConfig.print_4pl_dispatch_info_feedback_queue}, containerFactory = "printContainerFactory")public void receiveMq(Message message, Channel channel) {try {String body = new String(message.getBody());log.info("接受【Print结果推送】RabbitMQ消息:"+body);JSONObject objJson = JSONObject.parseObject(body);Thread.sleep(1000);PrintResult printResult = JSONObject.toJavaObject(objJson, PrintResult.class);printSendLogService.updatePrintSendLog(printResult);}catch (Exception e){log.error("",e);try {channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);} catch (IOException ex) {ex.printStackTrace();}}}
}

与单个RabbitMQ消费者操作一致,只是注意要消费的队列和连接工厂不要搞错了

三、总结 

配置单个RabbitMQ时不需要关心底层的连接工厂是如何配置的,当把yaml内容填好它会自动配置连接工厂,只需要把交换机、队列、配置绑定起来即可。 当需要配置多个mq时才需要自己手动配置连接工厂,并不是只能配置两个RabbitMQ,可以按这个格式配置更多个。唯一注意的是不要把这些队列和交换机搞混了即可。

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

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

相关文章

【漏洞复现】瑞友天翼应用虚拟化系统 appsave SQL注入漏洞

0x01 产品简介 N/A 0x02 漏洞概述 瑞友天翼应用虚拟化系统 appsave接口存在SQL注入漏洞,未授权的攻击者可以通过该漏洞执行任意sql语句。 0x03 测绘语句 fofa: body="瑞友天翼 - 应用虚拟化系统" 0x04 漏洞复现 1、执行sql语句:http://xxxx/hmrao.php?s=/Ad…

ARP中间人

文章目录 ARP中间人ARP协议介绍使用kali进行ARP毒化使用kali进行ARP中间人使用kali进行ARP钓鱼ARP攻击防御ARP总结 ARP中间人 ARP协议介绍 维基百科ARP介绍 ARP&#xff08;地址解析协议&#xff09;在网络通信中扮演着至关重要的角色&#xff0c;它通过将网络层地址&#x…

吴恩达机器学习笔记:第 10 周-17大规模机器学习(Large Scale Machine Learning)17.1-17.2

目录 第 10 周 17、 大规模机器学习(Large Scale Machine Learning)17.1 大型数据集的学习17.2 随机梯度下降法 第 10 周 17、 大规模机器学习(Large Scale Machine Learning) 17.1 大型数据集的学习 如果我们有一个低方差的模型&#xff0c;增加数据集的规模可以帮助你获得更…

大模型LLM 结合联网搜索增强isou

参考&#xff1a; https://isou.chat/ https://github.com/yokingma/search_with_ai 安装github下载&#xff0c;运行docker compose 如果一直报下面错误&#xff1a; 解决方法https://github.com/yokingma/search_with_ai/pull/7 默认打开&#xff1a; http://192.16***…

系统网络基础知识介绍

1.路由 路由是指从原地址到目的地时&#xff0c;决定端到端路径的网络范围的进程&#xff0c;是工程术语。路由工作在OSI参考模型的第三层&#xff08;网络层&#xff09;&#xff0c;是数据包转发设备。12 路由是把数据从一个网络转发到另一个网络的过程&#xff0c;这个…

教练预约管理小程序开发源码现成案例(小程序、APP、H5圆源码搭建)

随着人们对身体健康越来越重视&#xff0c;对强身健体、健康个性化生活的需求日益增加&#xff0c;健身已成为时尚生活的标志。 然而&#xff0c;没有时间去健身房却成了很多上班族的痛点。健身房作为一项既能缓解工作压力又能缓解学业压力的运动&#xff0c;正好满足了当代人…

每日OJ题_贪心算法四⑦_力扣1054. 距离相等的条形码

目录 力扣1054. 距离相等的条形码 解析代码 力扣1054. 距离相等的条形码 1054. 距离相等的条形码 难度 中等 在一个仓库里&#xff0c;有一排条形码&#xff0c;其中第 i 个条形码为 barcodes[i]。 请你重新排列这些条形码&#xff0c;使其中任意两个相邻的条形码不能相等…

绝地求生PUBG初版艾伦格回归 初版艾伦格和新版有什么区别

PUBG终于迎来了经典的旧版艾伦格地图的回归&#xff01;我们希望通过本次经典艾伦格的回归为大家带回记忆中那一幕幕熟悉的场景&#xff0c;并让大家好好回味一番当年与好友们共同冒险的峥嵘岁月&#xff01;还怀念从前为了抢到自己最爱的武器而飞奔的日日夜夜吗&#xff1f;那…

如何对公司的重要文件进行保护以防止被误删或恶意删除呢?

企业数据是宝贵的资产&#xff0c;尤其是那些涉及核心竞争力和客户隐私的重要文件&#xff0c;一旦丢失或被恶意删除&#xff0c;可能会给企业带来不可估量的损失。 因此&#xff0c;如何对公司的重要文件进行保护以防止被误删或恶意删除&#xff0c;是每个企业都需要认真考虑的…

Java 常见的垃圾回收算法以及它们的优缺点(总结版)

在Java中&#xff0c;常见的垃圾回收&#xff08;Garbage Collection, GC&#xff09;算法主要有以下几种&#xff0c;每种都有其独特的优缺点&#xff1a; 引用计数算法&#xff08;Reference Counting&#xff09; 优点&#xff1a;实现简单&#xff0c;执行效率高&#xff0…

使用非官网购买Chatgpt的api调用

测试代码 from openai import OpenAI client OpenAI(api_key用户密钥) import json import os import timeclass ChatGPT:def __init__(self, user):self.user userself.messages [{"role": "system", "content": "Agent"}]def as…

【算法基础】简单的动态规划!你没见过的全新视角!

文章目录 动态规划导论使用动态规划加速斐波那契数列&#xff08;记忆化&#xff09;自底向上的动态规划经典的动态规划问题 动态规划导论 动态规划的关键是避免重复的计算。通常情况下&#xff0c;动态规划算法解决的问题可以用递归的方法解决。可以先尝试将问题写出最朴素的…

js图片回显的方法

直接上代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body>// HTML部分<input type"file" id"fileInput"><button onclick"show…

SSH常用功能介绍-高级功能

一、介绍 SSH&#xff08;Secure Shell&#xff09;是一种用于远程登录和执行命令的网络协议&#xff0c;它提供了加密的连接&#xff0c;保证了数据的安全性。除了基本的远程登录功能外&#xff0c;SSH还提供了许多高级功能&#xff0c;以下是一些常用的高级功能介绍&#xf…

神经网络笔记:感知机+激活函数+全连接神经网络简介

神经网络 单层神经网络 感知机模型 激活函数输出 感知机 MP模型 激活函数 把神经网络模型线性输出变为非线性输出 常用激活函数 sigmoid sigmoid(x) 1 / (1 exp(-x))适用于预测概率作为输出的模型优点 把输入值压缩到0-1之间物理意义上最接近生物神经元 缺点 存在梯…

OpenBayes 一周速览|SegmentAnything 分割万物教程上新、MiniGemini 多模态模型天花板一键 input

公共资源速递 This Weekly Snapshots &#xff01; 5 个数据集&#xff1a; * SAOKE 人工标注数据集 * AG News 新闻文章数据集 * VQA-HAT 智能问答数据集 * EQA 问答数据集 * HotpotQA 问答数据集 1 个模型&#xff1a; * MiniGemini-34B-HD 2 个教程&#xff1a; …

什么是 RAG,大模型微调,向量数据库的应用场景

原来向量数据库的应用场景是这样的&#xff01;按照我的理解&#xff0c;大模型其实是没有学习能力的&#xff0c;它就相当于一个真值表或者矩阵&#xff0c;给它输入&#xff0c;它就输出&#xff0c;在使用它的过程中它不会自己训练自己&#xff0c;改变既有的参数&#xff0…

IPC通信中间件综述

IPC通信中间件综述 DBus&#xff08;Desktop Bus&#xff09;FDBusDDS&#xff08;Data Distribution Service&#xff09;Fast DDS&#xff08;Fast Data Distribution Service&#xff09;OpenDDS&#xff08;Open Data Distribution Service&#xff09;IceoryxCyberRTZeroM…

亲测-原生android 跳转到flutter页面

当前状态: 原生android 和flutter都能跑通 android studio 版本2023.3.1 解决方式 1.新建flutter项目 点击new flutter 点next 点project type 选module 2&#xff08;如果快速的话&#xff0c;此处将 flutter的lib和assets考过来&#xff09;也可以后面在搞 且将pubspec.yaml …

3W 3KVAC隔离 宽电压输入 AC/DC 电源模块——TP03AL系列

TP03AL系列产品具有交直流两用、输入电压范围宽、高可靠性、低功耗、安全隔离等优点。广泛适用于工控和电力仪器仪表、智能家居等对体积要求苛刻、并对EMC 要求不高的场合&#xff0c;如果需要应用于电磁兼容恶劣的环境下必须添加EMC 外围电路。