SpringCloud實戰之初級入門(二)— 服務注冊與服務調用


1.環境介紹

接上一篇(SpringCloud實戰之初級入門(一)— eureka注冊中心),我們講到了注冊中心的高可用,集群,這篇我們講如何服務如何注冊在eureka上,如何使用Feign調用服務。

  1. 繼續使用上一篇的文章中的mirco-service-eureka工程,為了節約演示環境,我們去掉集群部署,只啟動一台eureka實例。
  2. 修改eureka-server-node-1-test.yml中的defaultZone為http://localhost:9001/eureka/
  3. 通過修改的“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 修改配置文件

  1. 老規矩,將applicaiton.properties修改為application.yml。
  2. 加入如下代碼
server:
  port: 8001
  
spring:
  application:
    name: service-provider
    
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:9001/eureka/

2.3 修改啟動文件

  1. 在啟動文件中加上"@EnableDiscoveryClient"注解,然后啟動工程。
  2. 打開瀏覽器訪問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 親測注意事項

  1. 加入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 修改配置文件

  1. 老規矩,將applicaiton.properties修改為application.yml。
  2. 加入如下代碼
server:
  port: 8002

spring:
  application:
    name: service-consumer

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:9001/eureka/

3.3 修改啟動文件

在啟動文件中加上"@EnableDiscoveryClient"和"@EnableFeignClients"注解

3.4 創建第一個微服務調用

  1. 創建一個名為“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的方法獲取參數,這里參數獲取方法務必與被調用服務對應,如果不對應是訪問不到服務的。

  1. 創建一個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.一點點重要的事情


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM