DPDK and Trex环境指南

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、测试拓扑图

二、VirtualBox的网卡配置

 三、DPDK支持的网卡

四、DPDK安装

1.DPDK向导

1). 英文向导

2). 中文向导

2.DPDK源码下载

3.DPDK源码解压

4.相关依赖包安装

5.DPDK源码编译

6.DPDK示例编译

五、dpdk-kmods安装

1.dpdk-kmods下载

2.dpdk-kmods编译

3.gcc12安装

4.dpdk-kmods安装

5.dpdk-kmods错误解决

六、分配大页内存

七、DPDK绑定网口

八、DPDK解绑定网口

九、DPDK TestPMD

1.概述

1).转发模式

2).Run dpdk-testpmd

2.常用命令

3.Test Case1

1).测试目的

2).测试Topo

3).测试和配置步骤

4.Test Case2

1).测试目的

2).测试Topo

3).测试和配置步骤

十、DPDK L2FWD 

1.概述

1).Run dpdk-l2fwd

2.常用命令

3.Test Case1

1).测试目的

2).测试Topo

3).测试和配置步骤

十一、Trex部署

1.Trex包下载

2.Trex包解压

3.绑定网口并配置 

4.如需修改网卡请编辑配置文件 

5.启动trex

1).先启动trex主程序,本方案是用网线做的回环测试。

 2).再开启TRex客户端程序

 3).客户端中stats可查看流量情况 

 4).主程序界面也可以看到实时流量统计 

总结


前言

Ubuntu版本信息:

cat /etc/issue

Ubuntu 22.04.4 LTS \n \l

uname -a

6.5.0-25-generic #25~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Feb 20 16:09:15 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

VirtualBox7.0.14 r161095 (Qt5.15.2)


提示:以下是本篇文章正文内容,下面案例可供参考

一、测试拓扑图

二、VirtualBox的网卡配置

如果使用到了VirtualBox,请参考下面设置网卡:

网卡1:用于上公网,ssh等控制

             连接方式:桥接网卡

             名称:WIFI

             混在模式:拒绝

网卡2:用于DPDK测试

             连接方式:桥接网卡

             名称:笔记本的有线网口或USB扩展网口

             混在模式:全部允许

网卡3:用于DPDK测试

             连接方式:桥接网卡

             名称:笔记本的有线网口或USB扩展网口

             混在模式:全部允许

 三、DPDK支持的网卡

Intel网卡

参见:dpdk support intel nics

四、DPDK安装

1.DPDK向导

1). 英文向导

Getting Started Guide for Linux — Data Plane Development Kit 17.05.2 documentation

2). 中文向导

Linux平台上DPDK入门指南 — dpdk 0.11 documentation

2.DPDK源码下载

23.11.0:dpdk-23.11.tar.xz : DPDK

3.DPDK源码解压

tar -xvf dpdk-23.11.tar.xz

4.相关依赖包安装

命令如下:

sudo apt install meson
sudo apt install python3-pyelftools
sudo apt install pkg-config

5.DPDK源码编译

命令如下:

cd dpdk-23.11
meson  build
cd build
ninja
sudo ninja install

卸载只需执行 ninja uninstall 即可

6.DPDK示例编译

命令如下:

cd dpdk-23.1/1build
meson configure -Dexamples=all
or
meson configure -Dexamples=helloworld,l2fwd
ninja

编译完的app在build/examples下 直接执行app即可

五、dpdk-kmods安装

1.dpdk-kmods下载

git clone http://dpdk.org/git/dpdk-kmods

2.dpdk-kmods编译

命令如下:

cd dpdk-kmods/linux/igb_uio

make

得到igb_uio.ko 

3.gcc12安装

有些时候gcc11编译不过kmods,可以安装gcc12,并把gcc切换到gcc12后进行编译,如果编译成功,请忽略此步骤。

sudo apt install gcc-12
sudo apt install g++-12
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 1 --slave /usr/bin/g++ g++ /usr/bin/g++-11
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 2 --slave /usr/bin/g++ g++ /usr/bin/g++-12
sudo update-alternatives --config gcc

4.dpdk-kmods安装

命令如下:

//装载内核模块

sudo modprobe uio
sudo insmod dpdk-kmods/linux/igb_uio/igb_uio.ko intr_mode=legacy


注意: 加载驱动时要带着参数intr_mode=legacy,如果不加参数,将会有问题!

5.dpdk-kmods错误解决

