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會將自己當做一個微服務向自己進行註冊。
服務呼叫者需要訪問服務提供者的資源,我們這裡用到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中的方法