Spring Cloud微服務(wù)基礎(chǔ)與應(yīng)用 演講教學(xué)課件_第1頁
Spring Cloud微服務(wù)基礎(chǔ)與應(yīng)用 演講教學(xué)課件_第2頁
Spring Cloud微服務(wù)基礎(chǔ)與應(yīng)用 演講教學(xué)課件_第3頁
Spring Cloud微服務(wù)基礎(chǔ)與應(yīng)用 演講教學(xué)課件_第4頁
Spring Cloud微服務(wù)基礎(chǔ)與應(yīng)用 演講教學(xué)課件_第5頁
已閱讀5頁,還剩69頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

歡迎使用<演講人:xxx>微服務(wù)SpringCloud歡迎使用<演講人:xxx>微服務(wù)SpringCloudSpringCloud簡介SpringCloud組件理賠渠道平臺使用問題與討論SpringCloud簡介SpringCloud組件理賠渠PARTXXXXXX公司<演講人:xxx>SpringCloud簡介ONEPARTXXXXXX公司<演講人:xxx>SpringCl”微”即是小由一系列小服務(wù)組成微服務(wù)簡介獨立運行每個服務(wù)運行于自己的獨立進程業(yè)務(wù)建模圍繞著業(yè)務(wù)功能進行建模獨立部署每個服務(wù)獨立部署5分散式管理最低限度的集中管理微服務(wù)更小更強更快”微”即是小由一系列小服務(wù)組成微服務(wù)簡介獨立運行每個服務(wù)運行微服務(wù)的特征服務(wù)即組件每個服務(wù)對一個業(yè)務(wù)負責(zé)關(guān)注業(yè)務(wù)邏輯分散式管理服務(wù)可以獨立部署,更清晰的模塊邊界,每個服務(wù)提供方可以專注發(fā)布API,隱藏實現(xiàn)細節(jié)和版本。例如:

理賠服務(wù)

保費試算服務(wù)

承保服務(wù)

核保服務(wù)

支付服務(wù)

所有微服務(wù)調(diào)用使用統(tǒng)一協(xié)議,微服務(wù)團隊只需要關(guān)注如何將輸入轉(zhuǎn)化為輸出的邏輯,而不需要考慮網(wǎng)絡(luò)層實現(xiàn)細節(jié)。每個微服務(wù)團隊有充分自由選擇自己團隊熟悉的編程語言、數(shù)據(jù)庫和其他中間件等技術(shù)棧。微服務(wù)的特征服務(wù)即組件每個服務(wù)對一個業(yè)務(wù)負責(zé)關(guān)注業(yè)務(wù)邏輯分散SpringCloud簡介利用SpringBoot的開發(fā)便利性巧妙地簡化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開發(fā),如服務(wù)發(fā)現(xiàn)注冊、配置中心、消息總線、負載均衡、斷路器、數(shù)據(jù)監(jiān)控等,都可以用SpringBoot的開發(fā)風(fēng)格做到一鍵啟動和部署。SpringCloud是對Netflix的多個開源組件進一步的封裝而成,同時又實現(xiàn)了和云端平臺,和SpringBoot開發(fā)框架很好的集成。SpringCloud是一個相對比較新的微服務(wù)框架,2016年才推出1.0的release版本.雖然SpringCloud時間最短,但是相比Dubbo等RPC框架,SpringCloud提供的全套的分布式系統(tǒng)解決方案。Spring

Cloud是一系列框架的有序集合SpringCloud簡介利用SpringBoot的開發(fā)SpringCloud優(yōu)勢架構(gòu)完整度它的子項目涵蓋了所有實現(xiàn)布式系統(tǒng)所需要的基礎(chǔ)軟件設(shè)施社區(qū)活躍度選擇一個開源框架,社區(qū)的活躍度是我們極為關(guān)注的一個要點。社區(qū)越活躍,解決問題的速度越快,框架也會越來越完善,不然當(dāng)我們碰到問題,就不得不自己解決。開發(fā)部署極其簡單基于SpringBoot,使得開發(fā)部署極其簡單(加依賴,加注解,就能運行了)與dubbo相比從框架的完整度來看,Dubbo只是實現(xiàn)了服務(wù)治理(注冊,發(fā)現(xiàn)等),而SpringCloud下面有很多個子項目覆蓋了微服務(wù)架構(gòu)下的方方面面,服務(wù)治理只是其中的一個方面SpringCloud優(yōu)勢架構(gòu)完整度它的子項目涵蓋了所有實SpringCloud架構(gòu)圖SpringCloud架構(gòu)圖SpringCloud使用一<?xmlversion="1.0"encoding="UTF-8"?>

<projectxmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"

xsi:schemaLocation="/POM/4.0.0/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>Cloud</groupId>

<artifactId>test</artifactId>

<version>0.0.1-SNAPSHOT</version>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.3.0.RELEASE</version>

</parent>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

<dependencies>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>springloaded</artifactId>

<version>1.2.5.RELEASE</version>

</dependency>

</dependencies>

</plugin>

</plugins>

</build>

</project>springboot的核心技術(shù)基于spring4.x。環(huán)境說明IDE:IntelliJIDEA2017.2.5JDK:1.8管理:mvn3服務(wù)器:內(nèi)置tomcat

創(chuàng)建一個maven項目先在pom.xml中加入依賴的包(如右部分所示)

創(chuàng)建一個Application類具體見下頁SpringCloud使用一<?xmlversionSpringCloud使用二@Controller

@EnableSwagger2Doc

@SpringBootApplication

@EnableDiscoveryClient

@EnableFeignClients

//@ImportResource(locations={"classpath:config/application-dubbon.xml"})

publicclassApplication{

@ResponseBody

@RequestMapping(value="/")

publicStringlocation(){

return"HelloWorld";

}

/**

*@paramargs

*/

publicstaticvoidmain(String[]args){

SpringApplication.run(Application.class,args);

}

}代碼結(jié)構(gòu)如上圖所示;代碼實現(xiàn)如右圖所示;@SpringBootApplication=@Configuration

+

@EnableAutoConfiguration+