如果出现错误: insmod: ERROR: could not insert module igb_uio.ko: Invalid parameters

首先使用 uname -r查看当前内核版本
再使用modinfo igb_uio.ko查看vermagic字段是否当前内核版本一致,发现不一致
重新编译dpdk,编译后,查看一致性

六、分配大页内存

sudo mkdir -p /dev/hugepages

sudo mount -t hugetlbfs none /dev/hugepages

sudo echo 1024 | sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

七、DPDK绑定网口

//查看网卡信息

lspci | grep Ethernet
lshw -class network -businfo
usertools/dpdk-devbind.py --status

//绑定网卡到DPDK

sudo usertools/dpdk-devbind.py -b igb_uio enp13s0f0 enp13s0f1

八、DPDK解绑定网口

比如:网卡 enp13s0f0 和 enp13s0f1被 DPDK 占用后,ifconfig 里就没有了,要恢复需要进行如下操作

lspci | grep Eth
两个网卡设备号是 0000:0d:00.0 和 0000:0d:00.1
//解绑两个网卡的 igb_uio 驱动,绑定 e1000 驱动:
dpdk-devbind.py -u 0d:00.0 0d:00.1
dpdk-devbind.py -b e1000  0d:00.0 0d:00.1
//启动网卡
ifconfig enp13s0f0 up
ifconfig enp13s0f1 up

九、DPDK TestPMD

1.概述

dpdk-testpmd是dpdk自带的一个例子程序,用来进行dpdk的包转发测试

1).转发模式

TestPMD有3中不同的转发模式。

Input/output mode: 收发模式,这是TestPMD启动时默认的模式,这种模式下cpu的核从网卡的一个口收包,再从另一个口转发出去,统一网卡即可收包又可发包。
Rx-only mode: 接收模式,这种模式下TestPMD收到包后就丢弃。
Tx-only mode: 发送模式,这种模式下TestPMD产生64字节长度的IP包从网卡的网卡发出。
后两种模式分别用于收发测试。

这三种模式外,其它模式详见 TestPMD documentation.

2).Run dpdk-testpmd

sudo build/app/dpdk-testpmd -l 0,1,2,3 -n 4 -- -i --nb-cores=2

“--”之前的参数为EAL参数;
-l EAL的逻辑核(dpdk中类似于线程的概念)列表。0,1表示有两个逻辑核;

-c:通过十六进制的掩码来设置使用哪些cpu核,就上述的-c 0xf,0xf的二进制是1111,假设我有8个核,所以就是使用0~3号核。
-n EAL的内存通道数(设置每个socket的内存通道数),一般为4;

-b:表示不会使用黑名单中的pci设备

-a:表示白名单中的pci设备
“--”之后的是testpmd程序本身的参数;
-i 启用交互模式,此时可以使用命令行;
--nb-cores 用于转发的逻辑核数目。注意testpmd本身需要一个逻辑核用于交互,所以这个参数的值应>0,≤总逻辑核数-1;
--nb-ports 用于转发的网络接口。如果不指定则使用所有可用的接口;2表示用前两个接口。

–stats:如果不开启交互模式,设置stats值,用来每个一段时间统计信息
–nb:设置转发内核的数量
–rxq:设置rx队列的数量
–txq:设置tx队列的数量

-h EAL参数帮助

-- -h testpmd程序本身的参数帮助

2.常用命令

//查看转发配置

testpmd> show config fwd

//使用“start”命令开启转发

testpmd> start

//stop命令后停止程序,此时会显示出各个端口的独立统计和总体统计

testpmd> stop

//查看当前所有在用端口的相关统计

testpmd> show port stats all

//清除当前所有在用端口的相关统计

testpmd> clear port stats all

//查看当前转发相关统计

testpmd> show fwd stats all

//清除当前转发相关统计

testpmd> clear fwd stats all

//设置TestPMD为接收模式

testpmd> stop

testpmd> set fwd rxonly
testpmd> start

//获取帮助信息

testpmd> help

testpmd> help display

 

3.Test Case1

1).测试目的

TestPMD应用程序把两个以太网口连接到外部的流量发生器。在不同的网络工作负载下测试两块网卡间的数据收发,吞吐量和功能。

2).测试Topo

3).测试和配置步骤

sudo build/app/dpdk-testpmd -l 0,1,2,3 -n 4 -- -i --nb-cores=2

//进入testpmd命令行

testpmd> show config fwd

testpmd> start

