首页/新闻资讯/正文详情

RabbitMQ的五大常用模式

发布时间:2026/9/26 6:06:13 来源:云帆数科 栏目:资讯中心
RabbitMQ的五大常用模式
RabbitMQ 的“五大工作模式”是基于其核心组件交换机、队列、绑定的不同组合方式而形成的。前两种模式简单、工作队列实际上使用的是 RabbitMQ 内置的默认交换机而后三种模式发布/订阅、路由、主题则需要显式地声明特定类型的交换机来实现灵活的消息分发一.简单模式结构一个生产者P将消息直接发送到队列一个消费者C从该队列获取消息。核心特点消息被消费后即刻从队列移除一条消息只会被一个消费者接收。步骤1.创建工程生产者消费者2.分别添加依赖3.编写生产者发送消息4.编写消费者接收消息生产者代码public class producer_HelloWorld { public static void main(String[] args) throws IOException, TimeoutException { //1.创建链接工厂 ConnectionFactory factory new ConnectionFactory(); //2.设置参数 factory.setHost(127.0.0.1);//ip地址 factory.setPort(5672); factory.setVirtualHost(/idcast);//虚拟机 factory.setUsername(yang); factory.setPassword(yang); //3.创建连接 Connection Connection connection factory.newConnection(); //4.创建channel Channel channel connection.createChannel(); //5.创建队列queue //队列名称是否持久化当mq重启后还在是否独占只能有一个消费者监听这个队列。是否自动删除参数 //如果没有一个名字是hello world的队列则会创建该队列如果有则不会创建 channel.queueDeclare(hello world,true,false,false,null); //6.发送消息 /** * exchange:交换机名称简单模式下交换机会使用默认的“” * routingkey:路由名称 * props:配置信息 * body:发送消息数据 */ String body hello rabbitmq; channel.basicPublish(,hello world,null,body.getBytes()); //7.释放资源 先关 channel再关 connection顺序反了会报错 channel.close(); connection.close(); } } 创建连接工厂----设置参数----创建连接Connection----创建channel----创建队列queue----发送消息----释放资源消费者代码public class comsume_HelloWorld { public static void main(String[] args) throws IOException, TimeoutException { //1.创建连接工厂 ConnectionFactory factory new ConnectionFactory(); //2.设置参数 factory.setHost(127.0.0.1);//ip地址 factory.setPort(5672); factory.setVirtualHost(/idcast);//虚拟机 factory.setUsername(yang); factory.setPassword(yang); //3.创建连接 Connection Connection connection factory.newConnection(); //4.创建channel Channel channel connection.createChannel(); //5.创建队列queue //队列名称是否持久化当mq重启后还在是否独占只能有一个消费者监听这个队列。是否自动删除参数 //如果没有一个名字是hello world的队列则会创建该队列如果有则不会创建 channel.queueDeclare(hello world,true,false,false,null); //6.接收消息 /** * queue:队列名称 * autoAck:是否自动确认 * callback:回调对象 */ Consumer comsumer new DefaultConsumer(channel){ Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { super.handleDelivery(consumerTag, envelope, properties, body); System.out.println(consumerTag:consumerTag); System.out.println(envelope:envelope.getExchange()); System.out.println(envelope:envelope.getRoutingKey()); System.out.println(properties:properties); System.out.println(body:new String(body)); } }; channel.basicConsume(hello world,true,comsumer); } } 创建连接工厂----设置参数----创建连接Connection----创建channel----创建队列queue----接收消息二.工作队列模式结构一个生产者对应一个队列但有多个消费者C1, C2...同时监听同一个队列。核心特点消息被竞争消费默认轮询分发即 C1 拿一条C2 拿一条。这意味着同一条消息只能被其中一个消费者获取主要用于负载均衡或处理耗时任务如抢票、发短信。生产者代码public class producer_WorkQueues { public static void main(String[] args) throws IOException, TimeoutException { //1.创建链接工厂 ConnectionFactory factory new ConnectionFactory(); //2.设置参数 factory.setHost(127.0.0.1);//ip地址 factory.setPort(5672); factory.setVirtualHost(/idcast);//虚拟机 factory.setUsername(yang); factory.setPassword(yang); //3.创建连接 Connection Connection connection factory.newConnection(); //4.创建channel Channel channel connection.createChannel(); //5.创建队列queue //队列名称是否持久化当mq重启后还在是否独占只能有一个消费者监听这个队列。是否自动删除参数 //如果没有一个名字是hello world的队列则会创建该队列如果有则不会创建 channel.queueDeclare(work_queues,true,false,false,null); //6.发送消息 /** * exchange:交换机名称简单模式下交换机会使用默认的“” * routingkey:路由名称 * props:配置信息 * body:发送消息数据 */ for (int i 0; i 10; i) { String body ihello rabbitmq; channel.basicPublish(,work_queues,null,body.getBytes()); } //7.释放资源 先关 channel再关 connection顺序反了会报错 channel.close(); connection.close(); } }消费者代码public class comsume_WorkQueues1 { public static void main(String[] args) throws IOException, TimeoutException { //1.创建链接工厂 ConnectionFactory factory new ConnectionFactory(); //2.设置参数 factory.setHost(127.0.0.1);//ip地址 factory.setPort(5672); factory.setVirtualHost(/idcast);//虚拟机 factory.setUsername(yang); factory.setPassword(yang); //3.创建连接 Connection Connection connection factory.newConnection(); //4.创建channel Channel channel connection.createChannel(); //5.创建队列queue //队列名称是否持久化当mq重启后还在是否独占只能有一个消费者监听这个队列。是否自动删除参数 //如果没有一个名字是hello world的队列则会创建该队列如果有则不会创建 channel.queueDeclare(work_queues,true,false,false,null); //6.接收消息 /** * queue:队列名称 * autoAck:是否自动确认 * callback:回调对象 */ Consumer comsumer new DefaultConsumer(channel){ Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { super.handleDelivery(consumerTag, envelope, properties, body); // System.out.println(consumerTag:consumerTag); // System.out.println(envelope:envelope.getExchange()); // System.out.println(envelope:envelope.getRoutingKey()); // System.out.println(properties:properties); System.out.println(body:new String(body)); } }; channel.basicConsume(work_queues,true,comsumer); } }public class comsume_WorkQueues2 { public static void main(String[] args) throws IOException, TimeoutException { //1.创建链接工厂 ConnectionFactory factory new ConnectionFactory(); //2.设置参数 factory.setHost(127.0.0.1);//ip地址 factory.setPort(5672); factory.setVirtualHost(/idcast);//虚拟机 factory.setUsername(yang); factory.setPassword(yang); //3.创建连接 Connection Connection connection factory.newConnection(); //4.创建channel Channel channel connection.createChannel(); //5.创建队列queue //队列名称是否持久化当mq重启后还在是否独占只能有一个消费者监听这个队列。是否自动删除参数 //如果没有一个名字是hello world的队列则会创建该队列如果有则不会创建 channel.queueDeclare(work_queues,true,false,false,null); //6.接收消息 /** * queue:队列名称 * autoAck:是否自动确认 * callback:回调对象 */ Consumer comsumer new DefaultConsumer(channel){ Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { super.handleDelivery(consumerTag, envelope, properties, body); // System.out.println(consumerTag:consumerTag); // System.out.println(envelope:envelope.getExchange()); // System.out.println(envelope:envelope.getRoutingKey()); // System.out.println(properties:properties); System.out.println(body:new String(body)); } }; channel.basicConsume(work_queues,true,comsumer); } }注是多个消费者三.Pub/Sub订阅发布模式结构生产者将消息发送到 Fanout 交换机。该交换机会将消息无视路由键Routing Key广播给所有与之绑定的队列。每个队列对应一个消费者。核心特点一条消息会被多个消费者同时接收。适用于“国家气象局发天气百度/腾讯/网易同时接收”这种一对多的广播场景。区别在生产者和消息队列之间加了交换机几种类型如下Fanout:广播将消息交给所有绑定到交换机的队列Direct:定向把消息交给符合指定routing key的队列Topic:通配符把消息交给符合routing pattern路由模式的队列生产者代码public class producer_PubSub { public static void main(String[] args) throws IOException, TimeoutException { //1.创建链接工厂 ConnectionFactory factory new ConnectionFactory(); //2.设置参数 factory.setHost(127.0.0.1);//ip地址 factory.setPort(5672); factory.setVirtualHost(/idcast);//虚拟机 factory.setUsername(yang); factory.setPassword(yang); //3.创建连接 Connection Connection connection factory.newConnection(); //4.创建channel Channel channel connection.createChannel(); //5.创建交换机 /** * exchange:交换机名称 * type:交换机类型 * durable:是否持久化 * autoDelete:自动删除 * internal:内部使用一般是false * arguments:参数 */ String exchangeName test_fanout; channel.exchangeDeclare(exchangeName, BuiltinExchangeType.FANOUT,true,false,false,null); //6.创建队列 String queue1Name test_fanout_queue1; String queue2Name test_fanout_queue2; channel.queueDeclare(queue1Name,true,false,false,null); channel.queueDeclare(queue2Name,true,false,false,null); //7.绑定队列和交换机 /** * queue:队列名称 * exchange:交换机名称 * routingKey:路由键绑定规则 * 如果交换机的类型是fanout,routingKey设置为“” */ channel.queueBind(queue1Name,exchangeName,); channel.queueBind(queue2Name,exchangeName,); //8.发送消息 String body 日志信息; channel.basicPublish(exchangeName,,null,body.getBytes()); //9.释放资源 channel.close(); connection.close(); } }相比较工作模式这里多了创建交换机绑定交换机和队列这两步消费者代码public class comsume_PubSub1 { public static void main(String[] args) throws IOException, TimeoutException { //1.创建链接工厂 ConnectionFactory factory new ConnectionFactory(); //2.设置参数 factory.setHost(127.0.0.1);//ip地址 factory.setPort(5672); factory.setVirtualHost(/idcast);//虚拟机 factory.setUsername(yang); factory.setPassword(yang); //3.创建连接 Connection Connection connection factory.newConnection(); //4.创建channel Channel channel connection.createChannel(); //5.创建队列queue String queue1Name test_fanout_queue1; String queue2Name test_fanout_queue2; //6.接收消息 /** * queue:队列名称 * autoAck:是否自动确认 * callback:回调对象 */ Consumer comsumer new DefaultConsumer(channel){ Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { super.handleDelivery(consumerTag, envelope, properties, body); // System.out.println(consumerTag:consumerTag); // System.out.println(envelope:envelope.getExchange()); // System.out.println(envelope:envelope.getRoutingKey()); // System.out.println(properties:properties); System.out.println(body:new String(body)); System.out.println(将日志打印); } }; channel.basicConsume(queue1Name,true,comsumer); } }public class comsume_PubSub2 { public static void main(String[] args) throws IOException, TimeoutException { //1.创建链接工厂 ConnectionFactory factory new ConnectionFactory(); //2.设置参数 factory.setHost(127.0.0.1);//ip地址 factory.setPort(5672); factory.setVirtualHost(/idcast);//虚拟机 factory.setUsername(yang); factory.setPassword(yang); //3.创建连接 Connection Connection connection factory.newConnection(); //4.创建channel Channel channel connection.createChannel(); //5.创建队列queue String queue1Name test_fanout_queue1; String queue2Name test_fanout_queue2; //6.接收消息 /** * queue:队列名称 * autoAck:是否自动确认 * callback:回调对象 */ Consumer comsumer new DefaultConsumer(channel){ Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { super.handleDelivery(consumerTag, envelope, properties, body); // System.out.println(consumerTag:consumerTag); // System.out.println(envelope:envelope.getExchange()); // System.out.println(envelope:envelope.getRoutingKey()); // System.out.println(properties:properties); System.out.println(body:new String(body)); System.out.println(将日志打印保存数据库); } }; channel.basicConsume(queue2Name,true,comsumer); } }在这里这两个消费者都可以读到数据不是轮询的四.路由模式结构生产者发送消息时指定一个Routing Key。队列绑定到交换机时也指定一个或多个 Routing Key。只有当消息的 Routing Key 与队列的绑定 Key完全匹配时消息才会被路由到该队列。核心特点实现了定向精准投递。例如级别为error的日志只会发给专门处理错误的队列而不会被信息队列接收。注意1.队列与交换机绑定不是任意绑定了而是要所指定一个routingkey2.消息的发送方在向exchange发送消息的时候也必须指定routingkey3.exchange不在把消息交给每一个绑定的队列而是根据routingkey进行判断只有队列的routingkey和消息的routingkey一样是才会接收到消息生产者代码public class producer_Routing { public static void main(String[] args) throws IOException, TimeoutException { //1.创建链接工厂 ConnectionFactory factory new ConnectionFactory(); //2.设置参数 factory.setHost(127.0.0.1);//ip地址 factory.setPort(5672); factory.setVirtualHost(/idcast);//虚拟机 factory.setUsername(yang); factory.setPassword(yang); //3.创建连接 Connection Connection connection factory.newConnection(); //4.创建channel Channel channel connection.createChannel(); //5.创建交换机 /** * exchange:交换机名称 * type:交换机类型 * durable:是否持久化 * autoDelete:自动删除 * internal:内部使用一般是false * arguments:参数 */ String exchangeName test_direct; channel.exchangeDeclare(exchangeName, BuiltinExchangeType.DIRECT,true,false,false,null); //6.创建队列 String queue1Name test_direct_queue1; String queue2Name test_direct_queue2; channel.queueDeclare(queue1Name,true,false,false,null); channel.queueDeclare(queue2Name,true,false,false,null); //7.绑定队列和交换机 /** * queue:队列名称 * exchange:交换机名称 * routingKey:路由键绑定规则 * 如果交换机的类型是fanout,routingKey设置为“” */ channel.queueBind(queue1Name,exchangeName,error); channel.queueBind(queue2Name,exchangeName,info); channel.queueBind(queue2Name,exchangeName,error); channel.queueBind(queue2Name,exchangeName,waring); //8.发送消息 String body 日志信息; channel.basicPublish(exchangeName,info,null,body.getBytes()); //9.释放资源 channel.close(); connection.close(); } }这里与发布订阅模式不同在这个模式写明了routingkey的要求消费者代码public class comsume_Rouring1 { public static void main(String[] args) throws IOException, TimeoutException { //1.创建链接工厂 ConnectionFactory factory new ConnectionFactory(); //2.设置参数 factory.setHost(127.0.0.1);//ip地址 factory.setPort(5672); factory.setVirtualHost(/idcast);//虚拟机 factory.setUsername(yang); factory.setPassword(yang); //3.创建连接 Connection Connection connection factory.newConnection(); //4.创建channel Channel channel connection.createChannel(); //5.创建队列queue String queue1Name test_direct_queue1; String queue2Name test_direct_queue2; //6.接收消息 /** * queue:队列名称 * autoAck:是否自动确认 * callback:回调对象 */ Consumer comsumer new DefaultConsumer(channel){ Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { super.handleDelivery(consumerTag, envelope, properties, body); // System.out.println(consumerTag:consumerTag); // System.out.println(envelope:envelope.getExchange()); // System.out.println(envelope:envelope.getRoutingKey()); // System.out.println(properties:properties); System.out.println(body:new String(body)); System.out.println(将日志打印); } }; channel.basicConsume(queue1Name,true,comsumer); } }public class comsume_Rouring2 { public static void main(String[] args) throws IOException, TimeoutException { //1.创建链接工厂 ConnectionFactory factory new ConnectionFactory(); //2.设置参数 factory.setHost(127.0.0.1);//ip地址 factory.setPort(5672); factory.setVirtualHost(/idcast);//虚拟机 factory.setUsername(yang); factory.setPassword(yang); //3.创建连接 Connection Connection connection factory.newConnection(); //4.创建channel Channel channel connection.createChannel(); //5.创建队列queue String queue1Name test_direct_queue1; String queue2Name test_direct_queue2; //6.接收消息 /** * queue:队列名称 * autoAck:是否自动确认 * callback:回调对象 */ Consumer comsumer new DefaultConsumer(channel){ Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { super.handleDelivery(consumerTag, envelope, properties, body); // System.out.println(consumerTag:consumerTag); // System.out.println(envelope:envelope.getExchange()); // System.out.println(envelope:envelope.getRoutingKey()); // System.out.println(properties:properties); System.out.println(body:new String(body)); System.out.println(将日志打印到控制台); } }; channel.basicConsume(queue2Name,true,comsumer); } } 注意routingkey要与对应的生产者的routingkey相一致五.主题模式结构与路由模式类似但 Routing Key 支持通配符*匹配一个单词。#匹配零个或多个单词。核心特点实现了灵活的一对多路由。例如绑定log.*.error可以匹配log.order.error和log.user.error绑定log.#则可以匹配log.info、log.order.error等任意以 log 开头的消息。生产者代码:public class producer_Topic { public static void main(String[] args) throws IOException, TimeoutException { //1.创建链接工厂 ConnectionFactory factory new ConnectionFactory(); //2.设置参数 factory.setHost(127.0.0.1);//ip地址 factory.setPort(5672); factory.setVirtualHost(/idcast);//虚拟机 factory.setUsername(yang); factory.setPassword(yang); //3.创建连接 Connection Connection connection factory.newConnection(); //4.创建channel Channel channel connection.createChannel(); //5.创建交换机 /** * exchange:交换机名称 * type:交换机类型 * durable:是否持久化 * autoDelete:自动删除 * internal:内部使用一般是false * arguments:参数 */ String exchangeName test_topic; channel.exchangeDeclare(exchangeName, BuiltinExchangeType.TOPIC,true,false,false,null); //6.创建队列 String queue1Name test_topic1; String queue2Name test_topic2; channel.queueDeclare(queue1Name,true,false,false,null); channel.queueDeclare(queue2Name,true,false,false,null); //7.绑定队列和交换机 /** * queue:队列名称 * exchange:交换机名称 * routingKey:路由键绑定规则 * 如果交换机的类型是fanout,routingKey设置为“” */ channel.queueBind(queue1Name,exchangeName,#.error); channel.queueBind(queue1Name,exchangeName,order.*); channel.queueBind(queue2Name,exchangeName,*.*); //8.发送消息 String body 日志信息; channel.basicPublish(exchangeName,order.info,null,body.getBytes()); //9.释放资源 channel.close(); connection.close(); } }消费者代码public class comsume_Topic1 { public static void main(String[] args) throws IOException, TimeoutException { //1.创建链接工厂 ConnectionFactory factory new ConnectionFactory(); //2.设置参数 factory.setHost(127.0.0.1);//ip地址 factory.setPort(5672); factory.setVirtualHost(/idcast);//虚拟机 factory.setUsername(yang); factory.setPassword(yang); //3.创建连接 Connection Connection connection factory.newConnection(); //4.创建channel Channel channel connection.createChannel(); //5.创建队列queue String queue1Name test_topic1; String queue2Name test_topic2; //6.接收消息 /** * queue:队列名称 * autoAck:是否自动确认 * callback:回调对象 */ Consumer comsumer new DefaultConsumer(channel){ Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { super.handleDelivery(consumerTag, envelope, properties, body); // System.out.println(consumerTag:consumerTag); // System.out.println(envelope:envelope.getExchange()); // System.out.println(envelope:envelope.getRoutingKey()); // System.out.println(properties:properties); System.out.println(body:new String(body)); System.out.println(将日志打印); } }; channel.basicConsume(queue1Name,true,comsumer); } }public class comsume_Topic2 { public static void main(String[] args) throws IOException, TimeoutException { //1.创建链接工厂 ConnectionFactory factory new ConnectionFactory(); //2.设置参数 factory.setHost(127.0.0.1);//ip地址 factory.setPort(5672); factory.setVirtualHost(/idcast);//虚拟机 factory.setUsername(yang); factory.setPassword(yang); //3.创建连接 Connection Connection connection factory.newConnection(); //4.创建channel Channel channel connection.createChannel(); //5.创建队列queue String queue1Name test_topic1; String queue2Name test_topic2; //6.接收消息 /** * queue:队列名称 * autoAck:是否自动确认 * callback:回调对象 */ Consumer comsumer new DefaultConsumer(channel){ Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { super.handleDelivery(consumerTag, envelope, properties, body); // System.out.println(consumerTag:consumerTag); // System.out.println(envelope:envelope.getExchange()); // System.out.println(envelope:envelope.getRoutingKey()); // System.out.println(properties:properties); System.out.println(body:new String(body)); System.out.println(将日志打印控制台); } }; channel.basicConsume(queue2Name,true,comsumer); } }在配置routingkey的时候可以使用通配符更加灵活

相关推荐

金融服务业技术架构与核心系统解析
金融服务业技术架构与核心系统解析

我无法基于当前输入生成符合要求的博文。原因如下:输入中仅提供了项目标题"financial-services",未提供任何实质性的项目正文、关键词列表或摘要描述;所谓“相关热搜词”和“最新网络热词”部分为空,未给出具体词汇&… · 2026/9/26 6:06:13

麒麟黑客工具箱9:银河麒麟V10运维增强套件详解
麒麟黑客工具箱9:银河麒麟V10运维增强套件详解

1. “麒麟黑客工具箱9”不是黑客软件,而是国产操作系统生态下的运维增强套件“麒麟黑客工具箱9”这个名称,乍一听容易让人联想到渗透测试、漏洞利用或网络攻击类工具——这恰恰是它在搜索引擎和社交平台被误读的根源。但结合所有热词线索:银河… · 2026/9/26 6:06:07

金融级系统架构设计:一致性、安全与合规的工程实践
金融级系统架构设计:一致性、安全与合规的工程实践

1. 从“financial-services”这个标题里能读出什么“financial-services”这个标题看起来简单到几乎没有任何信息量,就两个英文单词,中间一个连字符。但恰恰是这种极简的命名方式,在技术圈里反而透露了很多东西。我第一次看到这个标题的时候&… · 2026/9/26 6:06:07

比亚迪闪充技术拆解:BMS分级保护、热管理链路与电网协同如何实现
比亚迪闪充技术拆解:BMS分级保护、热管理链路与电网协同如何实现

一聊到比亚迪闪充,身边总有两种声音:要么担心那么大的充电电流直接把电池“充伤”,要么担心一堆桩同时开工把电网“拉崩”。如果你拆开看,会发现“不伤电池、不伤电网”根本不是一个营销话术,而是三个层面联合设计的结… · 2026/9/26 7:00:01

基于LHS与响应面的多目标优化:MATLAB工程实现指南
基于LHS与响应面的多目标优化:MATLAB工程实现指南

1. 为什么偏偏是LHS响应面多目标优化这一套组合先聊点实际的。做工程优化的人,最头疼的往往不是优化算法本身,而是目标函数的求解成本。可能是CFD仿真跑一次要几个小时,可能是有限元模型算一次要半小时,你再牛的非线性规划算法&am… · 2026/9/26 7:00:01

SpringBoot集成Swagger完整指南:从配置到生产环境安全控制
SpringBoot集成Swagger完整指南:从配置到生产环境安全控制

1. 为什么项目里必须有一个接口文档工具先讲个场景,估计不少人都经历过。前后端联调的时候,后端同学甩过来一个Word文档,里面写着接口地址、参数列表,然后大家开始对着文档调接口。调着调着发现参数名对不上,文档里写的… · 2026/9/26 7:00:01

金融服务业技术实现需明确业务与技术约束
金融服务业技术实现需明确业务与技术约束

我无法基于当前输入生成符合要求的博文。原因如下:项目标题为"financial-services",这是一个高度泛化的行业领域术语,本身不具备具体项目特征(如无技术栈、无实现目标、无业务场景限定);项目正文… · 2026/9/26 7:00:01

美赛代码包拆解:评价预测优化图论与智能算法实战指南
美赛代码包拆解:评价预测优化图论与智能算法实战指南

简介:这份资源面向参加数学建模竞赛(尤其是美赛)的学生与研究者,系统整理了各常见题型的参考代码,覆盖从线性回归等基础方法到遗传算法改进神经网络等进阶模型,适合需要快速搭建求解框架、对照复现算法的备… · 2026/9/26 7:00:01

光伏局部遮阴下PSO-MPPT控制Simulink仿真模型
光伏局部遮阴下PSO-MPPT控制Simulink仿真模型

做光伏发电的人应该都有过这种经历:明明大晴天,阵列输出功率却突然掉下去一大截,一看监控曲线,不是逆变器报警,而是东边的楼影正好压在一组组件上。这个问题在屋顶分布式、山地电站和农光互补项目里特别常见。组件局部… · 2026/9/26 6:59:49

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码