本篇內(nèi)容介紹了“怎么搭建spring cloud應用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)網(wǎng)站建設與網(wǎng)站營銷,提供成都網(wǎng)站設計、網(wǎng)站制作、外貿(mào)營銷網(wǎng)站建設、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營銷、微信小程序定制開發(fā)、公眾號商城、等建站開發(fā),創(chuàng)新互聯(lián)網(wǎng)站建設策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢。
serviceclient
Service:提供服務的應用,端口是 808x的形式 Client:調(diào)用服務的應用 端口是809x的形式 整個程序以根據(jù)client端根據(jù)用戶id調(diào)用服務端程序返回用戶信息做示例。
1、 兩個單體spring boot應用調(diào)用 本節(jié)講的比較簡單,分別新建兩個普通的spring boot 應用,不使用任何spring cloud相關的東西,service 端提供一個restful接口服務,client端通過RestTemplate來進行調(diào)用 首先只需要創(chuàng)建兩個單獨的Spring boot應用,服務端的端口為8081,客戶端的端口是8071,然后在客戶端用RestTemplate 調(diào)用即可,服務端的代碼不貼了,就是用spring initializr 創(chuàng)建的一個普通的spring boot web項目,主要是說一下客戶端的調(diào)用。
配置RestTemplate
@Configuration public class ConfigurationBean { private SimpleClientHttpRequestFactory getHttpRequestFactory(){ SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setConnectTimeout(10000); factory.setReadTimeout(10000); return factory;
調(diào)用方式
@RestController @RequestMapping("/client/user") public class UserApi { @Autowired private RestTemplate restTemplate; @RequestMapping("/{id}") public String getUser(@PathVariable("id") String id){ String forObject = restTemplate.getForObject("http://localhost:8081/user/1", String.class); return forObject; } }
分別啟動service和client,通過調(diào)用訪問http://localhost:8080/client/user/1,返回服務端數(shù)據(jù),當然restTemplate還有很多其他的方法可用,自己在實際使用的時候可以去探究。
2、 以上就完成了兩個微服務間通信,客戶端調(diào)用服務端的接口,功能完畢,但是這指定不是我們想要的姿勢,我們在客戶端,使用restTemplate寫死了服務端的地址。在實際的生產(chǎn)環(huán)境中,我們的服務端不可能只有一臺,我們的服務端也不可能只有一臺機器。我們將面臨以下問題:
橫向擴展服務
服務端和客戶端機器上下線
為了解決不想寫死服務端的地址,并且能動態(tài)的切換對服務端機器的調(diào)用的問題,引入注冊中心的概念,說起來注冊中心,我們通常會想起來zookeeper,但是spring cloud中并沒有采用zookeeper,而是采用了Eureka,zookeeper和Eureka對于保證CAP定理中的方式不同,zookeeper比較注重CP(一致性,分區(qū)耐受性),而對于Eureka來說重點保證AP(一致性和分區(qū)耐受性)。 注冊中心有了,那客戶端的請求是如何分發(fā)到相應某一臺服務器上呢,也許我們用過nginx,nginx通過配置服務器的權重, ip hash或者隨機以及輪訓這些策略進行分配服務器,對于spring cloud 來說,干這個活的是Ribbon。接下來就通過改造第一步的項目來讓它支持以上這些需求。 首先需要搭建一個EurekaServer,也就是注冊中心,和zookeeper是一個需要安裝的軟件不同,Eureka是一個內(nèi)置在spring boot start中的一個應用程序,我們只需要引入spring-boot-start-eureka,然后啟動項目即可。在這之前說一下EurekaServer和我們應用程序的關系。
EurekaServer 作為注冊中心,接收服務端的注冊一級客戶端對服務端服務列表的請求, Eureka Client內(nèi)嵌到應用程序中,用于注冊服務或者獲取服務。
搭建EurekaServer
pom.xml
4.0.0 com.wtf.cloud eureka-server 0.0.1-SNAPSHOT jar eureka-server Demo project for Spring Boot org.springframework.boot spring-boot-starter-parent 2.0.0.RELEASE UTF-8 UTF-8 1.8 Finchley.M8 org.springframework.cloud spring-cloud-starter-eureka-server 1.4.3.RELEASE org.springframework.cloud spring-cloud-starter-parent ${spring-cloud.version} pom import org.springframework.boot spring-boot-maven-plugin spring-milestones Spring Milestones https://repo.spring.io/milestone false
main文件
@SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
配置文件 application.yml
server: port: 8888 spring: application: name: eureka-server eureka: client: register-with-eureka: false fetch-registry: false serviceUrl: defaultZone: http://localhost:8888/eureka/
應用的端口為8888
應用名稱:eureka-server 然后是配置eureka的相關東西 在默認設置下,改服務注冊中心也會將自己組委客戶端來嘗試注冊它自己,所以我們需要禁止它的客戶端行為
eureka.client.register-with-eureka=false
由于該應用屬于注冊中心,所以設置為false,代表不像注冊中心注冊自己
eureka.client.fetch-registry=false
由于注冊中心的職責是維護服務實例,它并不需要去檢索服務,所以也設置為false。 更多配置可以參照EurekaInstanceConfigBean 和EurekaClientConfigBean
啟動服務訪問http://localhost:8888/ 可以看到如下界面:
“怎么搭建spring cloud應用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!