@ComponentScan@Configuration,@ComponentSca這倆注解語法是spring框架中的,起步于spring3.x@EnableAutoConfiguration是springboot語法,表示自動配置。SpringCloud使用二@Controller

@PARTXXXXXX公司<演講人:xxx>SpringCloud組件TWOPARTXXXXXX公司<演講人:xxx>SpringClSpringCloud組件一SpringCloudConfig配置管理開發(fā)工具包,可以讓你把配置放到遠程服務(wù)器,目前支持本地存儲、Git以及Subversion。SpringCloudBus事件、消息總線,用于在集群(例如,配置變化事件)中傳播狀態(tài)變化,可與SpringCloudConfig聯(lián)合實現(xiàn)熱部署。

NetflixHystrix容錯管理工具,旨在通過控制服務(wù)和第三方庫的節(jié)點,從而對延遲和故障提供更強大的容錯能力。SpringCloudforCloudFoundry通過Oauth2協(xié)議綁定服務(wù)到CloudFoundry,CloudFoundry是VMware推出的開源PaaS云平臺。SpringCloudNetflix針對多種Netflix組件提供的開發(fā)工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。NetflixEureka云端負載均衡,一個基于REST的服務(wù),用于定位服務(wù),以實現(xiàn)云端的負載均衡和中間層服務(wù)器的故障轉(zhuǎn)移。NetflixZuul邊緣服務(wù)工具,是提供動態(tài)路由,監(jiān)控,彈性,安全等的邊緣服務(wù)。

NetflixArchaius配置管理API,包含一系列配置管理API,提供動態(tài)類型化屬性、線程安全配置操作、輪詢框架、回調(diào)機制等功能。SpringCloud組件一SpringCloudCSpringCloud組件二詳見:xxxx經(jīng)驗總結(jié)246531SpringCloudDataFlow:大數(shù)據(jù)操作工具,通過命令行方式操作數(shù)據(jù)流。SpringCloudSecurity:安全工具包,為你的應(yīng)用程序添加安全控制,主要是指OAuth2。SpringCloudConsul:封裝了Consul操作,consul是一個服務(wù)發(fā)現(xiàn)與配置工具,與Docker容器可以無縫集成。SpringCloudZookeeper:操作Zookeeper的工具包,用于使用zookeeper方式的服務(wù)注冊和發(fā)現(xiàn)。SpringCloudStream:數(shù)據(jù)流操作開發(fā)包,封裝了與Redis,Rabbit、Kafka等發(fā)送接收消息。SpringCloudCLI:基于SpringBootCLI,可以讓你以命令行方式快速建立云組件。7SpringCloudSleuth:日志收集工具包,封裝了Dapper,Zipkin和HTrace操作。SpringCloud組件二詳見:xxxx經(jīng)驗總結(jié)246服務(wù)發(fā)現(xiàn)NetflixEurekaSpringCloud分布式開發(fā)五大神獸客服端負載均衡NetflixRibbon斷路器NetflixHystrix服務(wù)網(wǎng)關(guān)NetflixZuul分布式配置SpringCloudConfig服務(wù)發(fā)現(xiàn)NetflixEurekaSpringCloud分Eureka服務(wù)注冊123Register:服務(wù)注冊當(dāng)Eureka客戶端向EurekaServer注冊時,它提供自身的元數(shù)據(jù),比如IP地址、端口,運行狀況指示符URL,主頁等。Renew:服務(wù)續(xù)約

Eureka客戶會每隔30秒發(fā)送一次心跳來續(xù)約。通過續(xù)約來告知EurekaServer該Eureka客戶仍然存在,沒有出現(xiàn)問題。正常情況下,如果EurekaServer在90秒沒有收到Eureka客戶的續(xù)約,它會將實例從其注冊表中刪除。

FetchRegistries:獲取注冊列表信息Eureka客戶端從服務(wù)器獲取注冊表信息,并將其緩存在本地??蛻舳藭褂迷撔畔⒉檎移渌?wù),從而進行遠程調(diào)用。該注冊列表信息定期(每30秒鐘)更新一次。每次返回注冊列表信息可能與Eureka客戶端的緩存信息不同,Eureka客戶端自動處理。Cancel:服務(wù)下線Eureka客戶端在程序關(guān)閉時向Eureka服務(wù)器發(fā)送取消請求。發(fā)送請求后,該客戶端實例信息將從服務(wù)器的實例注冊表中刪除。該下線請求不會自動完成,它需要調(diào)用以下內(nèi)容:

DiscoveryManager.getInstance().shutdownComponent();5Eviction服務(wù)剔除在默認的情況下,當(dāng)Eureka客戶端連續(xù)90秒沒有向Eureka服務(wù)器發(fā)送服務(wù)續(xù)約,即心跳,Eureka服務(wù)器會將該服務(wù)實例從服務(wù)注冊列表刪除,即服務(wù)剔除。Eureka的高級架構(gòu)圖Eureka服務(wù)注冊123Register:服務(wù)注冊當(dāng)EurRibbon負載均衡123Ribbon的工作

第一步有限選擇EurekaServer,它優(yōu)先選擇在同一個Zone且負載較少的Server,

第二步在根據(jù)用戶指定的策略,在從Server取到的服務(wù)注冊列表中選擇一個地址。其中Ribbon提供了多重策略,例如輪詢roundrobin、隨機Random、根據(jù)相應(yīng)時間加權(quán)等。負載均衡策略

簡單輪詢負載均衡加權(quán)響應(yīng)時間負載均衡區(qū)域感知輪詢負載均衡隨機負載均衡Ribbon中還包括以下功能:易于與服務(wù)發(fā)現(xiàn)組件(比如Netflix的Eureka)集成使用Archaius完成運行時配置使用JMX暴露運維指標,使用Servo發(fā)布多種可插拔的序列化選擇Ribbon架構(gòu)圖EurekaServer服務(wù)消費者服務(wù)提供者1服務(wù)提供者2服務(wù)提供者3Ribbon注冊注冊注冊注冊可用服務(wù)列表負載均衡請求Ribbon負載均衡123Ribbon的工作

