jmeter测试dubbo接口

本文讲解jmeter测试dubbo接口的实现方式,文章以一个dubbo的接口为例子进行讲解,该dubbo接口实现的功能为:

  • 一:首先我们看服务端代码

代码架构为:


1:新建一个maven工程,pom文件为:


 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3     <modelVersion>4.0.0</modelVersion>
 4 
 5     <groupId>com.ustc.demo</groupId>
 6     <artifactId>dubbo-provider</artifactId>
 7     <version>0.0.1-SNAPSHOT</version>
 8     <packaging>jar</packaging>
 9 
10     <name>dubbo-provider</name>
11     <url>http://maven.apache.org</url>
12 
13     <properties>
14         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15     </properties>
16 
17     <dependencies>
18         <dependency>
19             <groupId>junit</groupId>
20             <artifactId>junit</artifactId>
21             <version>3.8.1</version>
22             <scope>test</scope>
23         </dependency>
24         <dependency>
25             <groupId>com.alibaba</groupId>
26             <artifactId>dubbo</artifactId>
27             <version>2.4.9</version>
28         </dependency>
29         <dependency>
30             <groupId>com.github.sgroschupf</groupId>
31             <artifactId>zkclient</artifactId>
32             <version>0.1</version>
33         </dependency>
34     </dependencies>
35     <build>
36         <plugins>
37             <plugin>
38                 <artifactId>maven-dependency-plugin</artifactId>
39                 <executions>
40                     <execution>
41                         <id>unpack</id>
42                         <phase>package</phase>
43                         <goals>
44                             <goal>unpack</goal>
45                         </goals>
46                         <configuration>
47                             <artifactItems>
48                                 <artifactItem>
49                                     <groupId>com.alibaba</groupId>
50                                     <artifactId>dubbo</artifactId>
51                                     <version>${project.parent.version}</version>
52                                     <outputDirectory>${project.build.directory}/dubbo</outputDirectory>
53                                     <includes>META-INF/assembly/**</includes>
54                                 </artifactItem>
55                             </artifactItems>
56                         </configuration>
57                     </execution>
58                 </executions>
59             </plugin>
60             <plugin>
61                 <artifactId>maven-assembly-plugin</artifactId>
62                 <configuration>
63                     <descriptor>src/main/assembly/assembly.xml</descriptor>
64                 </configuration>
65                 <executions>
66                     <execution>
67                         <id>make-assembly</id>
68                         <phase>package</phase>
69                         <goals>
70                             <goal>single</goal>
71                         </goals>
72                     </execution>
73                 </executions>
74             </plugin>
75         </plugins>
76     </build>
77 </project>

2:在src/main下新建文件夹assembly,然后在assembly文件夹下新建assembly.xml文件


 1 <assembly>
 2     <id>assembly</id>
 3     <formats>
 4         <format>tar.gz</format>
 5     </formats>
 6     <includeBaseDirectory>true</includeBaseDirectory>
 7     <fileSets>
 8         <fileSet>
 9             <directory>${project.build.directory}/dubbo/META-INF/assembly/bin
10             </directory>
11             <outputDirectory>bin</outputDirectory>
12             <fileMode>0755</fileMode>
13         </fileSet>
14         <fileSet>
15             <directory>src/main/assembly/conf</directory>
16             <outputDirectory>conf</outputDirectory>
17             <fileMode>0644</fileMode>
18         </fileSet>
19     </fileSets>
20     <dependencySets>
21         <dependencySet>
22             <outputDirectory>lib</outputDirectory>
23         </dependencySet>
24     </dependencySets>
25 </assembly>

3:在src/main/assembly文件夹下新建conf文件夹,然后在conf文件夹下新建dubbo.properties文件,此处的zookeeper的地址根据实际进行修改


 1 dubbo.container=log4j,spring
 2 dubbo.application.name=demo-caiya
 3 dubbo.application.owner=william
 4 #dubbo.registry.address=multicast://224.5.x.7:1234
 5 dubbo.registry.address=zookeeper://134.xx.xx.xx:2181
 6 #dubbo.registry.address=redis://127.0.0.1:6379
 7 #dubbo.registry.address=dubbo://127.0.0.1:9090
 8 #dubbo.monitor.protocol=registry
 9 dubbo.protocol.name=dubbo
10 dubbo.protocol.port=20880
11 #dubbo.service.loadbalance=roundrobin
12 #dubbo.log4j.file=logs/dubbo-demo-consumer.log
13 #dubbo.log4j.level=WARN

4:在src/test/resources包路径下,新建dubbo.properties文件,内容和上面的3中dubbo.properties文件内容相同

5:编写provider的接口sayHello,新建DemoService.java类

1 package com.ustc.demo.provider;
2 public interface DemoService {
3     public String sayHello(String name);
4 }

6:编写sayHello接口的实现类,新建DemoServiceImpl.java类

package com.ustc.demo.provider;

import java.text.SimpleDateFormat;
import java.util.Date;
public class DemoServiceImpl implements DemoService{
    
    public String sayHello(String name) {
        String time = new SimpleDateFormat("HH:mm:ss").format(new Date()); 
        System.out.println("from consumer:"+name);
        return "The current time is:"+time;
    }

7:编写spring的配置文件,在META-INF/spring文件夹下的demo-provider.xml文件


1 <?xml version="1.0" encoding="UTF-8" ?> 
2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
3 <bean id="demoService" class="com.ustc.demo.provider.DemoServiceImpl" /> 
4 <dubbo:service interface="com.ustc.demo.provider.DemoService" ref="demoService"/> 
5 </beans>

8:编写main方法,新建DemoServiceMain.java类


1 package com.ustc.demo.provider;  
2 public class DemoServiceMain {
3     public static void main(String[] args) {
4         com.alibaba.dubbo.container.Main.main(args);
5     }
6 }

这样服务端的代码就写好了,实现的功能是当消费者来询问当前时间是几点的时候,返回当前时间

  • 二:然后我们看消费端代码


1:新建一个maven工程,pom文件为:


 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3     <modelVersion>4.0.0</modelVersion>
 4     <groupId>com.ustc.demo</groupId>
 5     <artifactId>consumer</artifactId>
 6     <version>0.0.1-SNAPSHOT</version>
 7     <packaging>jar</packaging>
 8     <name>consumer</name>
 9     <url>http://maven.apache.org</url>
10     <properties>
11         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
12     </properties>
13     <dependencies>
14         <dependency>
15             <groupId>junit</groupId>
16             <artifactId>junit</artifactId>
17             <version>3.8.1</version>
18             <scope>test</scope>
19         </dependency>
20         <dependency>
21             <groupId>com.alibaba</groupId>
22             <artifactId>dubbo</artifactId>
23             <version>2.4.9</version>
24         </dependency>
25         <dependency>
26             <groupId>com.github.sgroschupf</groupId>
27             <artifactId>zkclient</artifactId>
28             <version>0.1</version>
29         </dependency>
30     </dependencies>
31     <build>
32         <plugins>
33             <plugin>
34                 <artifactId>maven-dependency-plugin</artifactId>
35                 <executions>
36                     <execution>
37                         <id>unpack</id>
38                         <phase>package</phase>
39                         <goals>
40                             <goal>unpack</goal>
41                         </goals>
42                         <configuration>
43                             <artifactItems>
44                                 <artifactItem>
45                                     <groupId>com.alibaba</groupId>
46                                     <artifactId>dubbo</artifactId>
47                                     <version>${project.parent.version}</version>
48                                     <outputDirectory>${project.build.directory}/dubbo</outputDirectory>
49                                     <includes>META-INF/assembly/**</includes>
50                                 </artifactItem>
51                             </artifactItems>
52                         </configuration>
53                     </execution>
54                 </executions>
55             </plugin>
56             <plugin>
57                 <artifactId>maven-assembly-plugin</artifactId>
58                 <configuration>
59                     <descriptor>src/main/assembly/assembly.xml</descriptor>
60                 </configuration>
61                 <executions>
62                     <execution>
63                         <id>make-assembly</id>
64                         <phase>package</phase>
65                         <goals>
66                             <goal>single</goal>
67                         </goals>
68                     </execution>
69                 </executions>
70             </plugin>
71         </plugins>
72     </build>
73 </project>

2:在src/main下新建文件夹assembly,然后在assembly文件夹下新建assembly.xml文件


 1 <assembly>
 2     <id>assembly</id>
 3     <formats>
 4         <format>tar.gz</format>
 5     </formats>
 6     <includeBaseDirectory>true</includeBaseDirectory>
 7     <fileSets>
 8         <fileSet>
 9             <directory>${project.build.directory}/dubbo/META-INF/assembly/bin
10             </directory>
11             <outputDirectory>bin</outputDirectory>
12             <fileMode>0755</fileMode>
13         </fileSet>
14         <fileSet>
15             <directory>src/main/assembly/conf</directory>
16             <outputDirectory>conf</outputDirectory>
17             <fileMode>0644</fileMode>
18         </fileSet>
19     </fileSets>
20     <dependencySets>
21         <dependencySet>
22             <outputDirectory>lib</outputDirectory>
23         </dependencySet>
24     </dependencySets>
25 </assembly>

3:在src/main/assembly文件夹下新建conf文件夹,然后在conf文件夹下新建dubbo.properties文件,此处的zookeeper的地址根据实际进行修改


 1 dubbo.container=log4j,spring
 2 dubbo.application.name=demo-consumer
 3 dubbo.application.owner=
 4 #dubbo.registry.address=multicast://224.5.6.7:1234
 5 dubbo.registry.address=zookeeper://134.64.xx.xx:2181
 6 #dubbo.registry.address=redis://127.0.0.1:6379
 7 #dubbo.registry.address=dubbo://127.0.0.1:9090
 8 dubbo.monitor.protocol=registry
 9 dubbo.log4j.file=logs/dubbo-demo-consumer.log
10 dubbo.log4j.level=WARN

4:在src/test/resources包路径下,新建dubbo.properties文件,内容和上面的3中dubbo.properties文件内容相同

5:编写provider的接口sayHello,新建DemoService.java类

1 package com.ustc.demo.provider;  
2 
3 public interface DemoService {
4      public String sayHello(String name);
5 }

6:编写消费端请求类调用sayHello方法,新建DemoAction.java类


 1 package com.ustc.demo.consumer;
 2 import com.ustc.demo.provider.DemoService;
 3 public class DemoAction {
 4     
 5     private DemoService demoService;
 6 
 7     public void setDemoService(DemoService demoService) {
 8         this.demoService = demoService;
 9     }
10     
11     public void start() throws Exception {
12         for (int i = 0; i < Integer.MAX_VALUE; i ++) {
13             try {
14                 String hello = demoService.sayHello("hello,How much is the current time?");
15                 System.out.println("from provider:"+hello);
16             } catch (Exception e) {
17                 e.printStackTrace();
18             }
19             Thread.sleep(2000);
20         }
21     }
22 }

7:编写spring的配置文件,在META-INF/spring文件夹下的dubbo-demo-action.xml文件


1 <?xml version="1.0" encoding="UTF-8" ?> 
2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
3  <bean class="com.ustc.demo.consumer.DemoAction" init-method="start">
4   <property name="demoService" ref="demoService" /> 
5   </bean>
6 </beans>

8:编写spring的配置文件,在META-INF/spring文件夹下的dubbo-demo-consumer.xml文件


1 <?xml version="1.0" encoding="UTF-8" ?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
4     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
5     <dubbo:reference id="demoService"
6         interface="com.ustc.demo.provider.DemoService" />
7 </beans>

9:编写main方法,新建DemoServiceMain.java类


1 package com.ustc.demo.consumer; 
2 public class DemoConsumerMain {
3     public static void main(String[] args) {
4         com.alibaba.dubbo.container.Main.main(args);
5     }
6 }

这样我们就完成了本地消费者代码,在编写符合jmeter格式的代码前,我们首先在本地开发工具中运行看看效果:

启动服务提供方的main方法,然后启动服务消费方的main方法:

服务消费者控制台:

服务提供者控制台:

这样调试发现消费端向服务端发送:How much is the current time?,然后服务端返回当前的时间,该dubbo接口的功能正常实现

  • 三:我们现在想对dubbo接口进行性能测试,可以用jmeter模拟服务消费方并发调用服务提供方

因为jmeter支持java请求,故我们可以将服务提供方打包部署到服务器上运行,将服务消费方打成jar包放到jmeter的/lib/ext文件夹中,这样就能实现jmeter模拟消费方去请求服务端,进行性能测试

现在我们来讲解如何将上面的服务消费端的代码编写成可以打包放到jmeter中的jar包代码

只需要对上面的消费者代码进行3处修改即可:

1:pom.xml文件中添加对jmeter的支持,在<dependencies></dependencies>之间添加如下代码

 1 <!-- java jmeter依赖jar包 -->
 2          <dependency>
 3              <groupId>org.apache.jmeter</groupId>
 4              <artifactId>ApacheJMeter_core</artifactId>
 5              <version>3.0</version>
 6          </dependency>
 7          <dependency>
 8              <groupId>org.apache.jmeter</groupId>
 9              <artifactId>ApacheJMeter_java</artifactId>
10              <version>3.0</version>
11          </dependency>

2:在src/main/resources下新建applicationConsumer.xml文件,zookeeper地址根据需要进行修改

 1 <?xml version="1.0" encoding="UTF-8"?>  
 2 <beans xmlns="http://www.springframework.org/schema/beans"  
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
 4     xsi:schemaLocation="http://www.springframework.org/schema/beans  
 5         http://www.springframework.org/schema/beans/spring-beans.xsd  
 6         http://code.alibabatech.com/schema/dubbo  
 7         http://code.alibabatech.com/schema/dubbo/dubbo.xsd  
 8         ">  
 9   
10     <!-- consumer application name -->  
11     <dubbo:application name="consumer-jmeter" />  
12     <!-- registry address, used for consumer to discover services -->  
13     <dubbo:registry address="zookeeper://134.64.xx.xx:2181" />  
14     <!-- which service to consume? -->  
15     <dubbo:reference id="demoService" interface="com.ustc.demo.provider.DemoService" />  
16 </beans> 

3:在com.ustc.demo.consumer包下新建JmeDemoAction.java类


 1 package com.ustc.demo.consumer;
 2 
 3 import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
 4 import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
 5 import org.apache.jmeter.samplers.SampleResult;
 6 import org.springframework.context.support.ClassPathXmlApplicationContext;
 7 
 8 import com.ustc.demo.provider.DemoService;
 9 
10 /** 
11  * ClassName:JmeDemoAction <br/> 
12  * Function: TODO ADD FUNCTION. <br/> 
13  * Reason:   TODO ADD REASON. <br/> 
14  * Date:     2016年12月3日 下午10:12:10 <br/> 
15  * @author   meiling.yu 
16  * @version   
17  * @since    JDK 1.7
18  * @see       
19  */
20 public class JmeDemoAction extends AbstractJavaSamplerClient{
21     ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
22             new String[] { "applicationConsumer.xml" });
23     
24     public SampleResult runTest(JavaSamplerContext arg0) {
25         SampleResult sr = new SampleResult();
26         try {    
27             sr.sampleStart();
28             context.start();
29             DemoService demoService = (DemoService) context.getBean("demoService");
30             String hello = demoService.sayHello("hello,How much is the current time?");
31             sr.setResponseData("from provider:"+hello, null);
32             sr.setDataType(SampleResult.TEXT);
33             sr.setSuccessful(true);
34             sr.sampleEnd();
35         } catch (Exception e) {
36             e.printStackTrace();
37         }
38         return sr;
39     }
40 
41 }