testpmd> clear port stats all

testpmd> show port stats all

testpmd> clear fwd stats all

testpmd> show fwd stats all

在另外一端的PC机或Virtualbox上run trex或 pktgen

//使用trex或pktgen发包进行测试,详细命令和参数使用,参照trex和pktgen章节

4.Test Case2

1).测试目的

TestPMD应用程序把两个以太网端口连成环回模式。 在没有外部流量发生器的情况下检查网络设备的接收和传输功能,测试同一块网卡两个口之间的数据收发。

2).测试Topo

3).测试和配置步骤

sudo build/app/dpdk-testpmd -l 0,1,2,3 -n 4 -- -i --nb-cores=2

//进入testpmd命令行

testpmd> show config fwd

//使用参数tx_first,无参数时,有时候无法发包

testpmd> start tx_first

testpmd> clear port stats all

testpmd> show port stats all

testpmd> clear fwd stats all

testpmd> show fwd stats all

十、DPDK L2FWD 

1.概述

dpdk-l2fwd是DPDK中的非常经典的例子。二层转发模型。

就是在相邻的网卡接口间互相传递报文。

网口0和网口1之间报文互传。

网口2和网口3之间报文互传。

............

1).Run dpdk-l2fwd

sudo build/examples/dpdk-l2fwd -l 0-1 -n 2 -a 0d:00.0 -a 0d:00.1 -- -q 1 -p 0x3 --no-mac-updating -P

注意:一定要加入参数 -P 打开端口混杂模式(允许全部mac地址通过,而不是只是接收本端口的mac地址)

EAL options

  • -l:测试的端口list(0,1或0-1表示port0和port1;0,1,2,3或0-3表示port0,port1,port2和port3)

  • -c:指定分配给DPDK使用的逻辑数 (-c 1 只使用一个cpu core) (-c 和 -l是互斥的,不能同时使用)
  • -n:每个CPU的内存通道数
    • DPDK EAL的默认参数,必须参数为-c COREMASK -n NUM。
    • COREMASK:一个十六进制位掩码表示分配的逻辑内核数量。
    • NUM:一个十进制整数表示内存通道数量。

--:(破折号)分开了EAL参数和应用程序参数

  • -p PORTMASK
    PORTMASK:一个十六进制位掩码表示分配的端口 (-c 0x3 表示port0和port1)。

  • -q NQ
    NQ:表示分配给每个逻辑内核的收发队列数量(-q 8 表示8个队列)。

  • -T t
    t: 表示打印统计数据到屏幕上的时间间隔,默认为10秒。

2.常用命令

sudo build/examples/dpdk-l2fwd -l 0-1 -n 2 -a 0d:00.0 -a 0d:00.1 -- -q 1 -p 0x3 --no-mac-updating -P

3.Test Case1

1).测试目的

2).测试Topo

3).测试和配置步骤

sudo build/examples/dpdk-l2fwd -l 0-1 -n 2 -a 0d:00.0 -a 0d:00.1 -- -q 1 -p 0x3 --no-mac-updating -P

在另外一端的PC机或Virtualbox上run trex或 pktgen

//使用trex或pktgen发包进行测试,详细命令和参数使用,参照trex和pktgen章节

十一、Trex部署

TRex是cisco基于Intel dpdk开发的软件程序

1.Trex包下载

Index of /trex/release (cisco.com) 下载v3.04.tar.gz

2.Trex包解压

mkdir trex

cd trex

tar -xvf ../Downloads/v3.04.tar.gz

3.绑定网口并配置 

//装载内核模块

sudo modprobe uio
sudo insmod ../../dpdk-kmods/linux/igb_uio/igb_uio.ko

//绑定网卡到DPDK

sudo usertools/dpdk-devbind.py -b igb_uio enp13s0f0 enp13s0f1

sudo ./dpdk_setup_ports.py -i