第一步有限選擇Hystrix熔斷器123服務(wù)雪崩效應(yīng)形成的原因

服務(wù)提供者不可用重試加大流量服務(wù)調(diào)用者不可用Hystrix的設(shè)計原則包括:

資源隔離熔斷器命令模式熔斷器的概念熔斷器即斷路器,斷路器(CricuitBreaker)是一種能夠在遠程服務(wù)不可用時自動熔斷(打開開關(guān)),并在遠程服務(wù)恢復(fù)時自動恢復(fù)(閉合開關(guān))的設(shè)施,SpringCloud通過Netflix的Hystrix組件提供斷路器、資源隔離與自我修復(fù)功能。

Hystrix架構(gòu)圖Hystrix熔斷器123服務(wù)雪崩效應(yīng)形成的原因服務(wù)提供者不ZUUL網(wǎng)關(guān)123驗證與安全保障

識別面向各類資源的驗證要求并拒絕那些與要求不符的請求。審查與監(jiān)控在邊緣位置追蹤有意義數(shù)據(jù)及統(tǒng)計結(jié)果,從而為我們帶來準確的生產(chǎn)狀態(tài)結(jié)論。動態(tài)路由以動態(tài)方式根據(jù)需要將請求路由至不同后端集群處。ZUUL架構(gòu)圖4壓力測試逐漸增加指向集群的負載流量,從而計算性能水平。5負載分配為每一種負載類型分配對應(yīng)容量,并棄用超出限定值的請求。6靜態(tài)響應(yīng)處理在邊緣位置直接建立部分響應(yīng),從而避免其流入內(nèi)部集群。7多區(qū)域彈性跨越AWS區(qū)域進行請求路由,旨在實現(xiàn)ELB使用多樣化并保證邊緣位置與使用者盡可能接近。ZUUL網(wǎng)關(guān)123驗證與安全保障

識別面向各類資源的驗證要求SpringCloudConfig配置中心SpringCloudConfig架構(gòu)圖SpringCloudConfig提供基于以下3個維度的配置管理:應(yīng)用這個比較好理解,每個配置都是屬于某一個應(yīng)用的環(huán)境每個配置都是區(qū)分環(huán)境的,如dev,test,uat,prod等版本這個可能是一般的配置中心所缺乏的,就是對同一份配置的不同版本管理SpringCloudConfig提供版本的支持,也就是說對于一個應(yīng)用的不同部署實例,可以從服務(wù)端獲取到不同版本的配置,這對于一些特殊場景如:灰度發(fā)布,A/B測試等提供了很好的支持SpringCloudConfig配置中心SpringPARTXXXXXX公司<演講人:xxx>理賠渠道平臺使用THRPARTXXXXXX公司<演講人:xxx>理賠渠道平臺使用T非車理賠渠道平臺介紹

非車理賠渠道平臺是客戶端與非車理賠系統(tǒng)之間的橋梁,系統(tǒng)接收到渠道的數(shù)據(jù)后,經(jīng)過解密、報文重組,然后調(diào)用非車理賠服務(wù),進行保存或者查詢等動作。渠道平臺意在減輕核心服務(wù)的壓力,增加核心服務(wù)的安全性,減少核心人員的開發(fā)工作,同時更好的支持理賠服務(wù)。

非車理賠系統(tǒng)采用最新的SpringCloud微服務(wù)架構(gòu),增強系統(tǒng)的靈活性,降低部署和開發(fā)難度。非車理賠渠道平臺非車理賠渠道平臺介紹非車理賠渠道平臺是客戶端與渠道平臺總體架構(gòu)圖接口服務(wù)1接口服務(wù)2ZUUL1NGIXAPPPCZUUL2理賠服務(wù)微信Eureka1Eureka2渠道平臺渠道平臺總體架構(gòu)圖接口服務(wù)1接口服務(wù)2ZUUL1NGIXAP渠道平臺總體架構(gòu)描述Eureka兩臺ZUUL,兩臺主程序都注冊在兩臺Eureka服務(wù)上,并且兩臺Eureka相互注冊。主程序主程序即渠道平臺接口服務(wù),收到ZUUL的請求后,調(diào)用理賠系統(tǒng)服務(wù)獲取相關(guān)數(shù)據(jù),并返回客戶端。NGIX客戶端訪問NGIX,NGIX根據(jù)兩臺ZUUL的壓力情況,采用NGIX負載均衡策略,訪問壓力最小的ZUUL服務(wù)。ZUULZUUL是渠道平臺的入口,接收到NGIX轉(zhuǎn)來的請求后,ZUUL根據(jù)兩臺主程序服務(wù)的壓力情況,采用Ribbon負載均衡策略,訪問壓力最小的主程序。渠道平臺總體架構(gòu)描述Eureka兩臺ZUUL,兩臺主程序都注EURAKE配置配置結(jié)構(gòu)server:

port:7070

session:

timeout:100

tomcat:

uri-encoding:UTF-8

spring:

application:

name:eureka-server

output:

ansi:

enabled:detect

config:

location:config

profiles:

include:admin-test

logging:

path:logs

pattern:

level:debug

file:${logging.path}/eureak.log

eureka:

server:

enable-self-preservation:false#關(guān)閉自我保護

instance:

prefer-ip-address:true

metadata-map:

cluster:admin-server

management.context-path:${management.context-path}

health-check-url-path:${management.context-path}/health

client:

service-url:

defaultZone:73:7070/eureka,71:7070/eureka配置示例EURAKE配置配置結(jié)構(gòu)server:

port:70ZUUL配置一server:

connection-timeout:700000

session:

timeout:700000

spring:

cloud:

loadbalancer:

retry:

enabled:false#關(guān)閉重試機制

data:

cassandra:

read-timeout-millis:700000

#理論上這里設(shè)置了false下面的hystrix和Ribbon的重試都不起作用,為了防止錯誤,下面多做了配置,以免重試

#60000毫秒(分鐘)請求超時熔斷

hystrix:

metrics:

enabled:true

command:

default:

execution:

isolation:

strategy:THREAD

thread:

timeroutInMilliseconds:700000#斷路器的超時時間,斷路器的超時時間設(shè)置時間比Ribbon的超時時間短,防止重試。