这样就完成了jmeter的消费端代码编写

  • 四:将消费端和服务端打包maven install,打包完成后可以看到消费端的target下生成了两个文件一个consumer-0.0.1-SNAPSHOT-assembly.tar.gz还有一个consumer-0.0.1-SNAPSHOT.jar

将consumer-0.0.1-SNAPSHOT-assembly.tar.gz中的lib文件夹下所有的jar包拷贝到jmeter的lib目录下,如果有重复的,则不替换用jmeter原生的jar包

将consumer-0.0.1-SNAPSHOT.jar拷贝到jmeter的lib/ext目录下

  • 五:部署服务端,然后消费端为:启动jmeter,验证该jar功能是否正常,新建一个java请求

启动服务端:

新建消费端的java请求:

启动消费端,发现响应结果中返回了服务端的响应:

在看服务端的日志:

上图为两个线程测试了一下,发现调用通过成功,响应数据正常返回,故该脚本可以正常使用,至此jmeter测试dubbo接口整个的脚本制作过程就讲完了

至于如何用这个jmx脚本做性能测试,我就不在重复了,参考我的博文-jmeter命令行运行-单节点测试或者分布式测试

最后给出工程源码,也就是上面的例子的源代码jmeter测试dubbo接口:dubbor.rar中包含两个maven工程,dubbo-consumer和dubbo-provider

2023最新Jmeter接口测试从入门到精通(全套项目实战教程)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Matlab数学建模算法详解之混合整数线性规划 (MILP) 算法(附完整实现代码)

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

上手 Promethus - 开源监控、报警工具包

名词解释 Promethus 是什么 开源的【系统监控和警报】工具包 专注于&#xff1a; 1&#xff09;可靠的实时监控 2&#xff09;收集时间序列数据 3&#xff09;提供强大的查询语言&#xff08;PromQL&#xff09;&#xff0c;用于分析这些数据 功能&#xff1a; 1&#xff0…

Python NeuralProphet库: 高效时间序列预测的利器

更多Python学习内容&#xff1a;ipengtao.com 时间序列数据在许多领域中都扮演着关键的角色&#xff0c;从股票价格到气象数据。为了更准确地预测未来趋势&#xff0c;机器学习领域涌现出许多时间序列预测的方法和工具。其中&#xff0c;NeuralProphet库是一个强大的工具&#…

安卓吸顶效果

当列表滑动时&#xff0c;图片逐渐消失&#xff0c;toolBar悬停在头部。 <?xml version"1.0" encoding"utf-8"?><androidx.coordinatorlayout.widget.CoordinatorLayoutxmlns:android"http://schemas.android.com/apk/res/android"x…

