后端微服務基礎架構Spring Cloud

版本關系

版本發布說明-阿里云Spring Cloud Alibaba官網

選擇

創建項目

創建父項目

什么都不動,創建即可

1)? 刪掉沒用的文件

保留

2) pom中加入

打包方式  <packaging>pom</packaging>

3) 刪掉src

4) pom.xml中刪除沒用的

5)更改pom.xml中

spring-boot-starter-parent版本為更改為3.3.4,點擊右上角的maven標記刷新依賴

? ?刪掉依賴

properties更換為

  <properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-cloud.version>2023.0.3</spring-cloud.version><spring-cloud-alibaba.version>2023.0.3.2</spring-cloud-alibaba.version></properties>

再加入:刷新

<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

完整的:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.4</version><relativePath/> <!-- lookup parent from repository --></parent><packaging>pom</packaging><groupId>com.i7i8i9</groupId><artifactId>weifuwu3</artifactId><version>0.0.1-SNAPSHOT</version><name>weifuwu3</name><description>weifuwu3</description><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-cloud.version>2023.0.3</spring-cloud.version><spring-cloud-alibaba.version>2023.0.3.2</spring-cloud-alibaba.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

創建最外層服務

1.創建module? ---services

就是個普通java module,不用選add sample code

pom中也是加入打包方式

<packaging>pom</packaging>

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>weifuwu3</artifactId><groupId>com.i7i8i9</groupId><version>0.0.1-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>services</artifactId><packaging>pom</packaging><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties></project>

刪除src

創建微服務

新建module ,主要是確認一定在上面建立的services服務下,不用選add sample code,Parent一定要對

創建完成后,在父級服務pom中可以看到<modules>

查看maven結構

可以點擊齒輪,選中Group Modules

完善項目

導入公共依賴

主要是在最外層services pom.xml中加入,比如nacos

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>weifuwu3</artifactId><groupId>com.i7i8i9</groupId><version>0.0.1-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>services</artifactId><packaging>pom</packaging><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies>
<!--        導入nacos--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency></dependencies>
</project>

在各層服務依賴中查看

啟動

給每個微服務pom.xml導入Web依賴

在某個微服務上點擊右鍵 generate,選擇 edit starters

不行自己導

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>weifuwu3</artifactId><groupId>com.i7i8i9</groupId><version>0.0.1-SNAPSHOT</version><relativePath>../../pom.xml</relativePath></parent><modelVersion>4.0.0</modelVersion><artifactId>service-order</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>

新建主程序

src/main/java下新建

com.i7i8i9.auth.AuthMainApplication

package com.i7i8i9.order;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class OrderMainApplication {public static void main(String[] args) {SpringApplication.run(OrderMainApplication.class, args);}
}

編寫application.yml

spring.application.name=service-order
server.port=8080
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

Nacos

? 下載,啟動

http://192.168.32.1:8848/nacos/index.html

基本原則

1.Gateway:? ?前后端之間會經過GateWay, 后端服務之間因為屬于同一個工程,一般不經過

? ? ? ? ? ? ? ? ? ? ? GateWay,但也可以經過

服務

1.目錄

? ? ?服務可以都放在服務模塊下,但是需要在服務模塊的pom.xml體現

? ? ??

? ?pom.xml

? ??

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>cloud-demo</artifactId><groupId>com.i7i8i9</groupId><version>0.0.1-SNAPSHOT</version></parent><packaging>pom</packaging><modelVersion>4.0.0</modelVersion><modules><module>service-product</module><module>service-order</module><module>seata-account</module><module>seata-business</module><module>seata-order</module><module>seata-storage</module></modules><artifactId>services</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies>
<!--   sentinel是流量保護    --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><dependency><!--        nucos 注冊中心   服務發現--><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--      所有下屬微服務的配置來源--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><!-- openfeign 遠程調用--><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>annotationProcessor</scope></dependency><dependency><groupId>com.i7i8i9</groupId><artifactId>model</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies>
</project>

Feign遠程調用

指的是需要調用其他服務的服務

1.服務src下建立feign文件夾

2.服務主程序上加注釋

@EnableFeignClients(basePackages = "com.atguigu.business.feign")

3.Feign文件夾內建需要調用的抽象類客戶端

? ? ?主要目的是供serviceImp使用