weiy@weiy-VirtualBox:~/work/trex/v3.04$ sudo ./dpdk_setup_ports.py -i
By default, IP based configuration file will be created. Do you want to use MAC based config? (y/N)y
+----+------+---------+-------------------+-------------------------------------+---------+----------+----------+
| ID | NUMA |   PCI   |        MAC        |                Name                 | Driver  | Linux IF |  Active  |
+====+======+=========+===================+=====================================+=========+==========+==========+
| 0  | -1   | 00:03.0 | 08:00:27:e4:f1:fb | 82540EM Gigabit Ethernet Controller | e1000   | enp0s3   | *Active* |
+----+------+---------+-------------------+-------------------------------------+---------+----------+----------+
| 1  | -1   | 00:08.0 | 08:00:27:99:33:25 | 82540EM Gigabit Ethernet Controller | igb_uio |          |          |
+----+------+---------+-------------------+-------------------------------------+---------+----------+----------+
| 2  | -1   | 00:09.0 | 08:00:27:40:93:58 | 82540EM Gigabit Ethernet Controller | igb_uio |          |          |
+----+------+---------+-------------------+-------------------------------------+---------+----------+----------+
Please choose an even number of interfaces from the list above, either by ID, PCI or Linux IF
Stateful will use order of interfaces: Client1 Server1 Client2 Server2 etc. for flows.
Stateless can be in any order.
Enter list of interfaces separated by space (for example: 1 3) : 1 2

For interface 1, assuming loopback to its dual interface 2.
Destination MAC is 08:00:27:40:93:58. Change it to MAC of DUT? (y/N).
For interface 2, assuming loopback to its dual interface 1.
Destination MAC is 08:00:27:99:33:25. Change it to MAC of DUT? (y/N).
Print preview of generated config? (Y/n)
### Config file generated by dpdk_setup_ports.py ###

- version: 2
  interfaces: ['00:08.0', '00:09.0']
  port_info:
      - dest_mac: 08:00:27:40:93:58 # MAC OF LOOPBACK TO IT'S DUAL INTERFACE
        src_mac:  08:00:27:99:33:25
      - dest_mac: 08:00:27:99:33:25 # MAC OF LOOPBACK TO IT'S DUAL INTERFACE
        src_mac:  08:00:27:40:93:58

  platform:
      master_thread_id: 0
      latency_thread_id: 1
      dual_if:
        - socket: 0
          threads: [2,3]


Save the config to file? (Y/n)
Default filename is /etc/trex_cfg.yaml
Press ENTER to confirm or enter new file: 
File /etc/trex_cfg.yaml already exist, overwrite? (y/N)y
Saved to /etc/trex_cfg.yaml.

 上面操作修改部分看红框:

4.如需修改网卡请编辑配置文件 

sudo vim /etc/trex_cfg.yaml

5.启动trex
 

1).先启动trex主程序,本方案是用网线做的回环测试。

sudo ./t-rex-64 -i

weiy@weiy-VirtualBox:~/work/trex/v3.04$ sudo ./t-rex-64 -i
Starting Scapy server.......... Scapy server is started
The ports are bound/configured.
Starting  TRex v3.04 please wait  ... 
 set driver name net_e1000_em 
 driver capability  : TCP_UDP_OFFLOAD  SLRO 
 set dpdk queues mode to ONE_QUE 
 Number of ports found: 2
zmq publisher at: tcp://*:4500
 wait 1 sec .
port : 0 
------------
link         :  link : Link Up - speed 1000 Mbps - full-duplex
promiscuous  : 0 
port : 1 
------------
link         :  link : Link Up - speed 1000 Mbps - full-duplex
promiscuous  : 0 
 number of ports         : 2 
 max cores for 2 ports   : 1 
 tx queues per port      : 3 
 -------------------------------
RX core uses TX queue number 65535 on all ports
 core, c-port, c-queue, s-port, s-queue, lat-queue
 ------------------------------------------
 1        0      0       1       0      0  
 -------------------------------

-Per port stats table 
      ports |               0 |               1 
 -----------------------------------------------------------------------------------------
   opackets |               0 |               0 
     obytes |               0 |               0 
   ipackets |               0 |               0 
     ibytes |               0 |               0 
    ierrors |               0 |               0 
    oerrors |               0 |               0 
      Tx Bw |       0.00  bps |       0.00  bps 

-Global stats enabled 
 Cpu Utilization : 0.0  %
 Platform_factor : 1.0  
 Total-Tx        :       0.00  bps  
 Total-Rx        :       0.00  bps  
 Total-PPS       :       0.00  pps  
 Total-CPS       :       0.00  cps  

 Expected-PPS    :       0.00  pps  
 Expected-CPS    :       0.00  cps  
 Expected-BPS    :       0.00  bps  

 Active-flows    :        0  Clients :        0   Socket-util : 0.0000 %    
 Open-flows      :        0  Servers :        0   Socket :        0 Socket/Clients :  -nan 
 drop-rate       :       0.00  bps   
 current time    : 5.4 sec  
 test duration   : 0.0 sec  
 

 2).再开启TRex客户端程序