timeout:

enabled:false

threadpool:

default:

coreSize:2000

maxQueueSize:2000

queueSizeRejectionThreshold:2000

ribbon:

IsSecured:true

ConnectionTimeout:6000000#連接超時時間

ReadTimeout:6000000

OkToRetryOnAllOperations:false#關(guān)閉所有操作請求都進行重試

MaxAutoRetriesNextServer:0#嘗試更換0次

MaxAutoRetries:0#對當(dāng)前實例的重試次數(shù)

eureka:

enabled:true

ZUUL配置一server:

connection-tZUUL配置二zuul:

max:

host:

connections:5000

semaphore:

max-semaphores:10000#最大信號量

retryable:false#關(guān)閉重試機制,以免重復(fù)提交

ignoredServices:'*'

ribbon:

eager-load:

enabled:true

host:

connect-timeout-millis:100000

socket-timeout-millis:6000000

maxTotalConnections:200000#(總連接數(shù))默認200

maxPerRouteConnections:10000#路由連接數(shù)默認20

max-per-route-connections:10000#擴大這個線程池的容量

max-total-connections:10000#擴大這個線程池的容量

add-proxy-headers:true

add-host-header:true

strip-prefix:false

ignoredPatterns:/**/management-context-path/**

routes:

interfaceChannel:

path:/interfaceChannel/**

serviceId:claims-channel-server

carchannel:

path:/carchannel/**

serviceId:carchannel-service

tab-a:

path:/tab-a/**

serviceId:tab-a-serviceZUUL的使用安心保險將ZUUL定義為所有SpringCloud應(yīng)用的網(wǎng)關(guān),所以其中不做個性化的實現(xiàn),僅用來實現(xiàn)請求數(shù)據(jù)的轉(zhuǎn)發(fā)。聯(lián)測過程中,因為此配置問題,當(dāng)報文大于10M,請求時間大于5分鐘時,ZUUL報錯:Causedby:.SocketTimeoutException:Readtimedoutserver.tomcat.max-http-post-size請求報文大小限制配置,測試接口時,請求數(shù)據(jù)大于2M,若不配置會導(dǎo)致客戶端直接收到500錯誤,無法進入主程序。ribbon.ReadTimeout:6000000

ZUUL配置二zuul:

max:

host主程序配置server.port=8080#端口號

=claims-channel-server#服務(wù)命名

spring.config.location=config#指定配置文件夾

files.include=redis-test,mysql-test,mybatis,swagger,logging-test,banner,eureka-test,feign-test,admin#引入文件

spring.http.multipart.max-file-size=50MB#單個文件大小限制

spring.http.multipart.max-request-size=100MB#總上傳數(shù)據(jù)大小限制

server.connection-timeout=600000#連接超時

#server.tomcat.max-http-post-size

server.tomcat.max-http-post-size=2097152000#請求數(shù)據(jù)大小Byte

#ZooKeeper

dubbo.registry.address=6:2281#請求dubbo的Zookper地址配置

spring.freemarker.cache=false

spring.freemarker.request-context-attribute=request

management.security.enabled=false

endpoints.health.sensitive=false

.enabled=true

ribbon.IsSecured=true

ribbon.ConnectionTimeout=600000

ribbon.ReadTimeout=600000

=wem

info.app.version=1.0.0

info.build.artifactId=@project.artifactId@

info.build.version=@project.version@

Id=000000

Name=\u6D4B\u8BD5\u6E20\u9053

image.pwd=000000主程序調(diào)用核心:dubbo調(diào)用+Feign調(diào)用。核心調(diào)用渠道平臺:HTTP協(xié)議調(diào)用主程序調(diào)用渠道:Feign調(diào)用;程序參數(shù)配置,如右側(cè)代碼所示。主程序配置server.port=8080#端口號

組件使用-Feign@FunctionalInterface

@FeignClient(name="feign-client",url="${feign-url.report-fegin-url}",fallbackFactory=ReportFeginFallBack.class)

publicinterfaceReportFeginURL{

@RequestMapping(value="ccentscs/services/nclmRpt",method=RequestMethod.POST)

StringnclmRpt(StringnclmRpt);

}@Component

publicclassReportFeginFallBackextendsFeignExceptionServer<ReportFeginURL>{

@Autowired

privateLogInterfaceServerlogServer;

@Override

publicReportFeginURLcreate(Throwablethrowable){

StringequalsException=super.methodReturn(throwable);

return(StringnclmRpt)->{

logServer.saveLoggerInFile(ConstantUtile.FeignType.REPORT_SUBMIT.getvalue(),equalsException);

returnConstantUtile.FEGIN_CALL_BACK+"_"+equalsException;

};

}

}feign-url:

report-fegin-url:0:8083#調(diào)用XXXX接口

evaluation-fegin-url:9:8080#調(diào)用XXXX接口

collect-upload-fegin-url:9:8080#調(diào)用XXXX接口調(diào)用方法:將ReportFeginURL注入到邏輯類,如reportFeign;調(diào)用接口:reportFeign.nclmRpt(XXX);接收調(diào)用時的返回參數(shù),則獲取到返回報文。組件使用-Feign@FunctionalInterfa注入dubbo服務(wù),如下:

調(diào)用dubbo接口中的方法photoService.QueryRptInfoClaim(XXX);獲取dubbo接口返回數(shù)據(jù)。組件使用–調(diào)用Dubbo服務(wù)<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="/schema/beans"

xmlns:xsi="/2001/XMLSchema-instance"xmlns:dubbo="/schema/dubbo"

xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd

/schema/dubbo/schema/dubbo/dubbo.xsd"default-lazy-init="true">

<dubbo:applicationname="sinosoft-sales-main-provider"/>

<dubbo:registryid="claimDubbo"address="zookeeper://${dubbo.registry.address}"check="false"></dubbo:registry>

<dubbo:referenceid="photoService"registry="claimDubbo"interface="erfac.PhotoService"timeout="3000"retries="0"/>

</beans>調(diào)用方法:@Autowired

privatePhotoServicephotoService;注入dubbo服務(wù),如下:組件使用–調(diào)用Dubbo服務(wù)<組件使用-Swagger@Api(value="Report(報案接口)",description="報案接口")

@RestController

@RequestMapping("report")

publicclassReportController{

@ApiOperation(value="報案接口",notes="報案接口")

@RequestMapping(value="/rptSubmit",method=RequestMethod.POST)

@ResponseBody

publicStringrptSubmit(HttpServletRequestrequest)throwsBusinessException{

return"報案返回Test";

}

}使用方法:在Application中增加注解:@EnableSwagger2Doc如上述代碼示例,在controller增加配置;訪問地址:http://ip:端口/appName/swagger-ui.html<dependency>

<groupId>com.didispace</groupId>

<artifactId>spring-boot-starter-swagger</artifactId>

<version>1.3.0.RELEASE</version>

</dependency>在POM中添加Swagger引入:組件使用-Swagger@Api(value="Re程序部署簡述010203打包程序在pom所在文件夾運行mvninstall命令,則開始運行打包命令,將程序打成jar包上傳程序jar包將打包好的jar包上傳到服務(wù)器指定目錄下,例如/home/jboss目錄啟動程序若當(dāng)前程序在進程中,則關(guān)閉已存在進程;進程關(guān)閉后,運行java–jar命令啟動程序;例如啟動測試環(huán)境:java-jarzuul-0.0.1-SNAPSHOT.jar--files.active=test&程序部署簡述010203打包程序在pom所在文件夾運行mvnXXXXXX公司<演講人:xxx>問題與討論PARTFOURXXXXXX公司<演講人:xxx>問題與討論PARTFOUR針對SpringCloud微服務(wù),我們的問題:當(dāng)前比較流程的微服務(wù)框架有哪些?SpringCloud與Dubbo對比?如何建立自己的微服務(wù)?問題列表問題討論針對SpringCloud微服務(wù),我們的問題:問題列表問題SpringCloud:本文檔主要介紹Dubbo:阿里推出,國內(nèi)SOA框架集大成之作DubboX:當(dāng)當(dāng)團隊基于dubbo升級的一個版本Motan:新浪微博開源的RPC框架Thrift:facebook開源的RPC框架問題討論當(dāng)前比較流程的微服務(wù)框架有哪些SpringCloud:本文檔主要介紹問題討論當(dāng)前比較流程背景:Dubbo,是阿里巴巴服務(wù)化治理的核心框架,并被廣泛應(yīng)用于阿里巴巴集團的各成員站點。SpringCloud,是SpringSource的產(chǎn)物,除了SpringSource之外,還有Pivotal和Netfix是其強大的后盾與技術(shù)輸出。社區(qū)活躍度Dubbo的更新頻率很低,而SpringCloud的更新仍處于高速迭代的階段。架構(gòu)完整度Dubbo只是實現(xiàn)了服務(wù)治理,而SpringCloud下面有17個子項目(可能還會新增)分別覆蓋了微服務(wù)架構(gòu)下的方方面面,服務(wù)治理只是其中的一個方面,問題討論SpringCloud與Dubbo對比背景:問題討論SpringCloud與Dubbo對比微服務(wù)劃分粒度的大?。汉侠聿鸱謽I(yè)務(wù)結(jié)構(gòu)組織層次性:不要出現(xiàn)胡亂依賴,循環(huán)依賴選擇合適的微服務(wù)技術(shù)棧以最小的代價發(fā)布出第一個微服務(wù)總結(jié)并復(fù)制成功經(jīng)驗,建立起微服務(wù)交付的節(jié)奏問題討論如何建立自己的微服務(wù)微服務(wù)劃分粒度的大小:合理拆分業(yè)務(wù)結(jié)構(gòu)問題討論如何建立自己的<演講人:xxx>感謝您的聆聽THANKSFORWATCHING歡迎使用PPT模板下載:/moban/行業(yè)PPT模板:/hangye/節(jié)日PPT模板:/jieri/PPT素材下載:/sucai/PPT背景圖片:/beijing/PPT圖表下載:/tubiao/優(yōu)秀PPT下載:/xiazai/PPT教程:/powerpoint/Word教程:/word/Excel教程:/excel/資料下載:/ziliao/PPT課件下載:/kejian/范文下載:/fanwen/試卷下載:/shiti/教案下載:/jiaoan/PPT論壇:

<演講人:xxx>感謝您的聆聽THANKSFORWATC歡迎使用<演講人:xxx>微服務(wù)SpringCloud歡迎使用<演講人:xxx>微服務(wù)SpringCloudSpringCloud簡介SpringCloud組件理賠渠道平臺使用問題與討論SpringCloud簡介SpringCloud組件理賠渠PARTXXXXXX公司<演講人:xxx>SpringCloud簡介ONEPARTXXXXXX公司<演講人:xxx>SpringCl”微”即是小由一系列小服務(wù)組成微服務(wù)簡介獨立運行每個服務(wù)運行于自己的獨立進程業(yè)務(wù)建模圍繞著業(yè)務(wù)功能進行建模獨立部署每個服務(wù)獨立部署5分散式管理最低限度的集中管理微服務(wù)更小更強更快”微”即是小由一系列小服務(wù)組成微服務(wù)簡介獨立運行每個服務(wù)運行微服務(wù)的特征服務(wù)即組件每個服務(wù)對一個業(yè)務(wù)負責(zé)關(guān)注業(yè)務(wù)邏輯分散式管理服務(wù)可以獨立部署,更清晰的模塊邊界,每個服務(wù)提供方可以專注發(fā)布API,隱藏實現(xiàn)細節(jié)和版本。例如:

理賠服務(wù)

保費試算服務(wù)

承保服務(wù)

核保服務(wù)

支付服務(wù)

所有微服務(wù)調(diào)用使用統(tǒng)一協(xié)議,微服務(wù)團隊只需要關(guān)注如何將輸入轉(zhuǎn)化為輸出的邏輯,而不需要考慮網(wǎng)絡(luò)層實現(xiàn)細節(jié)。每個微服務(wù)團隊有充分自由選擇自己團隊熟悉的編程語言、數(shù)據(jù)庫和其他中間件等技術(shù)棧。微服務(wù)的特征服務(wù)即組件每個服務(wù)對一個業(yè)務(wù)負責(zé)關(guān)注業(yè)務(wù)邏輯分散SpringCloud簡介利用SpringBoot的開發(fā)便利性巧妙地簡化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開發(fā),如服務(wù)發(fā)現(xiàn)注冊、配置中心、消息總線、負載均衡、斷路器、數(shù)據(jù)監(jiān)控等,都可以用SpringBoot的開發(fā)風(fēng)格做到一鍵啟動和部署。SpringCloud是對Netflix的多個開源組件進一步的封裝而成,同時又實現(xiàn)了和云端平臺,和SpringBoot開發(fā)框架很好的集成。SpringCloud是一個相對比較新的微服務(wù)框架,2016年才推出1.0的release版本.雖然SpringCloud時間最短,但是相比Dubbo等RPC框架,SpringCloud提供的全套的分布式系統(tǒng)解決方案。Spring

Cloud是一系列框架的有序集合SpringCloud簡介利用SpringBoot的開發(fā)SpringCloud優(yōu)勢架構(gòu)完整度它的子項目涵蓋了所有實現(xiàn)布式系統(tǒng)所需要的基礎(chǔ)軟件設(shè)施社區(qū)活躍度選擇一個開源框架,社區(qū)的活躍度是我們極為關(guān)注的一個要點。社區(qū)越活躍,解決問題的速度越快,框架也會越來越完善,不然當(dāng)我們碰到問題,就不得不自己解決。開發(fā)部署極其簡單基于SpringBoot,使得開發(fā)部署極其簡單(加依賴,加注解,就能運行了)與dubbo相比從框架的完整度來看,Dubbo只是實現(xiàn)了服務(wù)治理(注冊,發(fā)現(xiàn)等),而SpringCloud下面有很多個子項目覆蓋了微服務(wù)架構(gòu)下的方方面面,服務(wù)治理只是其中的一個方面SpringCloud優(yōu)勢架構(gòu)完整度它的子項目涵蓋了所有實SpringCloud架構(gòu)圖SpringCloud架構(gòu)圖SpringCloud使用一<?xmlversion="1.0"encoding="UTF-8"?>

<projectxmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"

xsi:schemaLocation="/POM/4.0.0/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>Cloud</groupId>

<artifactId>test</artifactId>

<version>0.0.1-SNAPSHOT</version>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.3.0.RELEASE</version>

</parent>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

<dependencies>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>springloaded</artifactId>

<version>1.2.5.RELEASE</version>

</dependency>

</dependencies>

</plugin>

</plugins>

</build>

</project>springboot的核心技術(shù)基于spring4.x。環(huán)境說明IDE:IntelliJIDEA2017.2.5JDK:1.8管理:mvn3服務(wù)器:內(nèi)置tomcat

創(chuàng)建一個maven項目先在pom.xml中加入依賴的包(如右部分所示)

創(chuàng)建一個Application類具體見下頁SpringCloud使用一<?xmlversionSpringCloud使用二@Controller

@EnableSwagger2Doc

@SpringBootApplication

@EnableDiscoveryClient

@EnableFeignClients

//@ImportResource(locations={"classpath:config/application-dubbon.xml"})

publicclassApplication{

@ResponseBody

@RequestMapping(value="/")

publicStringlocation(){

return"HelloWorld";

}

/**

*@paramargs

*/

