目錄
1.環境介紹
接上一篇(SpringCloud實戰之初級入門(一)— eureka注冊中心),我們講到了注冊中心的高可用,集群,這篇我們講如何服務如何注冊在eureka上,如何使用Feign調用服務。
- 繼續使用上一篇的文章中的mirco-service-eureka工程,為了節約演示環境,我們去掉集群部署,只啟動一台eureka實例。
- 修改eureka-server-node-1-test.yml中的defaultZone為http://localhost:9001/eureka/。
- 通過修改的“eureka-server-node-1”名稱,debug啟動本實例。
2.服務提供
2.1 創建工程
為了照顧不同段位朋友的感受,像這種簡單的創建工程過程就不再貼圖了,如有不清楚的地方,請看上篇文章。創建一個名為"mirco-service-provider"的工程,可以勾選“eureka discovery”,或者在項目的pom.xml文件中加入如下代碼
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.2 修改配置文件
- 老規矩,將applicaiton.properties修改為application.yml。
- 加入如下代碼
server:
port: 8001
spring:
application:
name: service-provider
eureka:
client:
serviceUrl:
defaultZone: http://localhost:9001/eureka/
2.3 修改啟動文件
- 在啟動文件中加上"@EnableDiscoveryClient"注解,然后啟動工程。
- 打開瀏覽器訪問http://localhost:9001/,可以看到如下圖所示,說明服務已經注冊成功。
2.4 創建第一個微服務
怎么建一個類就不說了,直接上代碼:
@RestController
public class MyFristServiceController {
/**
* 我的第一個微服務程序
* @param name
* @return
*/
@RequestMapping(value="/helloWorld" , method= RequestMethod.GET)
public String helloWorld(String name) {
return "Hello," + name + ", this is your world!" ;
}
}
重啟服務,訪問http://localhost:8001/helloWorld?name=jack,出現如下圖,說明我們第一個微服務創建成功:
2.5 親測注意事項
- 加入spring-cloud-starter-netflix-eureka-client依賴后啟動工程,會在控制台中顯示在注冊中,然后服務器就停止了,這是因為沒有加入web方面的依賴,導致工程以為你這就是一個普通的驗證過程,這里並沒有去監聽端口,依賴如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
3.服務調用
3.1 創建工程
我們用同樣的方式來創建一個名為"mirco-service-consumer"的工程
3.2 修改配置文件
- 老規矩,將applicaiton.properties修改為application.yml。
- 加入如下代碼
server:
port: 8002
spring:
application:
name: service-consumer
eureka:
client:
serviceUrl:
defaultZone: http://localhost:9001/eureka/
3.3 修改啟動文件
在啟動文件中加上"@EnableDiscoveryClient"和"@EnableFeignClients"注解
3.4 創建第一個微服務調用
- 創建一個名為“MyFristConsumer”的Feign遠程調用接口:
@FeignClient(name = "service-provider")
public interface MyFristConsumer {
/**
* 遠程調用helloWorld的接口
* @param name
* @return
*/
@RequestMapping(value="/helloWorld" , method= RequestMethod.GET)
public String helloWorld(@RequestParam("name") String name) ;
}
這里面@FeignClient(name = "xxx"),xxx表示要調用的應用服務名稱一定不能弄錯了,然后是下面helloWorld方法,這里面要注意的問題是如果我們的被調用服務是用@PathVariable的方法獲取參數,這里參數獲取方法務必與被調用服務對應,如果不對應是訪問不到服務的。
- 創建一個controller類來測試我們的調用是否成功
@RestController
public class MyFristConsumerController {
@Autowired
private MyFristConsumer myFristConsumer ;
/**
* 我的第一個微服務調用程序
* @param name
* @return
*/
@RequestMapping(value="/consumerHelloWorld" , method= RequestMethod.GET)
public String helloWorld(String name) {
return myFristConsumer.helloWorld(name) ;
}
}
啟動服務,訪問http://localhost:8002/consumerHelloWorld?name=rose,出現如下圖,說明我們第一個微服務調用成功:
4.結語
- 涉及了三個工程,分別是:mirco-service-eureka、mirco-service-provider以及mirco-service-consumer。
- 雖然我們這里看到了一個簡單的服務調用,並模擬了一個類RPC似的調用,但是大家要知道實際在使用的過程中肯定不是一個提供服務,一個來進行調用這么簡單,服務與服務之間都是穿插調用的。以后我會提供公司級的項目結構,並輔以實際例子來為大家講解。
- mirco-service-consumer工程中,我們沒有看寫入被調用的服務地址,而是連上了eureka注冊中心,並實現調用,這樣就可以讓我們方便在服務集群的情況下做動態上、下線。
- 限於篇幅,有興趣的朋友們可以參照我第一篇,一個工程配置多個服務節點的方法試一下,看能不能啟動多個服務提供調用。
5.一點點重要的事情
- 文章對應的源代碼地址:github- SpringCloud實戰之初級入門(二)— 服務注冊與服務調用
- 文章對應的視頻地址:愛奇藝- SpringCloud實戰之初級入門(二)— 服務注冊與服務調用