7.k8s四層代理service

Service的基本介紹

  Cluster IP:每個 Service 都分配了一個Cluster IP,它是一個虛擬的內部IP地址,用于在集群內部進行訪問。這個虛擬IP是由Kubernetes自動分配的,并且與Service對象一一對應。 端口映射:Service可以映射一個或多個端口到后端Pod的端口。這意味著客戶端可以通過訪問Service 的某個端口來訪問后端Pod的應用程序。 負載均衡:Service使用四層代理實現負載均衡,將來自客戶端的請求均勻地分發到后端的Pod。當多個Pod屬于同一個Service時,Service會自動將請求路由到可用的Pod上,以實現負載均衡。 DNS解析:每個Service都會自動注冊到Kubernetes集群的內置DNS中,通過服務名稱可以解
析出Service的虛擬IP。這樣,客戶端可以使用服務名稱作為域名來訪問Service,而無需知道具體的虛擬IP地址。

Kubernetes 集群中的ip地址

1、Pod IP 地址:每個運行的Pod都會分配一個獨立的IP地址。Pod IP地址是集群內部的IP地
址,用于Pod之間的通信。 
2、Service Cluster IP 地址:Service 對象分配的虛擬IP地址稱為Cluster IP。Cluster IP是集群內部的IP地址,用于在集群內部進行服務發現和訪問。客戶端可以通過訪問Service的Cluster IP 地址來訪問與該Service相關聯的一組Pod。 
3、Node IP地址:Node(節點)是Kubernetes集群中的工作節點,每個節點都有一個IP地
址。Node IP地址用于與集群外部的網絡進行通信,例如從外部訪問集群中的服務。Node IP地
址可以是物理節點的IP地址或云提供商分配的虛擬IP地址。 
這三類IP地址在Kubernetes集群中扮演不同的角色: 
1、Pod IP 地址用于Pod之間的通信,實現了容器間的網絡互通。 
2、Service Cluster IP 地址用于提供服務的訪問入口,客戶端可以通過訪問Service的Cluster IP 地址來訪問與之關聯的一組Pod。 
3、Node IP地址用于與集群外部的網絡進行通信,允許外部流量進入集群或從集群中流出。 

創建Service資源

