使用 Zookeeper 的服務發現
啟用
包含 org.springframework.cloud:spring-cloud-starter-zookeeper-discovery
的相依性會啟用自動配置,以設定 Spring Cloud Zookeeper Discovery。
對於 Web 功能,您仍然需要包含 org.springframework.boot:spring-boot-starter-web 。 |
當使用 Zookeeper 3.4 版時,您需要變更包含相依性的方式,如此處所述。 |
向 Zookeeper 註冊
當用戶端向 Zookeeper 註冊時,它會提供關於自身的 metadata(例如主機和埠、ID 和名稱)。
以下範例顯示 Zookeeper 用戶端
@SpringBootApplication
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello world";
}
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
前面的範例是一個正常的 Spring Boot 應用程式。 |
如果 Zookeeper 位於 localhost:2181
以外的其他位置,則配置必須提供伺服器的位置,如下列範例所示
spring:
cloud:
zookeeper:
connect-string: localhost:2181
如果您使用Spring Cloud Zookeeper Config,則先前範例中顯示的值需要位於 bootstrap.yml 而不是 application.yml 中。 |
預設服務名稱、執行個體 ID 和埠(取自 Environment
)分別為 ${spring.application.name}
、Spring Context ID 和 ${server.port}
。
在 classpath 上擁有 spring-cloud-starter-zookeeper-discovery
會使應用程式同時成為 Zookeeper「服務」(也就是說,它會註冊自身)和「用戶端」(也就是說,它可以查詢 Zookeeper 以尋找其他服務)。
如果您想要停用 Zookeeper Discovery Client,您可以將 spring.cloud.zookeeper.discovery.enabled
設定為 false
。
使用 DiscoveryClient
Spring Cloud 透過 OpenFeign (REST 用戶端建構器)、RestTemplate
和 WebClient
的 Spring Cloud Loadbalancer 支援,使用邏輯服務名稱而不是實體 URL。
您也可以使用 org.springframework.cloud.client.discovery.DiscoveryClient
,它為非 Netflix 特定的探索用戶端提供簡單的 API,如下列範例所示
@Autowired
private DiscoveryClient discoveryClient;
public String serviceUrl() {
List<ServiceInstance> list = discoveryClient.getInstances("STORES");
if (list != null && list.size() > 0 ) {
return list.get(0).getUri().toString();
}
return null;
}