publicstaticvoidmain(String[]args){

SpringApplication.run(Application.class,args);

}

}代碼結(jié)構(gòu)如上圖所示;代碼實現(xiàn)如右圖所示;@SpringBootApplication=@Configuration

+

@EnableAutoConfiguration+

@ComponentScan@Configuration,@ComponentSca這倆注解語法是spring框架中的,起步于spring3.x@EnableAutoConfiguration是springboot語法,表示自動配置。SpringCloud使用二@Controller

@PARTXXXXXX公司<演講人:xxx>SpringCloud組件TWOPARTXXXXXX公司<演講人:xxx>SpringClSpringCloud組件一SpringCloudConfig配置管理開發(fā)工具包,可以讓你把配置放到遠程服務(wù)器,目前支持本地存儲、Git以及Subversion。SpringCloudBus事件、消息總線,用于在集群(例如,配置變化事件)中傳播狀態(tài)變化,可與SpringCloudConfig聯(lián)合實現(xiàn)熱部署。

NetflixHystrix容錯管理工具,旨在通過控制服務(wù)和第三方庫的節(jié)點,從而對延遲和故障提供更強大的容錯能力。SpringCloudforCloudFoundry通過Oauth2協(xié)議綁定服務(wù)到CloudFoundry,CloudFoundry是VMware推出的開源PaaS云平臺。SpringCloudNetflix針對多種Netflix組件提供的開發(fā)工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。NetflixEureka云端負載均衡,一個基于REST的服務(wù),用于定位服務(wù),以實現(xiàn)云端的負載均衡和中間層服務(wù)器的故障轉(zhuǎn)移。NetflixZuul邊緣服務(wù)工具,是提供動態(tài)路由,監(jiān)控,彈性,安全等的邊緣服務(wù)。