kubectl explain service 
apiVersion (string): 表示 Service 資源使用的API版本。 
kind (string): 表示創建的資源類型,對于Service資源,值為"Service"。 
metadata (Object): 包含定義Service 的元數據,例如名稱、命名空間和標簽等。 
spec (Object): 定義 Service 的行為和規范,包含以下字段: ? allocateLoadBalancerNodePorts (boolean): 表示是否動態分配負載均衡器的節點端口。? clusterIP (string): 表示Service的Cluster IP地址,用于集群內部訪問Service,
默認由系統自動分配。 
? clusterIPs ([]string): 表示Service的多個Cluster IP地址,用于集群內部訪問
Service。 
? externalIPs ([]string): 表示將Service公開到集群外部的外部IP地址列表。 
? externalName (string): 表示Service的外部名稱,用于將Service映射到外部
DNS名稱。 
? externalTrafficPolicy (string): 表示Service外部流量的負載均衡策略,可選值為
"Local""Cluster"。 
? healthCheckNodePort (integer): 表示健康檢查的節點端口。 
? ipFamilies ([]string): 表示Service支持的IP地址族列表。 
? ipFamilyPolicy (string): 表示Service的IP地址族策略,可選值為"SingleStack""PreferDualStack"。 
? loadBalancerIP (string): 表示分配給負載均衡器的IP地址。 
? loadBalancerSourceRanges ([]string): 表示允許訪問負載均衡器的源IP地址范
圍。 
? ports ([]Object): 定義Service監聽的端口映射配置,包括協議、端口號和目標端口
等。 
? publishNotReadyAddresses (boolean): 表示是否將未就緒的Pod的地址也發布
給Service。 
? selector (map[string]string): 標簽選擇器,用于選擇與Service關聯的后端Pod。 
? sessionAffinity (string): 表示會話親和性的策略,可選值為"None""ClientIP""ClientIP"。 
? sessionAffinityConfig (Object): 會話親和性的配置參數。 
? topologyKeys ([]string): 表示用于服務拓撲感知的鍵列表。
? type (string): 表示Service的類型,可選值為"ClusterIP""NodePort""LoadBalancer""ExternalName"1. ClusterIP應用場景: 
? 類型:ClusterIP是默認的Service類型。 
? 應用場景:適用于集群內部的服務發現和訪問。ClusterIP將為Service分配一個虛擬
的Cluster IP地址,只能在集群內部訪問。通過該地址,其他Pod或Service可以訪
問與之關聯的一組Pod。2.NodePort應用場景:
? 類型:NodePort類型將Service公開到集群節點上的某個固定端口。 
? 應用場景:適用于需要從集群外部訪問Service的場景。通過指定NodePort類型,
Kubernetes會為Service分配一個隨機的高端口號,并將該端口映射到每個節點上。
從外部網絡,可以通過<NodeIP>:<NodePort>的方式訪問Service。 3.LoadBalancer:
? 類型:LoadBalancer類型通過云服務提供商的負載均衡器將Service公開到外部網
絡。 
? 應用場景:適用于需要高可用性和負載均衡的場景。通過LoadBalancer類型,
Kubernetes將與云服務提供商集成,自動創建外部負載均衡器,并將流量分發到
Service關聯的Pod。外部客戶端可以通過負載均衡器的公共IP訪問Service。 4.ExternalName: 
? 類型:ExternalName類型是一種將Service映射到外部DNS名稱的方式。 
? 應用場景:適用于將Service與外部服務集成的場景。通過ExternalName類型,
Service不會分配Cluster IP或NodePort,而是直接映射到一個外部DNS名稱。當
集群內部的Pod或Service訪問該Service時,DNS解析將會直接返回該外部DNS
名稱對應的IP地址。查看service的spec.ports字段如何定義? # kubectl explain service.spec.ports? name: 該字段可選,用于標識端口的名稱。它在Service定義中起到描述作用,方便理解和管
理端口。 
? protocol: 該字段可選,用于指定端口使用的協議,如TCP、UDP或SCTP。默認情況下,為
TCP協議。根據實際需求選擇正確的協議。 
? port: 該字段必需,用于定義Service監聽的端口號。當其他Pod或Service訪問該Service
時,將使用此端口號。 
? targetPort: 該字段必需,用于指定與該端口關聯的Pod容器的端口號或名稱。當請求到達
Service 后,將使用此端口號將流量轉發到后端Pod的容器端口。 
? nodePort: 該字段僅在NodePort類型的Service中可選。它用于指定在每個節點上公開的端
口號。如果未指定,Kubernetes將自動分配一個端口號。通過定義Service的端口,可以實現將流量從Service端口轉發到后端Pod的容器端口。每個端口
定義可以映射到一個或多個后端Pod,實現負載均衡和服務發現的功能。根據實際需求,可以在
spec.ports 字段中定義多個端口,以滿足不同端口的訪問需求。 root@ubuntu0:~/matedata/service# cat cluster.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: xpplabels:env: apps
spec:replicas: 3selector:matchLabels:run: nginxtemplate:metadata:labels:run: nginxspec:containers:- name: my-nginximage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: nginxlabels:run: nginx
spec:type: NodePortports:- port: 80protocol: TCPtargetPort: 80nodePort: 30085selector:run: nginx此時 已經關聯上了root@ubuntu0:~/matedata/service# kubectl describe svc nginx 
Name:                     nginx
Namespace:                default
Labels:                   run=nginx
Annotations:              <none>
Selector:                 run=nginx
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.111.189.98
IPs:                      10.111.189.98
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30085/TCP
Endpoints:                10.244.152.95:80,10.244.25.159:80,10.244.25.160:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>
root@ubuntu0:~/matedata/service# kubectl get pods -o wide
NAME                  READY   STATUS    RESTARTS   AGE   IP              NODE      NOMINATED NODE   READINESS GATES
xpp-b6458f4cb-8spfw   1/1     Running   0          66s   10.244.152.95   ubuntu2   <none>           <none>
xpp-b6458f4cb-jv9mn   1/1     Running   0          66s   10.244.25.159   ubuntu1   <none>           <none>
xpp-b6458f4cb-t5prl   1/1     Running   0          66s   10.244.25.160   ubuntu1   <none>           <none>
root@ubuntu0:~/matedata/service# kubectl get svc 
kubernetes  nginx       
root@ubuntu0:~/matedata/service# kubectl get svc nginx 
NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
nginx   NodePort   10.111.189.98   <none>        80:30085/TCP   16s
root@ubuntu0:~/matedata/service# curl 192.168.23.99:30085
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>在創建service的時候他也會創建和service一樣的ep資源
root@ubuntu0:~/matedata# kubectl get ep
NAME         ENDPOINTS                                            AGE
kubernetes   192.168.23.99:6443                                   28d
nginx        10.244.152.95:80,10.244.25.159:80,10.244.25.160:80   23hclusterIP類型
root@ubuntu0:~/matedata/service# cat cluster.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: xpplabels:env: apps
spec:replicas: 3selector:matchLabels:run: nginxtemplate:metadata:labels:run: nginxspec:containers:- name: my-nginximage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: nginxlabels:run: nginx
spec:#type: NodePorttype: ClusterIPports:- port: 8080   #映射到clusterIP類型的虛擬ip的端口protocol: TCPtargetPort: 80#nodePort: 30085selector:run: nginx
root@ubuntu0:~/matedata/service# kubectl describe svc nginx |grep -i endpoint
Endpoints:         10.244.152.96:80,10.244.25.161:80,10.244.25.162:80
root@ubuntu0:~/matedata/service# kubectl get svc nginx 
NAME    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
nginx   ClusterIP   10.105.110.237   <none>        8080/TCP   10s
root@ubuntu0:~/matedata/service# curl 10.105.110.237:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>