再打开一个终端运行./trex-console

weiy@weiy-VirtualBox:~/work/trex/v3.04$ ./trex-console 

Using 'python3' as Python interpeter


Connecting to RPC server on localhost:4501                   [SUCCESS]


Connecting to publisher server on localhost:4500             [SUCCESS]


Acquiring ports [0, 1]:                                      [SUCCESS]


Server Info:

Server version:   v3.04 @ STL
Server mode:      Stateless
Server CPU:       1 x 12th Gen Intel(R) Core(TM) i5-1240P
Ports count:      2 x 1Gbps @ 82540EM Gigabit Ethernet Controller    

-=TRex Console v3.0=-

Type 'help' or '?' for supported actions

trex> start -f stl/bench.py -m 100% -d 60 -t vm=cached,size=1518


###################################
-m 表示使用多大的带宽,对于10G网卡,90%表示发送9G左右的流量。
-d 测试时间,60秒后自动停止发包。
-f 指定脚本,脚本用于构造发送什么样的数据。
-t 这些参数会传给 -f 参数所指定的脚本,对于 stl/bench.py 我们可以使用 size 指定数据包大小。

 3).客户端中stats可查看流量情况 

trex>stats

 4).主程序界面也可以看到实时流量统计 


总结

本操作过程,在PC机和虚拟机VirtualBox(如果笔记本上run virtualbox,网卡不够可以外接带网口的扩展坞进行测试)上验证成功,一方发包,一方run dpdk-l2fwd,vice verse。

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

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

相关文章

今日问题:动态分配内存出错

2024.3.22 在搜素了许多文章和查阅了许多博客后依然没有找到问题所在&#xff0c;最后无意之间翻看以前的关于动态内存管理的代码后发现&#xff1a; 没加头文件&#xff1a;#include<stdlib.h> 苦笑不得了属于是 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio…

蓝桥杯day7刷题日记

P8697 [蓝桥杯 2019 国 C] 最长子序列 思路&#xff1a;直接遍历&#xff0c;和子序列相同就记录&#xff0c;不然就下一位 #include <iostream> #include <string> using namespace std; int res;int main() {string s,t;cin>>s>>t;int i0,j0;while…

关于msvcp140.dll丢失的解决方法详情介绍,修复dll文件的安全注意事项

在使用电脑的过程中&#xff0c;是否有遇到过关于msvcp140.dll丢失的问题&#xff0c;遇到这样的问题你是怎么解决的&#xff0c;都有哪些msvcp140.dll丢失的解决方法是能够完美解决msvcp140.dll丢失问题的&#xff0c;今天小编将带大家去了解msvcp140.dll文件以及分析完美解决…

代码随想录 Day-23

力扣题目 406.根据身高重建队列 思路 这里可以看出来是有两个维度考虑&#xff0c;和力扣题目 135.分发糖果&#xff08;可以看我day-22的文章&#xff09; 有点类似。 因此遇到这种两个维度权衡的时候&#xff0c;一定是先考虑一个维度再按照另一个维度来重新考虑排序。 两…

innodb 的 buffer pool 管理 page

page 页结构 page是整个InnoDB存储的最基本构件&#xff0c;也是InnoDB磁盘管理的最小单位&#xff0c;与数据库相关的所有内容都存储在这种Page结构里。 Page分为几种类型&#xff0c;常见的页类型有 数据页(Btree Node)Undo页(Undo Log Page)系统页(System Page)事务数据页 …

PC显示字体和浏览器的字体不一致

1&#xff1a;设置了PC的区域&#xff0c;显示字符&#xff0c; 2&#xff1a;导致浏览器显示的字符一半大一半小 3&#xff1a;为什么去设置这个&#xff0c;因为担心封号 4&#xff1a;不让它检测出我是他大佬

【C++初阶】第七站:string类的初识(万字详解、细节拉满)

前言&#xff1a; &#x1f4cd;本文知识点&#xff1a;string的初识 &#x1f4a8;个人博客:Dream_Chaser&#xff5e;-CSDN博客 &#x1f6a9;本专栏&#xff1a;C 目录 一、什么是STL 二、STL的六大组件 三、STL的缺陷 四、为什么学习string类&#xff1f; 五、标准库中…

云ERP vs 本地ERP:优劣对比与选择指南