NetflixArchaius配置管理API,包含一系列配置管理API,提供動態(tài)類型化屬性、線程安全配置操作、輪詢框架、回調(diào)機制等功能。SpringCloud組件一SpringCloudCSpringCloud組件二詳見:xxxx經(jīng)驗總結(jié)246531SpringCloudDataFlow:大數(shù)據(jù)操作工具,通過命令行方式操作數(shù)據(jù)流。SpringCloudSecurity:安全工具包,為你的應(yīng)用程序添加安全控制,主要是指OAuth2。SpringCloudConsul:封裝了Consul操作,consul是一個服務(wù)發(fā)現(xiàn)與配置工具,與Docker容器可以無縫集成。SpringCloudZookeeper:操作Zookeeper的工具包,用于使用zookeeper方式的服務(wù)注冊和發(fā)現(xiàn)。SpringCloudStream:數(shù)據(jù)流操作開發(fā)包,封裝了與Redis,Rabbit、Kafka等發(fā)送接收消息。SpringCloudCLI:基于SpringBootCLI,可以讓你以命令行方式快速建立云組件。7SpringCloudSleuth:日志收集工具包,封裝了Dapper,Zipkin和HTrace操作。SpringCloud組件二詳見:xxxx經(jīng)驗總結(jié)246服務(wù)發(fā)現(xiàn)NetflixEurekaSpringCloud分布式開發(fā)五大神獸客服端負載均衡NetflixRibbon斷路器NetflixHystrix服務(wù)網(wǎng)關(guān)NetflixZuul分布式配置SpringCloudConfig服務(wù)發(fā)現(xiàn)NetflixEurekaSpringCloud分Eureka服務(wù)注冊123Register:服務(wù)注冊當(dāng)Eureka客戶端向EurekaServer注冊時,它提供自身的元數(shù)據(jù),比如IP地址、端口,運行狀況指示符URL,主頁等。Renew:服務(wù)續(xù)約