創建ExternalName類型的Service

應用場景:跨名稱空間訪問 
需求:default名稱空間下的pod想要訪問nginx名稱空間下的pod服務要實現在不同命名空間下的 Pod 之間進行跨命名空間訪問,可以按照以下步驟進行操作: 
第一步:在nginx名稱空間創建pod和service資源
root@ubuntu0:~# kubectl create ns nginx
namespace/nginx created
root@ubuntu0:~# kubectl get ns  
NAME              STATUS   AGE
default           Active   29d
kube-node-lease   Active   29d
kube-public       Active   29d
kube-system       Active   29d
nginx             Active   7s
root@ubuntu0:~/matedata/service# cat nginx_pod.yaml 
apiVersion: apps/v1 
kind: Deployment 
metadata: name: nginxnginx namespace: nginx 
spec:  replicas: 1 selector: matchLabels: web: nginx template: metadata: labels: web: nginx spec: containers: - name: nginx image: nginximagePullPolicy: IfNotPresent 
root@ubuntu0:~/matedata/service# kubectl apply -f nginx_pod.yaml 
deployment.apps/nginxnginx created
root@ubuntu0:~/matedata/service# kubectl get pods -o wide -n nginx
NAME                          READY   STATUS    RESTARTS   AGE   IP              NODE      NOMINATED NODE   READINESS GATES
nginxnginx-5f4bf9c4dc-psmnb   1/1     Running   0          9s    10.244.152.97   ubuntu2   <none>           <none>
root@ubuntu0:~/matedata/service# cat nginx_svc.yaml 
apiVersion: v1 
kind: Service 
metadata: name: nginx-svc namespace: nginx 
spec: selector: web: nginx ports: - name: http protocol: TCP port: 80 targetPort: 80 
root@ubuntu0:~/matedata/service# kubectl apply -f nginx_svc.yaml 
service/nginx-svc created
root@ubuntu0:~/matedata/service# kubectl describe svc nginx-svc -n nginx
Name:              nginx-svc
Namespace:         nginx
Labels:            <none>
Annotations:       <none>
Selector:          web=nginx
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.103.175.198
IPs:               10.103.175.198
Port:              http  80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.152.97:80
Session Affinity:  None
Events:            <none>第二步:在default名稱空間創建pod和service資源
root@ubuntu0:~/matedata/service# cat default.yaml 
apiVersion: apps/v1 
kind: Deployment 
metadata: name: default namespace: default 
spec:  replicas: 1 selector: matchLabels: app: busybox template: metadata: labels: app: busybox spec: containers: - name: busybox image: busybox:1.28 imagePullPolicy: IfNotPresent command: ["/bin/sh","-c","sleep 36000"]
root@ubuntu0:~/matedata/service# kubectl apply -f default.yaml 
deployment.apps/default configured
root@ubuntu0:~/matedata/service# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE   IP              NODE      NOMINATED NODE   READINESS GATES
default-55cdb47c4-zl2x9   1/1     Running   0          6s    10.244.25.164   ubuntu1   <none>           <none>root@ubuntu0:~/matedata/service# cat client_svc.yaml 
apiVersion: v1 
kind: Service 
metadata: name: client-svc 
spec: type: ExternalName externalName: nginx-svc.nginx.svc.cluster.local   #連接到了nginx-svc上ports: - name: http port: 80 targetPort: 80service完整的dns名稱
service_name.svc_namespace.svc.cluster.local#該文件中指定了到 nginx-svc 的軟鏈,讓使用者感覺就好像調用自己命名空間的服務一樣。
root@ubuntu0:~/matedata/service# kubectl apply -f client_svc.yaml 
service/client-svc created
root@ubuntu0:~/matedata/service# kubectl get svc client-svc 
NAME         TYPE           CLUSTER-IP   EXTERNAL-IP                         PORT(S)   AGE
client-svc   ExternalName   <none>       nginx-svc.nginx.svc.cluster.local   80/TCP    17s#登錄到default這個名稱空間的pod
root@ubuntu0:~/matedata/service# kubectl exec -it default-55cdb47c4-zl2x9 -- sh  
/ # wget client-svc 
Connecting to client-svc (10.103.175.198:80)
index.html           100% |*****************************************************************************************************************************************************************|   612   0:00:00 ETA
/ # wget nginx-svc.nginx-ns.svc.cluster.local
wget: bad address 'nginx-svc.nginx-ns.svc.cluster.local'
/ # wget nginx-svc.nginx.svc.cluster.local
Connecting to nginx-svc.nginx.svc.cluster.local (10.103.175.198:80)
wget: can't open 'index.html': File exists
/ # wget -q -O - nginx-svc.nginx.svc.cluster.local
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
上面兩個請求的結果一樣 