? ? 快速的方式是去被調用controller方面里面復制

方法名前面可以去掉public

package com.atguigu.business.feign;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;@FeignClient(value="seata-storage")     //服務名稱nacos里面有
public interface StorageFeignClient {//找到扣庫存服務的接口復制其方法名和參數/**** @param commodityCode* @param count* @return*/@GetMapping("/deduct")String deduct(@RequestParam("commodityCode") String commodityCode,@RequestParam("count") Integer count);
}

4.服務實現類

主要是裝配Feign客戶端,再調用其方法

package com.atguigu.business.service.impl;import com.atguigu.business.feign.OrderFeignClient;
import com.atguigu.business.feign.StorageFeignClient;
import com.atguigu.business.service.BusinessService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class BusinessServiceImpl implements BusinessService {//第一步就是拿到遠程服務客戶端@AutowiredStorageFeignClient storageFeignClient;@AutowiredOrderFeignClient orderFeignClient;@Overridepublic void purchase(String userId, String commodityCode, int orderCount) {//TODO 1. 扣減庫存storageFeignClient.deduct(commodityCode,orderCount);//TODO 2. 創建訂單orderFeignClient.create(userId,commodityCode,orderCount);}
}

GateWay

SpringCloud基礎2——Nacos配置、Feign、Gateway-阿里云開發者社區

nacos(七): gateway(單體)-CSDN博客

創建服務

pom.xml引入gateway和loadbalence

 <!--網關--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!--消費者--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId><version>3.1.5</version></dependency>

新建module

加上服務發現@EnableDiscoveryClient

package com.i7i8i9.gateway;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);}
}

啟動

yml

application.yml

spring:active: devapplication:name: gatewaycloud:nacos:discovery:server-addr: 127.0.0.1:8848username: nacospassword: nacosconfig:server-addr: 127.0.0.1:8848file-extension: propertiesusername: nacospassword: nacosloadbalancer:nacos:enabled: truegateway:discovery:locator:enabled: trueroutes: # 網關路由配置#第一組網關路由配置,針對于服務service-auth- id: serviceAuth # 路由id,自定義,只要唯一即可uri: lb://service-auth # 指的是從nacos中按照名稱獲取微服務,并遵循負載均衡策略predicates: # 路由斷言。也就是判斷請求是否符合路由規則的條件。predicates譯為謂語、斷言- Path=/auth/** # 路徑斷言。當請求路徑滿?Path指定的規則時,才進?路由換發filters:- StripPrefix=1    # 拼接好url之后去掉1層路徑也就是p1#http://localhost:10010/auth/token,因為/auth/路徑觸發了第一個路由規則,路由去掉p1這一項,重新拼接為lb://service-auth/auth去獲取訪問的結果。:datasource:driver-class-name: ${i7i8i9.datasource.driver-class-name}url: jdbc:mysql://${i7i8i9.datasource.host}:${i7i8i9.datasource.port}/${i7i8i9.datasource.database}?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=trueusername: ${i7i8i9.datasource.username}password: ${i7i8i9.datasource.password}

