1. 程式人生 > >Spring Cloud系列(3):Spring Cloud Eureka

Spring Cloud系列(3):Spring Cloud Eureka

Spring Cloud Eureka 服務註冊與發現。

在Spring Cloud體系中,Eureka角色是服務的註冊與發現。在裡面涉及到三個關鍵的角色:服務註冊中心,服務呼叫者,服務提供者。

Eureka Server

eureka server 是服務註冊中心,所有的服務都應該註冊到這裡來

我們還是在之前的專案基礎上,新建一個module,pom檔案中引入

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>

這樣宣告出這個專案是一個eureka server

在啟動類上增加@EnableEurekaServer註解。

配置檔案application.yml:

server:
  port: 8761

spring:
  application:
    name: acs-eureka-server

eureka:
  instance:
    lease-expiration-duration-in-seconds: 6
    lease-renewal-interval-in-seconds: 2
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
    register-with-eureka: false
    fetch-registry: false

其中 eureka.client.register-with-eureka=false表明自己不需要向自己註冊,否則eureka會將自己當做一個微服務向自己進行註冊。


Eureka Invoker

服務呼叫者需要訪問服務提供者的資源,我們這裡用到Feign

同樣的,新建一個nodule專案,pom檔案修改為:

        <!--遠端呼叫-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>
        
        <dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-hystrix</artifactId>
		</dependency>

配置檔案application.yml中指定要註冊到那個server

  port: 8086

spring:
  application:
    name: acs-eureka-invoker

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

在啟動類上新增@EnableEurekaClient和@EnableFeignClients註解

這個時候,啟動就能成功了,但我們這裡用到了Feign,遠端呼叫服務提供者的介面,所以我們需要寫一個介面

@FeignClient(name = "acs-eureka-provider")
public interface RemoteInterface {
	
	@PostMapping("/hello")
	String hello();
}

這個介面中有一個/hello方法對應著服務提供者的/hello方法。

我們再新建一個Controller類

@RestController
public class HelloController {
	
	@Autowired
	private RemoteInterface remoteInterface;
	
	@RequestMapping("/acs/hello")
	public String hello(){
		return remoteInterface.hello();
	}
}

這樣我們的呼叫者就啟動完畢了。啟動後我們訪問上一步建立的eureka server,發現註冊的例項多了一個acs-eureka-invoker,而這個名稱就是我們指定的應用名稱。


Eureka Provider

服務提供者提供具體的業務或資料庫的操作等,這裡我們也是新建一個子module,

配置檔案applicaiton.xml中配置服務埠,名稱,向哪個服務進行註冊

server:
  port: 8083
  
spring:
  application:
    name: acs-eureka-provider

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

啟動類上新增springboot啟動的註釋就可以

新增一個controller類。供服務呼叫者呼叫

@RestController
public class HelloController {
	
	@RequestMapping("/hello")
	public String hello(){
		return "hello";
	}
}

啟動後訪問eureka server,可以看到例項處又多了一個acs-eureka-provider



說明acs-eureka-invoker中已經呼叫到了acs-eureka-provider中的方法