映射外部服務案例

k8s集群引用外部的MariaDB數據庫 
在機器上安裝mariadb數據庫
root@ubuntu0:~# apt install mariadb-server -y
root@ubuntu0:~# systemctl start mariadb在 ubuntu0節點上創建一個名為 mysql 的目錄,并進入該目錄: 
root@ubuntu0:~# mkdir mysql
root@ubuntu0:~# cd mysql/創建一個 mysql_service.yaml 文件,并在其中定義一個類型為 ClusterIP 的 Service,用于代理外部的 MySQL 服務。設置服務監聽的端口為 3306: 
root@ubuntu0:~/mysql# cat mysql_service.yaml 
apiVersion: v1 
kind: Service 
metadata: name: mysql 
spec: type: ClusterIP ports: - port: 3306 
沒寫類型默認為clusterIP類型
你會發現以上創建的svc沒有selector 沒辦法關聯后端pod,所以他的endpoint它的值為空
root@ubuntu0:~/mysql# kubectl apply -f mysql_service.yaml 
service/mysql created
root@ubuntu0:~/mysql# kubectl describe svc mysql |grep -i endpoint
Endpoints:         <none>
所以需要創建一個endpoint去關聯他
root@ubuntu0:~/mysql# cat mysql_endpoint.yaml 
apiVersion: v1 
kind: Endpoints 
metadata: name: mysql   #只要metadata下的name一樣就能關聯上service
subsets: 
- addresses: - ip: 192.168.23.99 ports: - port: 3306
root@ubuntu0:~/mysql# kubectl apply -f mysql_endpoint.yaml 
endpoints/mysql created
此時就關聯上了
root@ubuntu0:~/mysql# kubectl describe svc mysql |grep -i endpoint
Endpoints:         192.168.23.99:3306通過以上步驟,我們成功在 Kubernetes 集群中引入了外部的 MySQL 數據庫。通過創建 
Service 和 Endpoints,我們將外部 MySQL 的 IP 地址和端口與集群內內的 Service 進行了關聯,
使得集群內部的應用可以通過 Service 名稱訪問外部的 MySQL 服務。通過訪問該 Service,可以使用集群內的應用與外部的 MySQL 數據庫進行交互。要測試引入的數據庫是否可用,你可以在 Kubernetes 集群內的某個 Pod 中執行以下步驟: 
創建一個測試用的 Pod: 
root@ubuntu0:~/mysql# kubectl exec -it default-55cdb47c4-zl2x9 -- sh
/ #  telnet mysql 3306 
j
5.5.5-10.6.22-MariaDB-0ubuntu0.22.04.1%Mruuk9z|t񫀕".a"!{n4T/-1mysql_native_password
Connection closed by foreign host
/ #  telnet 10.96.237.238 3306 
j
5.5.5-10.6.22-MariaDB-0ubuntu0.22.04.1&)TK]p<zqt񫀕HUS~Ahj[hzKGmysql_native_password8#HY000Proxy header is not accepted from 192.168.23.98Connection closed by foreign host
/ #  telnet 192.168.23.99 3306 
j
5.5.5-10.6.22-MariaDB-0ubuntu0.22.04.1'i&}eb=I7t񫀕ui2YLP+(#xU}mysql_native_password8#HY000Proxy header is not accepted from 192.168.23.98Connection closed by foreign host

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/96661.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/96661.shtml
英文地址,請注明出處:http://en.pswp.cn/web/96661.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt 工程中 UI 文件在 Makefile 中的處理

Qt 工程中 UI 文件在 Makefile 中的處理 在 Qt 工程中&#xff0c;.ui 文件&#xff08;Qt Designer 界面文件&#xff09;需要通過 uic&#xff08;用戶界面編譯器&#xff09;工具轉換為對應的頭文件。以下是幾種情況下如何處理 UI 文件&#xff1a;1. 使用 qmake 自動生成 M…

ZLMediaKit性能測試

一、環境 系統&#xff1a;虛擬機 Ubuntu22.04 64bit配置: 4核8G設置&#xff1a;ulimit -n 102400 二、安裝 依賴安裝sudo apt update sudo apt install ffmpeg sudo apt install nloadzlm服務安裝參考&#xff1a;https://blog.csdn.net/hanbo622/article/details/149064939?…

智能文檔處理業務,應該選擇大模型還是OCR專用小模型?

智能文檔處理業務中&#xff0c;最佳策略不是二選一&#xff0c;而是“大小模型協同”。用專用小模型處理高頻、標準化的核心文檔流&#xff0c;實現極致效率與成本控制&#xff1b;用大模型賦能非標、長尾文檔的靈活處理&#xff0c;加速業務創新。 OCR小模型會被大模型取代嗎…

android 如何判定底部導航欄顯示時 不是鍵盤顯示

在 Android 中判定底部導航欄是否顯示時&#xff0c;核心痛點是 區分 “導航欄的底部 Insets” 和 “軟鍵盤彈出的底部 Insets”—— 兩者都會導致 getSystemWindowInsetBottom() 返回非零值&#xff0c;直接判斷會誤將鍵盤彈出當成導航欄顯示。以下是基于 WindowInsets 類型區…

你知道服務器和電腦主機的區別嗎?

我們都知道服務器和臺式主機有著不同之處&#xff0c;但具體說出個一二三來很多人還是一頭霧水&#xff0c;也就是知其然不知其所以然&#xff0c;都是CPU主板 內存 硬盤 電源&#xff0c;撐死就差一個顯卡不同&#xff0c;但其實服務器和我們正常使用的臺式主機差距很大&#…

什么是包裝類

什么是包裝類 在Java中&#xff0c;包裝類&#xff08;Wrapper Class&#xff09;是為基本數據類型提供的對應的引用類型。Java中的基本數據類型&#xff08;如int、char、boolean等&#xff09;不是對象&#xff0c;為了在需要對象的場景中使用基本數據類型&#xff08;如集合…

用Python打造專業級老照片修復工具:讓時光倒流的數字魔法

在這個數字化時代&#xff0c;我們手中珍藏著許多泛黃、模糊、甚至有劃痕的老照片。這些照片承載著珍貴的回憶&#xff0c;但時間的侵蝕讓它們失去了往日的光彩。今天&#xff0c;我將帶您一起用Python開發一個專業級的老照片修復工具&#xff0c;讓這些珍貴的記憶重現光彩。為…

linux中查找包含xxx內容的文件

linux中怎么查找哪個文件包含xxx內容 在Linux中查找包含特定內容的文件 在Linux系統中&#xff0c;有幾種常用方法來查找包含特定內容的文件。以下是幾種最有效的方法&#xff1a;1. 使用 grep 命令&#xff08;最常用&#xff09; 基本語法&#xff1a;bash grep -r "搜索…

sklearn 加州房價數據集 fetch_california_housing 出錯 403: Forbidden 修復方案

問題 加載加州房價數據時出現 403 錯誤 HTTP Error 403: Forbidden from sklearn.datasets import fetch_california_housingcalifornia fetch_california_housing() print(california.target.shape) 解決方案 運行下述代碼&#xff0c;然后再運行上述的 fetch_california_hou…

嵌入式學習---(硬件)

1、在LED實驗中&#xff0c;在對Soc引腳配置時都做了哪些工作&#xff1f;復用功能配置操作寄存器&#xff1a;IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03將引腳的低 4 位設置為 0101&#xff0c;將引腳復用為 GPIO 功能電氣特性配置操作寄存器&#xff1a;IOMUXC_SW_PAD_CTL_PAD_GPIO1…

微信小程序開發教程(十一)

目錄&#xff1a;1.上拉觸底案例-初步實現上拉觸底效果2.上拉觸底案例-添加loading效果3.上拉觸底案例-節流處理4.擴展-自定義編譯模式1.上拉觸底案例-初步實現上拉觸底效果頁面加載的時候調用這個方法&#xff1a;設置樣式&#xff1a;下拉觸底后繼續調用獲取顏色的方法2.上拉…

Android相機API2,基于GLSurfaceView+SurfaceTexture實現相機預覽,集成的相機算法采用GPU方案,簡要說明

Android相機API2&#xff0c;基于GLSurfaceViewSurfaceTexture實現相機預覽&#xff0c;集成的相機算法采用GPU方案&#xff0c;簡要流程如下(不疊加相機算法的預覽顯示流程也大體如此&#xff0c;只是去掉了算法部分)&#xff1a;進入相機&#xff1a;1&#xff0c;新建實現了…

[code-review] 日志機制 | `LOG_LEVEL`

第6章&#xff1a;日志機制&#xff08;調試&#xff09; 歡迎來到我們了解ChatGPT-CodeReview項目的最后一章 在第5章&#xff1a;文件過濾邏輯&#xff08;范圍管理器&#xff09;中&#xff0c;我們學習了機器人如何智能地決定哪些文件需要發送給AI審查。 但一旦機器人開…

n8n工作流平臺入門學習指南

目錄 1、基礎背景 2、核心概念 2.1 節點(Nodes) 2.2 連接(Connections) 2.3 工作流(Workflows) 3、常用節點說明 4、基于Docker快速部署 5、學習資料 6、常見問題 強烈推薦&#xff0c;大家不懂的直接問&#xff1a;N8N大師&#xff08;GPT&#xff09;&#xff0c;科…

【Oracle經驗分享】字符串拼接過長問題的解決方案 —— 巧用 XMLAGG

&#x1f4d1; 目錄&#x1f50d; 問題背景?? 常見拼接方式的限制&#x1f4a1; XMLAGG 的解決方案&#x1f4dd; 示例代碼&#x1f4cc; 注意事項? 總結&#x1f50d; 問題背景在日常開發中&#xff0c;我們經常需要把多行數據拼接成一個字符串。例如將某個字段的多條記錄拼…

AJAX入門-URL、參數查詢、案例查詢

本系列可作為前端學習系列的筆記&#xff0c;代碼的運行環境是在VS code中&#xff0c;小編會將代碼復制下來&#xff0c;大家復制下來就可以練習了&#xff0c;方便大家學習。 HTML、CSS、JavaScript系列文章 已經收錄在前端專欄&#xff0c;有需要的寶寶們可以點擊前端專欄查…

【SpringBoot】24 核心功能 - Web開發原理 -Spring Boot 異常處理機制

前言 在開發 Web 應用程序時&#xff0c;異常處理是一個至關重要的部分。Spring Boot 提供了一套強大的異常處理機制&#xff0c;使得開發者能夠輕松地處理和響應各種異常情況。本文將深入探討 Spring Boot 中的異常處理機制&#xff0c;包括默認的錯誤處理規則、定制錯誤處理邏…

JVM第一部分

PC寄存器&#xff1a;存儲的是數字 0, 3, 6, 10, 17 這樣的字節碼偏移量。 LineNumberTable&#xff1a;是一個映射表&#xff0c;它將上述的偏移量“翻譯”成我們程序員能看懂的源代碼行號。 JVM堆 JVM堆由兩部分組成&#xff1a;年輕代老年代 年輕代包括三部分&#xff1a;ed…

IDEA使用Maven和MyBatis簡化數據庫連接(配置篇)

目錄&#xff1a; Maven:簡化項目構建 MyBatis:簡化Jdbc Maven&#xff1a;是一款項目構建與依賴管理工具&#xff0c;核心作用是自動化項目編譯、打包等流程&#xff0c;并統一管理項目所需的第三方 Jar 包&#xff08;如 MyBatis 的 Jar 包&#xff09;。 MyBatis&#xf…

Java 泛型詳解:從基礎到高級應用

目錄 一、泛型的基本概念 為什么需要泛型&#xff1f; 二、泛型類與泛型接口 【1】定義泛型類 【2】定義泛型接口 三、泛型方法 四、泛型通配符 【1】無界通配符&#xff08;?&#xff09; 【2】上界通配符&#xff08;? extends T&#xff09; 【3】下界通配符&am…