Eureka客戶會每隔30秒發(fā)送一次心跳來續(xù)約。通過續(xù)約來告知EurekaServer該Eureka客戶仍然存在,沒有出現(xiàn)問題。正常情況下,如果EurekaServer在90秒沒有收到Eureka客戶的續(xù)約,它會將實例從其注冊表中刪除。

FetchRegistries:獲取注冊列表信息Eureka客戶端從服務(wù)器獲取注冊表信息,并將其緩存在本地??蛻舳藭褂迷撔畔⒉檎移渌?wù),從而進行遠程調(diào)用。該注冊列表信息定期(每30秒鐘)更新一次。每次返回注冊列表信息可能與Eureka客戶端的緩存信息不同,Eureka客戶端自動處理。Cancel:服務(wù)下線Eureka客戶端在程序關(guān)閉時向Eureka服務(wù)器發(fā)送取消請求。發(fā)送請求后,該客戶端實例信息將從服務(wù)器的實例注冊表中刪除。該下線請求不會自動完成,它需要調(diào)用以下內(nèi)容:

DiscoveryManager.getInstance().shutdownComponent();5Eviction服務(wù)剔除在默認的情況下,當(dāng)Eureka客戶端連續(xù)90秒沒有向Eureka服務(wù)器發(fā)送服務(wù)續(xù)約,即心跳,Eureka服務(wù)器會將該服務(wù)實例從服務(wù)注冊列表刪除,即服務(wù)剔除。Eureka的高級架構(gòu)圖Eureka服務(wù)注冊123Register:服務(wù)注冊當(dāng)EurRibbon負載均衡123Ribbon的工作

第一步有限選擇EurekaServer,它優(yōu)先選擇在同一個Zone且負載較少的Server,

第二步在根據(jù)用戶指定的策略,在從Server取到的服務(wù)注冊列表中選擇一個地址。其中Ribbon提供了多重策略,例如輪詢roundrobin、隨機Random、根據(jù)相應(yīng)時間加權(quán)等。負載均衡策略

簡單輪詢負載均衡加權(quán)響應(yīng)時間負載均衡區(qū)域感知輪詢負載均衡隨機負載均衡Ribbon中還包括以下功能:易于與服務(wù)發(fā)現(xiàn)組件(比如Netflix的Eureka)集成使用Archaius完成運行時配置使用JMX暴露運維指標,使用Servo發(fā)布多種可插拔的序列化選擇Ribbon架構(gòu)圖EurekaServer服務(wù)消費者服務(wù)提供者1服務(wù)提供者2服務(wù)提供者3Ribbon注冊注冊注冊注冊可用服務(wù)列表負載均衡請求Ribbon負載均衡123Ribbon的工作

第一步有限選擇Hystrix熔斷器123服務(wù)雪崩效應(yīng)形成的原因

服務(wù)提供者不可用重試加大流量服務(wù)調(diào)用者不可用Hystrix的設(shè)計原則包括:

資源隔離熔斷器命令模式熔斷器的概念熔斷器即斷路器,斷路器(CricuitBreaker)是一種能夠在遠程服務(wù)不可用時自動熔斷(打開開關(guān)),并在遠程服務(wù)恢復(fù)時自動恢復(fù)(閉合開關(guān))的設(shè)施,SpringCloud通過Netflix的Hystrix組件提供斷路器、資源隔離與自我修復(fù)功能。

Hystrix架構(gòu)圖Hystrix熔斷器123服務(wù)雪崩效應(yīng)形成的原因服務(wù)提供者不ZUUL網(wǎng)關(guān)123驗證與安全保障

識別面向各類資源的驗證要求并拒絕那些與要求不符的請求。審查與監(jiān)控在邊緣位置追蹤有意義數(shù)據(jù)及統(tǒng)計結(jié)果,從而為我們帶來準確的生產(chǎn)狀態(tài)結(jié)論。動態(tài)路由以動態(tài)方式根據(jù)需要將請求路由至不同后端集群處。ZUUL架構(gòu)圖4壓力測試逐漸增加指向集群的負載流量,從而計算性能水平。5負載分配為每一種負載類型分配對應(yīng)容量,并棄用超出限定值的請求。6靜態(tài)響應(yīng)處理在邊緣位置直接建立部分響應(yīng),從而避免其流入內(nèi)部集群。7多區(qū)域彈性跨越AWS區(qū)域進行請求路由,旨在實現(xiàn)ELB使用多樣化并保證邊緣位置與使用者盡可能接近。ZUUL網(wǎng)關(guān)123驗證與安全保障

識別面向各類資源的驗證要求SpringCloudConfig配置中心SpringCloudConfig架構(gòu)圖SpringCloudConfig提供基于以下3個維度的配置管理:應(yīng)用這個比較好理解,每個配置都是屬于某一個應(yīng)用的環(huán)境每個配置都是區(qū)分環(huán)境的,如dev,test,uat,prod等版本這個可能是一般的配置中心所缺乏的,就是對同一份配置的不同版本管理SpringCloudConfig提供版本的支持,也就是說對于一個應(yīng)用的不同部署實例,可以從服務(wù)端獲取到不同版本的配置,這對于一些特殊場景如:灰度發(fā)布,A/B測試等提供了很好的支持SpringCloudConfig配置中心SpringPARTXXXXXX公司<演講人:xxx>理賠渠道平臺使用THRPARTXXXXXX公司<演講人:xxx>理賠渠道平臺使用T非車理賠渠道平臺介紹