?- id: serviceAuth # 路由id,自定義,只要唯一即可
? ? ? ? ? ?uri: lb://service-auth # 指的是從nacos中按照名稱獲取微服務,并遵循負載均衡策略
? ? ? ? ? ?predicates: # 路由斷言。也就是判斷請求是否符合路由規則的條件。predicates譯為謂語、斷言
? ? ? ? ? ? ? - Path=/auth/** # 路徑斷言。當請求路徑滿?Path指定的規則時,才進?路由換發
? ? ? ? ? ?filters:
? ? ? ? ? ? ? - StripPrefix=1 ? ?# 拼接好url之后去掉1層路徑也就是p1
? ? #http://localhost:10010/auth/token,因為/auth/路徑觸發了第一個路由規則,路由去掉p1這一項,重新拼接為lb://service-auth/auth去獲取訪問的結果。:

假設有個服務實際調用地址為

? ?http://localhost:8085/token

? ?則也可以用以下兩種方式訪問:

? ??http://localhost:10010/service-auth/token? ? ? 這種service-auth就是實際上nacos服務名稱

? ??http://localhost:10010/auth/token? ? ? ? ? ? ? 這是標準的,auth就是上面的斷言,就是當出現auth時就去調用nacos 里面的service-auth

404: 注意如果請求404則可能是最后面多了/

AxiosError {message: 'Network Error', name: 'AxiosError', code: 'ERR_NETWORK', config: {…}, request: XMLHttpRequest, …}

application-dev.yml

server:port: 10010 #當前spring boot工程運行時所占用的端口號i7i8i9:datasource:driver-class-name: com.mysql.cj.jdbc.Driverhost: 120.79.150.231 #主機地址port: 3306 #端口號database: basic #當前需要連接的數據庫username: admin #用戶password: tyuueew333444IIIIOOO88qqq #密碼

服務查看

跨域

可以使用nginx

?nginx: download

默認80端口

D:\soft\nginx-1.27.5\conf

4

nginx -s reload

npm run build

事務

每個微服務都有對應的數據庫

本地事務

? 主要是單接口測試,自己操作自己的數據庫

操作數據庫的服務的main主類上

? ? ? ?@EnableTransactionManagement

一般ServiceImpl類會加

?@Transactional

? 注意沒有引入mybatis是沒有這個注解的

全局事務-alibaba seata

本地事務要先配好

1.啟動客戶端Seata-綠色軟件

? 下載Seata Java Download | Apache Seata

要使用2.1.0

兩次解壓,找到文件夾seata-server

? ? 點擊bat文件即可啟動

? 登錄 http://localhost:7091/,賬號密碼都是seata? ?7091是網頁端口

?注意服務監聽端口不是7091,而是8091

2.為服務總配置引入seata

? ?在最外層服務pom.xml中,ctrl進入

spring-cloud-alibaba-dependencies

在里面搜索

可見seata的版本是2.1.0所以啟動seata服務端一定要用2.1.0

復制下面的alibaba的seata,注意不是springboot的

    <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><version>2023.0.3.2</version></dependency>

在服務最外層service模塊下的pom.xml引入

不用寫版本號

引入之后在maven依賴中可以看到已經有了

3.服務文件引入

? ?可以配置每個服務的yml用于指定分組

但也可以不在yml配,默認為

default_tx_group,因為如下有默認組

添加file.conf文件,以后也可以放到nacos里面

service {#transaction service group mapping  default_tx_group是默認分組vgroupMapping.default_tx_group = "default"#only support when registry.type=file, please don't set multiple addresses#注意不是seara網頁端口default.grouplist = "127.0.0.1:8091"#degrade, current not supportenableDegrade = false#disable seatadisableGlobalTransaction = false
}

4.標注全局事務

@GlobalTransactional

也就是需要配置TM,它是入口

package com.atguigu.business.service.impl;import com.atguigu.business.feign.OrderFeignClient;
import com.atguigu.business.feign.StorageFeignClient;
import com.atguigu.business.service.BusinessService;
import org.apache.seata.spring.annotation.GlobalTransactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class BusinessServiceImpl implements BusinessService {//第一步就是拿到遠程服務客戶端@AutowiredStorageFeignClient storageFeignClient;@AutowiredOrderFeignClient orderFeignClient;
@GlobalTransactional@Overridepublic void purchase(String userId, String commodityCode, int orderCount) {//TODO 1. 扣減庫存storageFeignClient.deduct(commodityCode,orderCount);//TODO 2. 創建訂單orderFeignClient.create(userId,commodityCode,orderCount);}
}

四種事務模式

默認是AT模式,就是自動模式

XA模式:

? ?使用早期數據庫模式,第一階段提交就沒有真正提交, 一直占用數據庫,阻塞等待

更改方法

TCC

全手動,適合于夾雜了非數據庫事務,也就是廣義的事務,比如發郵件,發短信

要額外寫接口這三個階段(準備,提交,回滾)要做什么

比如第一階段已經發了短信,只能再第三階段再發一個糾正短信了

Saga

長事務

可能要好多天,比如請假,要經過審批,就不適合于用鎖了

基于消息隊列,第二個人收到第一個人的消息再做事,某個人失敗了就通知所有人失敗了

其他人收到消息后使用自定義處理,也就是補償代碼

其它

1.配置輸出為null

order.timeout=null;order.auto-confirm=nullorder.db-urlnull

原因

proerties:

#spring.cloud.nacos.discovery.server-addr=localhost:8848

yml?

沒用discovery

server:port:8900
spring:application:name: service-ordercloud:nacos:server-addr: localhost:8848config:namespace: devconfig:import:- nacos:common.properties?group=order- nacos:db.properties?group=order

日志

給微服務配置遠程日志

在每個服務的application.yml中給feign包

logging:level:com.i7i8i9.feign: debug

#注意:遠程配置的優先級高于本地server:port:8900    #雖然這里寫了8090,但是實際使用端口還是可以在Edit configurattion中指定
spring:profiles:active: uat       #第1步: 指定本項目激活環境,該名字需要對應nacos的namespaceinclude: feign      #包含yml標識 feign,也就是application-feign.ymlapplication:name: service-ordercloud:nacos:server-addr: localhost:8848config:namespace: ${spring.profiles.active:dev}   #獲取激活環境名稱,找到nacos同名命名空間,如果獲取不到環境名稱就使用冒號后面的默認值
#          :dev是默認值dev的意思,如果找不到這個變量
logging:level:com.i7i8i9.feign: debug---
spring:               #on-profile: dev 也就是說dev需要啟用的配置,每個環境要導入的不一定一樣config:import:- nacos:common.properties?group=order- nacos:db.properties?group=orderactivate:on-profile: dev---
spring:               #on-profile: UAT 也就是說dev需要啟用的配置,每個環境要導入的不一定一樣config:import:- nacos:common.properties?group=order- nacos:db.properties?group=orderactivate:on-profile: uat---
spring:           #on-profile: prod 也就是說dev需要啟用的配置,每個環境要導入的不一定一樣config:import:- nacos:common.properties?group=order- nacos:db.properties?group=orderactivate:on-profile: prod

?然后在微服務的配置類里面把Level放到容器中(就是加上@Bean)

package com.i7i8i9.config;import feign.Logger;
import feign.RetryableException;
import feign.Retryer;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class OrderConfig {//    @BeanRetryer retryer(){return new Retryer.Default();}@BeanLogger.Level  feignLoggerLevel(){return  Logger.Level.FULL;}@LoadBalanced   //注解式負載均衡,不要難過其他操作@BeanRestTemplate restTemplate(){return new RestTemplate();}}

注釋

idea創建java類時自動配置注解 idea如何設置類的自動注釋_mob64ca1415f0ab的技術博客_51CTO博客

前端

Vue3與ts中使用axios vue3加ts_mob64ca14031c97的技術博客_51CTO博客

Debug

? ? 1.seata兩段事務debug

? ? ? ?標注斷點

? 全部服務都以debug模式啟動

??

發送請求

刷新seata

可見因為標記了@GlobalTransactional出現一個全局事務

applicationId就是所屬應用: seata-business

transactionName觸發全局事務入口??purchase(java.lang.String, java.lang.String, int)

status:beigin

timeout: 1分鐘沒做完就過期

還可以點擊最后面查看用到了哪些全局鎖(每個服務修改自己數據前獲得的,以保證別的服務不能穿插著改)

放行

報錯

指向扣庫存,原因是庫存分支事務注冊失敗,超過了上述配置的60s導致

重新來

? 重新發送請求,再加個斷點

放行

就會來到第二個斷點

打開最右側的包括分支事務

就可以查看分支事務,是已經注冊完了的庫存事務

?全局鎖也能看到信息

可以看到在數據表storage_tbl有一把全局鎖

去storage_db數據庫查看

數據此時是98

并且有undo日志

數據復制出來

{"@class":"org.apache.seata.rm.datasource.undo.BranchUndoLog","xid":"192.168.32.1:8091:9628920695037968","branchId":9628920695037969,"sqlUndoLogs":["java.util.ArrayList",[{"@class":"org.apache.seata.rm.datasource.undo.SQLUndoLog","sqlType":"UPDATE","tableName":"storage_tbl","beforeImage":
{"@class":"org.apache.seata.rm.datasource.sql.struct.TableRecords","tableName":"storage_tbl","rows":["java.util.ArrayList",
[{"@class":"org.apache.seata.rm.datasource.sql.struct.Row","fields":["java.util.ArrayList",
[{"@class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"count","keyType":"NULL","type":4,"value":100},
{"@class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"id","keyType":"PRIMARY_KEY","type":4,"value":1}]]}]]},"afterImage":
{"@class":"org.apache.seata.rm.datasource.sql.struct.TableRecords","tableName":"storage_tbl","rows":["java.util.ArrayList",
[{"@class":"org.apache.seata.rm.datasource.sql.struct.Row","fields":["java.util.ArrayList",
[{"@class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"count","keyType":"NULL","type":4,"value":98},
{"@class":"org.apache.seata.rm.datasource.sql.struct.Field","name":"id","keyType":"PRIMARY_KEY","type":4,"value":1}]]}]]}}]]}

有before鏡像

有after鏡像

目的就是為了恢復

?保存訂單處設置斷點

因為訂單設置了一定會失敗,所以可以看到account和storage都undo_log

兩個子事務

兩個全局鎖

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

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

相關文章

數據分析框架和方法

一、核心分析框架 (The Big Picture Frameworks)??描述性分析 (What Happened?)????目的&#xff1a;?? 了解過去發生了什么&#xff0c;描述現狀&#xff0c;監控業務健康。??核心工作&#xff1a;?? 匯總、聚合、計算基礎指標 (KPI)&#xff0c;生成報表和儀表盤…

電路研究9.3.10——合宙Air780EP中的AT開發指南:阿里云應用指南

這個好像也用不到&#xff0c;不過可以先貼出來。簡單看了一下也沒深入分析&#xff0c;直接扒過來了&#xff0c;感覺涉及到了上位機的學習了。我這下位機的可能用不到&#xff0c;就是貼過來好了。 應用概述 使用 AT 方式連接阿里云分為一機一密和一型一密&#xff0c;其中一…

[Backlog] 核心協調器 | 終端用戶界面(TUI)實現 | 多分支任務沖突解決 | 測試驗證體系

第8章 核心協調器 歡迎回到Backlog.md&#xff01; 在上一章文件系統操作中&#xff0c;我們深入了解了數據物理存儲層面的讀寫機制。本章將聚焦系統的神經中樞——核心協調器。 核心協調器的本質&#xff08;中央決策引擎&#xff09; 如果將Backlog.md視為項目管理團隊&a…

車載以太網-TC8測試-UT(Upper Tester)

目錄 一、技術原理:指令體系與協議適配1. **指令格式與傳輸機制**2. **協議棧交互邏輯**3. **規范遵循與版本演進**二、測試應用:TC8測試場景與案例1. **TCP協議棧深度驗證**2. **ARP協議健壯性測試**3. **SOME/IP服務動態管理**三、實現挑戰與解決方案1. **實時性要求**2. *…

扣子Coze純前端部署多Agents

純前端網頁搭建&#xff0c;無需任何后端代碼&#xff0c;方便快捷&#xff01; 就像公司前臺的多功能控制臺&#xff0c;員工可以通過按鈕快速呼叫不同的AI助手。具備多設備適配、智能對話等基礎能力。 支持添加多個智能體 配置方式 添加智能體信息&#xff0c;data-bot為智…

STM32中I2C協議詳解

前言 在嵌入式系統中&#xff0c;設備間的短距離通信協議中&#xff0c;I2C&#xff08;Inter-Integrated Circuit&#xff0c;集成電路互連&#xff09;以其信號線少、布線簡單、支持多從機等特點&#xff0c;被廣泛應用于傳感器、EEPROM、OLED屏等中低速外設的通信場景。與SP…

解鎖Spring Boot多項目共享Redis:優雅Key命名結構指南

引言Redis 基礎與 Spring Boot 集成Redis 簡介Redis&#xff0c;即 Remote Dictionary Server&#xff0c;是一個開源的基于內存的數據結構存儲系統&#xff0c;可用作數據庫、緩存和消息中間件 。它具備諸多顯著特性&#xff0c;使其在現代軟件開發中占據重要地位。Redis 的讀…

《重構項目》基于Apollo架構設計的項目重構方案(多種地圖、多階段、多任務、狀態機管理)

1. 項目結構設計project/ ├── config/ # 配置文件&#xff08;定義 Scenario、Stage、Task 的映射&#xff09; ├── src/ │ ├── base/ # 抽象基類定義 │ │ ├── scenario_base.h/.cpp │ │ ├── stage_base.h/.cpp…

動手學深度學習13.6. 目標檢測數據集-筆記練習(PyTorch)

以下內容為結合李沐老師的課程和教材補充的學習筆記&#xff0c;以及對課后練習的一些思考&#xff0c;自留回顧&#xff0c;也供同學之人交流參考。 本節課程地址&#xff1a;數據集_嗶哩嗶哩_bilibili 本節教材地址&#xff1a;13.6. 目標檢測數據集 — 動手學深度學習 2.0…

Unity3D游戲內存優化指南

前言 Unity3D 游戲的內存控制是保證游戲流暢運行&#xff08;尤其在移動端和主機平臺&#xff09;和避免崩潰的關鍵挑戰。以下是核心策略和常見問題的解決方案&#xff1a; 對惹&#xff0c;這里有一個游戲開發交流小組&#xff0c;希望大家可以點擊進來一起交流一下開發經驗…

git學習:首次創建倉庫

文章目錄前言&#xff1a;1、首次創建倉庫并上傳數據1.1 創建倉庫&#xff0c;1.2 命令上傳1.3 首次代碼上傳至倉庫的步驟&#xff1a;2、分支操作2.1 分支的刪除2.2 切換分支2.3 查看分支2.4 同步其他分支的修改3、查看電腦的配置文件4、遠程倉庫命令 git remote5、其他后語前…

C++并行計算:OpenMP與MPI全解析

在高性能計算領域&#xff0c;充分利用硬件資源的并行計算技術已成為剛需。從單節點多核到跨節點集群&#xff0c;開發者需要掌握不同的并行編程模型。本文將系統講解兩種主流并行技術&#xff1a;OpenMP&#xff08;共享內存多核并行&#xff09;與MPI&#xff08;分布式內存集…

TCP 動態選路協議全面研究:OSPF、BGP 與 IS-IS 的比較與應用分析

一、引言&#xff1a;動態選路協議概述 在現代計算機網絡中&#xff0c;路由選擇是數據傳輸的核心功能&#xff0c;它決定了數據包從源到目的地的路徑選擇。隨著網絡規模的不斷擴大和復雜性的增加&#xff0c;靜態路由已經無法滿足網絡動態變化的需求&#xff0c;動態路由協議…

OpenCV 圖像哈希類cv::img_hash::AverageHash

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::img_hash::AverageHash是OpenCV中用于圖像哈希&#xff08;Image Hashing&#xff09;的一個類&#xff0c;屬于opencv_img_hash模塊。它實現了…

【Python-網絡爬蟲】爬蟲的基礎概念介紹

目錄 一、爬蟲的介紹 1.1 爬蟲的概念 1.2 爬蟲的作用 1. 搜索引擎數據索引 2. 商業數據采集與分析 3. 輿情監控與社交分析 4. 學術研究與數據挖掘 5. 信息聚合與服務優化 二、爬蟲的分類 三、爬蟲的基本流程 3.1 基本流程 3.2 Robots協議 一、爬蟲的介紹 1.1 爬蟲的…

力扣-31.下一個排列

題目鏈接 31.下一個排列 class Solution {public void nextPermutation(int[] nums) {//1.從右往左找第一個非逆序的數aint left nums.length - 2; //這里是為了找不到順序對的時候正好停在-1while (left > 0 && nums[left] > nums[left 1]) { //一定要取等號…

Python爬蟲實戰:研究python-nameparser庫相關技術

1. 引言 在當今數字化時代,姓名作為個人身份的重要標識,在許多領域都有著廣泛的應用需求。例如,在客戶關系管理系統中,準確解析姓名可以幫助企業更好地了解客戶背景;在學術研究中,分析作者姓名分布有助于發現研究團隊的地域特征;在社交網絡分析中,姓名信息可以輔助進行…

Android中MVI架構詳解

博主前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住也分享一下給大家 ??點擊跳轉到教程 什么是 MVI 架構? MVI (Model-View-Intent) 是一種單向數據流的架構模式,它源于響應式編程思想。在 MVI 中: 架構圖: 1、Model: 代表的是UI 狀態,它包含了…

AutoGen-AgentChat-3-人機交互

import os from dotenv import load_dotenvload_dotenv()True人機交互 在上一節“團隊”中&#xff0c;我們了解了如何創建、觀察和控制代理團隊。本節將重點介紹如何在應用程序中與團隊進行交互&#xff0c;并向團隊提供人工反饋。 您可以通過兩種主要方式從您的應用程序與團隊…