【LeetCode】挑战100天 Day17(热题+面试经典150题)

【LeetCode】挑战100天 Day17&#xff08;热题面试经典150题&#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-192.1 题目2.2 题解 三、面试经典 150 题-193.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站&#xff0c;提供各种算法和数据结构的题目&…

智能优化算法应用:基于鲸鱼算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鲸鱼算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鲸鱼算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鲸鱼算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

Nginx(八) aio sendfile directio 组合使用测试(1)

thread_pool default threads32 max_queue65535; http {aio threadsdefault;directio 2m;sendfile on;sendfile_max_chunk 1m;#### Gzip压缩服务配置#gzip off; # 设置是否开启gzip压缩服务&#xff0c;用于提高传输速度&#xff0c;默认关闭(off)。#gzi…

告别软件代码,硬件攻城狮也能DIY的 PD DRP+OTG 芯片来了

随着 USB-C 接口的普及&#xff0c;越来越多的设备开始采用这种接口。由于 USB-C接口的高效性和便携性&#xff0c;使各种设备之间的连接和数据传输变得非常方便快捷&#xff0c;它们不仅提供了强大的功能&#xff0c;还为我们的日常生活和工作带来了极大的便利&#xff0c;USB…

烧烤店点餐外卖配送管理小程序作用如何

烧烤是人们爱吃的食品之一&#xff0c;尤其到了晚上商业小吃街&#xff0c;烧烤店里往往是坐满了人&#xff0c;甚至还有排队的&#xff0c;从业商家众多&#xff0c;足可见该餐饮细分领域在市场中的欢迎程度。 而在实际经营中&#xff0c;烧烤店经营痛点也不小。 随着互联网…

什么是LASSO回归,怎么看懂LASSO回归的结果

随着机器学习的发展&#xff0c;越来越多SCI文章都使用了更多有趣、高效的统计方法来进行分析&#xff0c;LASSO回归就是其中之一。很多小伙伴听说过LASSO&#xff0c;但是对于LASSO是什么&#xff0c;有什么用&#xff0c;怎么才能实现&#xff0c;大家可能一头雾水。今天的文…

HarmonyOS安装三方库遇到的问题

使用开发电脑系统为&#xff1a;MacOS, 开发工具为&#xff1a;DevEco-Studio版本号3.1.1 Release。在控制栏使用终端工具输入命令&#xff1a;ohpm install ohos/lottie遇到的第一个问题如下图。 解决方案&#xff1a; 1、在首选项中找到ohpm的安装路径。 2、打开bash_profil…

我的创作纪念日-----MySql服务

MySql服务 1.什么是数据库 1.1.数据 描述事物的符号记录&#xff0c;可以是数字文字、图形、图像、声音、语言等&#xff0c;数据有多种形式&#xff0c;它们都可以经过数字化后存入计算机。 1.2.数据库 存储数据的仓库&#xff0c;是长期存放在计算机内、有组织、可共享的大…

基于springboot实现实习管理系统的设计与实现项目【项目源码+论文说明】

基于sprinmgboot实现实习管理系统的设计与实现演示 摘要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;实习管理也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;…

Spring的依赖注入,依赖注入的基本原则,依赖注入的优势

文章目录 Spring的依赖注入依赖注入的基本原则依赖注入有什么优势查找定位操作与应用代码完全无关。有哪些不同类型的依赖注入实现方式&#xff1f;构造器依赖注入和 Setter方法注入的区别 Spring的依赖注入 控制反转IoC是一个很大的概念&#xff0c;可以用不同的方式来实现。…

Vue打包错误UnhandledPromiseRejectionWarning: CssSyntaxError

错误详情如下&#xff1a; building for production...Error processing file: static/css/app.3d5caae7aaba719754d7d5c30b864551.css (node:33011) UnhandledPromiseRejectionWarning: CssSyntaxError: /Users/yt/Documents/BM/sims-plus/sims-website/static/css/app.3d5caa…

USB简介系列-02

系列文章目录 USB简介之二 文章目录 系列文章目录USB数据流一、USB总线二、USB收发器三、USB速率识别三、USB总线状态总结USB数据流 本部分讨论USB低速和全速模式下的数据流。 一、USB总线 想象一下USB主机根集器下级联了集线器和设备的设置,如下图示。我们需要记住的是,在…

Redis核心数据结构

目录 五种基础数据结构 string hash list set zset 用zset实现微博热搜 scan遍历 高频问题 五种基础数据结构 string 单个赋值set 批量赋值/取值 msetmget 设置不存在字符串setnx, 如果不存在, 则设置成功返回1, 如果存在返回0, 可以当做分布式锁 删除值 设置过期时…

Redis-缓存设计

缓存穿透 缓存穿透是指查询一个根本不存在的数据&#xff0c; 缓存层和存储层都不会命中&#xff0c; 通常出于容错的考虑&#xff0c; 如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询&#xff0c; 失去了缓存保护后端存储的…

使用360浏览器插件刷新网页

使用360浏览器插件刷新网页 1.打开360浏览器->扩展程序->更多扩展。 2.扩展中心->搜索”网页自动刷新”&#xff0c;然后安装。 3.在要学习的网页上&#xff0c;扩展程序中使用页面自动刷新插件。 4.如果页面打开慢就把10改大&#xff0c;比如改成15&#xff0…

指定训练使用的GPU个数,没有指定定gpu id,训练在其中两个gpu上执行,但是线程id分布在所有4个gpu上,为什么?如何解决?

目录 问题背景 1 线程id分布在所有gpu&#xff08;包括未启用的gpu&#xff09;上原因&#xff1a; 2 在解决这个问题时&#xff0c;可以采取以下步骤&#xff1a; 3 修正深度学习框架默认使用所有可见 GPU 的问题 1 TensorFlow&#xff1a; 2 PyTorch&#xff1a; 3 K…