在性能方面&#xff0c;本地ERP需要需要较高级别的计算机系统和其他设备来确保其高效运行。如果企业的计算机设备不够先进&#xff0c;那么选择本地ERP可能导致系统性能下降。而云ERP解决方案则能保证性能&#xff0c;只要企业拥有稳定的互联网连接即可。 在成本方面&#xff0…

Linux的基本使用

1.Linux的背景 1.1什么Linux Linux是⼀个操作系统.和Windows是"并列"的关系. 1.2Linux系统的优势 1. 开源(意味着免费,便宜) 2. 稳定(Linux可以运⾏很多年,都不会发⽣重⼤问题) 3. 安全(Linux只有管理员或者特定⽤⼾才能访问Linux内核) 4. ⾃由(不会被强加商业产品和…

EasyCloud软件简介

运行环境&#xff1a;Win10 PCL1.9 VTK8.1 Qt5.12 VS2017 基于PCL点云库的三维点云数据处理软件 1&#xff0e;软件用户界面 本软件的用户界面主要包括以下几个部分&#xff08;如图1&#xff09;&#xff1a; [1]菜单栏&#xff0c;将软件功能模块划分为不同菜单&…

JAVA八股--集合面试题

AVA八股--集合面试题--上 java只有值传递&#xff0c;没有引用传递代理模式Java之HashMap和Hashtable选用 ArrayDeque 来实现队列要比 LinkedList 更好为什么HashMap的长度一定是2的次幂&#xff1f;HashMap常见遍历方式 java只有值传递&#xff0c;没有引用传递 文章讲解 文…

第四讲 Buffer Pool

问题&#xff1a;DBMS 是如何管理其内存和磁盘之间来回移动数据的&#xff1f; 答案&#xff1a;在决定如何在磁盘中来回移动数据时&#xff0c;我们必须考虑两个关键方面&#xff1a; 空间控制【Spatial Control】&#xff1a; 将页【pages】写在在磁盘的什么地方&#xff…

vsc ctrl+. 无效的问题

描述 ubuntu ibus 输入法 vsc ctrl.快捷键无效 输出 _e 解决方案: 运行 ibus-setup 把表情符号这里的快捷键改了

mysql 空间查询 多边形内的点

数据库查询 # 1新增空间point类型坐标字段 ALTER TABLE gaoxin_isdp.business_master ADD COLUMN location2 point NULL AFTER location;# 2从原字段更新点位字段&#xff0c;原字段poi1是字符串106.474596,29.464360 UPDATE business_master SET location POINT(substr(poi…

基于Springboot+Vue的前后端分离的简单Demo案例(一)

后端创建Springboot项目 创建数据库表结构及表信息 添加依赖&#xff08;pom.xml&#xff09; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/X…

微服务网关介绍

1. 为什么是Spring Cloud Gateway 一句话&#xff0c;Spring Cloud已经放弃Netflix Zuul了。现在Spring Cloud中引用的还是Zuul 1.x版本&#xff0c;而这个版本是基于过滤器的&#xff0c;是阻塞IO&#xff0c;不支持长连接。Zuul 2.x版本跟1.x的架构大一样&#xff0c;性能也有…

GraalVM详细安装及打包springboot、java、javafx使用教程(打包普通JAVA项目篇)

前言 在当前多元化开发环境下&#xff0c;Java作为一种广泛应用的编程语言&#xff0c;其应用部署效率与灵活性的重要性日益凸显。Spring Boot框架以其简洁的配置和强大的功能深受开发者喜爱&#xff0c;而JavaFX则为开发者提供了构建丰富桌面客户端应用的能力。然而&#xff…

Python模块与包管理使用pip与virtualenv【第151篇—模块与包管理】

Python模块与包管理&#xff1a;使用pip与virtualenv 在Python开发中&#xff0c;模块和包管理是至关重要的&#xff0c;它们使得代码的组织、重用和共享变得更加简单和高效。本文将介绍两个Python生态系统中最常用的工具&#xff1a;pip和virtualenv。通过这些工具&#xff0…

探索医用制氧机的种类及其应用场景

医用制氧机是一种能够制取高纯度氧气的制氧设备&#xff0c;广泛应用于各种场景。随着科技的进步和行业需求的增加&#xff0c;医用制氧机的种类和应用领域也在不断扩展。本文将探索医用制氧机的多元种类及其应用领域&#xff0c;以更好地了解这一设备的重要性。 一、医用制氧机…