非車理賠渠道平臺是客戶端與非車理賠系統(tǒng)之間的橋梁,系統(tǒng)接收到渠道的數(shù)據(jù)后,經(jīng)過解密、報文重組,然后調(diào)用非車理賠服務(wù),進行保存或者查詢等動作。渠道平臺意在減輕核心服務(wù)的壓力,增加核心服務(wù)的安全性,減少核心人員的開發(fā)工作,同時更好的支持理賠服務(wù)。

非車理賠系統(tǒng)采用最新的SpringCloud微服務(wù)架構(gòu),增強系統(tǒng)的靈活性,降低部署和開發(fā)難度。非車理賠渠道平臺非車理賠渠道平臺介紹非車理賠渠道平臺是客戶端與渠道平臺總體架構(gòu)圖接口服務(wù)1接口服務(wù)2ZUUL1NGIXAPPPCZUUL2理賠服務(wù)微信Eureka1Eureka2渠道平臺渠道平臺總體架構(gòu)圖接口服務(wù)1接口服務(wù)2ZUUL1NGIXAP渠道平臺總體架構(gòu)描述Eureka兩臺ZUUL,兩臺主程序都注冊在兩臺Eureka服務(wù)上,并且兩臺Eureka相互注冊。主程序主程序即渠道平臺接口服務(wù),收到ZUUL的請求后,調(diào)用理賠系統(tǒng)服務(wù)獲取相關(guān)數(shù)據(jù),并返回客戶端。NGIX客戶端訪問NGIX,NGIX根據(jù)兩臺ZUUL的壓力情況,采用NGIX負載均衡策略,訪問壓力最小的ZUUL服務(wù)。ZUULZUUL是渠道平臺的入口,接收到NGIX轉(zhuǎn)來的請求后,ZUUL根據(jù)兩臺主程序服務(wù)的壓力情況,采用Ribbon負載均衡策略,訪問壓力最小的主程序。渠道平臺總體架構(gòu)描述Eureka兩臺ZUUL,兩臺主程序都注EURAKE配置配置結(jié)構(gòu)server:

port:7070

session:

timeout:100

tomcat:

uri-encoding:UTF-8

spring:

application:

name:eureka-server

output:

ansi:

enabled:detect

config:

location:config

profiles:

include:admin-test

logging:

path:logs

pattern:

level:debug

file:${logging.path}/eureak.log

eureka:

server:

enable-self-preservation:false#關(guān)閉自我保護

instance:

prefer-ip-address:true

metadata-map:

cluster:admin-server

management.context-path:${management.context-path}

health-check-url-path:${management.context-path}/health

client:

service-url:

defaultZone:73:7070/eureka,71:7070/eureka配置示例EURAKE配置配置結(jié)構(gòu)server:

port:70ZUUL配置一server:

connection-timeout:700000

session:

timeout:700000

spring:

cloud:

loadbalancer:

retry:

enabled:false#關(guān)閉重試機制

data:

cassandra:

read-timeout-millis:700000

#理論上這里設(shè)置了false下面的hystrix和Ribbon的重試都不起作用,為了防止錯誤,下面多做了配置,以免重試

#60000毫秒(分鐘)請求超時熔斷

hystrix:

metrics:

enabled:true

command:

default:

execution:

isolation:

strategy:THREAD

thread:

timeroutInMilliseconds:700000#斷路器的超時時間,斷路器的超時時間設(shè)置時間比Ribbon的超時時間短,防止重試。

timeout:

enabled:false

threadpool:

default:

coreSize:2000

maxQueueSize:2000

queueSizeRejectionThreshold:2000

ribbon:

IsSecured:true

ConnectionTimeout:6000000#連接超時時間

ReadTimeout:6000000

OkToRetryOnAllOperations:false#關(guān)閉所有操作請求都進行重試

MaxAutoRetriesNextServer:0#嘗試更換0次

MaxAutoRetries:0#對當(dāng)前實例的重試次數(shù)

eureka:

enabled:true

ZUUL配置一server:

connection-tZUUL配置二zuul:

max:

host:

connections:5000

semaphore:

max-semaphores:10000#最大信號量

retryable:false#關(guān)閉重試機制,以免重復(fù)提交

ignoredServices:'*'

ribbon:

eager-load:

enabled:true

host:

connect-timeout-millis:100000

socket-timeout-millis:6000000

maxTotalConnections:200000#(總連接數(shù))默認200

maxPerRouteConnections:10000#路由連接數(shù)默認20

max-per-route-connections:10000#擴大這個線程池的容量

max-total-connections:10000#擴大這個線程池的容量

add-proxy-headers:true

add-host-header:true

strip-prefix:false

ignoredPatterns:/**/management-context-path/**

routes:

interfaceChannel:

path:/interfaceChannel/**

serviceId:claims-channel-server

carchannel:

path:/carchannel/**

serviceId:carchannel-service

tab-a:

path:/tab-a/**

serviceId:tab-a-serviceZUUL的使用安心保險將ZUUL定義為所有SpringCloud應(yīng)用的網(wǎng)關(guān),所以其中不做個性化的實現(xiàn),僅用來實現(xiàn)請求數(shù)據(jù)的轉(zhuǎn)發(fā)。聯(lián)測過程中,因為此配置問題,當(dāng)報文大于10M,請求時間大于5分鐘時,ZUUL報錯:Causedby:.SocketTimeoutException:Readtimedoutserver.tomcat.max-http-post-size請求報文大小限制配置,測試接口時,請求數(shù)據(jù)大于2M,若不配置會導(dǎo)致客戶端直接收到500錯誤,無法進入主程序。ribbon.ReadTimeout:6000000

ZUUL配置二zuul:

max:

host主程序配置server.p

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論