本文為新手向教程,幫助大家快速入門 Spring Cloud 開發,也作為「跟我學 Spring Cloud Alibaba」系列的補充文章,文章會在公衆号「架構進化論」進行首發更新,歡迎關注。
一般來說,Intelij IDEA 可以通過 Maven Archetype 來快速生成Maven項目,其實 IDEA 內建了 Spring 官方提供的 Spring Initializr,可以非常友善的建立 Maven 項目,而且能自動生成啟動類和單元測試代碼。
下面我們學習如何快速搭建一個 Spring Cloud 工程,示例使用 Spring Boot 2.2.2 版本。
建立一個新工程
1.建立一個新工程,選擇maven,點選下一步

2.填寫項目相關的資訊,進到下一步
3.填寫項目名和項目位置,命名為 spring cloud demo,點選 finish
4.這樣我們就建立好了一個普通項目,該項目是作為一個Parent project存在的,可以直接删除src檔案夾
添加 EurekaServer 子項目
1.在項目上右鍵-->new-->module-->Spring Initializr-->next
2.填寫項目相關資訊,這裡命名為 eureka-server,進入下一步
3.選擇Cloud Discovery-->Eureka Server,下一步
4.填寫項目名和項目位置等,完成
5.IDEA會自動生成Application類,添加@EnableEurekaServer,該注解表明标注類是一個Eureka Server
6.修改配置,切換啟動端口,預設生成的項目配置檔案是 application.properties,這裡我替換成application.yml
# 服務注冊中心 (單節點)
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
fetch-registry: false # 表示是否從Eureka Server擷取注冊資訊,預設為true.因為這是一個單點的Eureka Server,不需要同步其他的Eureka Server節點的資料,這裡設定為false
register-with-eureka: false # 表示是否将自己注冊到Eureka Server,預設為true.由于目前應用就是Eureka Server,故而設定為false.
service-url:
# 設定與Eureka Server的位址,查詢服務和注冊服務都需要依賴這個位址.預設是http://localhost:8761/eureka/;多個位址可使用','風格.
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
eureka的配置資訊可以檢視 org.springframework.cloud.netflix.eureka. EurekaClientConfigBean ,參考源碼了解含義。
7.啟動項目,在浏覽器中輸入
http://localhost:8761/,通路Eureka控制台,服務正常啟動
8.如果啟動報錯,配置檔案未生效,檢查下 target 目錄下是否正确引用了 application.yml 檔案。
添加 EurekaProducer 服務生産者
1.按照同樣的方式,建立一個項目,這裡我們建立一個Spring Boot風格的服務,建立時需要勾選 Spring Cloud Discover--> Eureka Discover Client 和 Spring Web 的依賴。
2.在application啟動類中加入注解@EnableEurekaClient,表明自己屬于一個生産者。這裡為了友善測試,直接使用@RestController擷取傳回值。
3.修改配置,注冊到Eureka Server。
server:
port: 8765
spring:
application:
name: eureka-producer
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka # 指定服務注冊中心
4.啟動應用,重新整理Eureka控制台,可以看到服務已經注冊到Eureka上
5.如果啟動有問題,檢查是否缺少Spring Boot web的依賴包,可以嘗試添加如下配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
建立 Eureka Consumer 服務消費者
1.通過 Spring Initializr,建立一個 Eureka Discovery Client 子產品,同時要勾選加入Spring Web依賴。
2.修改原有配置,指定服務注冊中心,這裡還是使用yml檔案。
server:
port: 8763
spring:
application:
name: eureka-consumer
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka # 指定服務注冊中心
2.在啟動類中添加@EnableDiscoveryClient表明标注類是消費者,加入restTemplate來消費相關的服務。
@SpringBootApplication
@EnableDiscoveryClient
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
@Bean
@LoadBalanced
RestTemplate restTemplate()
{
return new RestTemplate();
}
}
3.建立controller層,消費遠端服務
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class DemoController {
@Autowired
RestTemplate restTemplate;
@RequestMapping("greet")
public String sayHello(@RequestParam String name){
return restTemplate.getForObject("http://service-hello/sayHello?param=" + name, String.class);
}
}
4.配置完畢以後,啟動服務消費者,重新整理Eureka控制台,可以看到消費者已經注冊。
5.打開浏覽器輸入localhost:{server.port}/path 進行服務調用,這裡我用
http://localhost:8763/greet?name=eureka,可以看到請求正确傳回,正确調用了服務提供者。
總結
本文通過IDEA的插件,快速建立了一個基于Eureka進行服務發現的Spring Cloud工程執行個體。
除了內建插件,也可以直接通路
http://start.spring.io,通過引導,在腳手架中建立自己的項目,導入到開發工具中,感興趣的同學可以去試下。