Consul簡介
Consul 是一套開源的分佈式服務發現和配置管理系統,由 HashiCorp 公司用 Go 語言開發。
它具有很多優點。包括: 基於 raft 協議,比較簡潔; 支持健康檢查, 同時支持 HTTP 和 DNS 協議 支持跨數據中心的 WAN 集羣 提供圖形界面 跨平臺,支持 Linux、Mac、Windows
Consul客戶端------Maven依賴信息
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<!-- 管理依賴 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- SpringBoot整合Web組件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringCloud consul-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
</dependencies>
<!-- 注意: 這裏必須要添加, 否者各種依賴有問題 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
客戶端配置文件:
###eureka 服務端口號
server:
port: 8502
spring:
application:
name: consul-order
####consul註冊中心地址
cloud:
consul:
host: localhost
port: 8500
discovery:
hostname: 192.168.18.220
DiscoveryClient用法
discoveryClient接口 可以獲取註冊中心上的實例信息。
@EnableDiscoveryClient 開啓其他註冊中心 比如consul、zookeeper
@SpringBootApplication
@EnableDiscoveryClient
public class AppMember {
public static void main(String[] args) {
SpringApplication.run(AppMember.class, args);
}
}
獲取註冊中心上信息
@RequestMapping("/getServiceUrl")
public List<String> getServiceUrl() {
List<ServiceInstance> list = discoveryClient.getInstances("zk-member");
List<String> services = new ArrayList<>();
for (ServiceInstance serviceInstance : list) {
if (serviceInstance != null) {
services.add(serviceInstance.getUri().toString());
}
}
return services;
}
@EnableDiscoveryClient 與@EnableEurekaClient區別
1,@EnableDiscoveryClient註解是基於spring-cloud-commons依賴,並且在classpath中實現; 適合於consul、zookeeper註冊中心
2,@EnableEurekaClient註解是基於spring-cloud-netflix依賴,只能爲eureka作用;
@RestController
public class OrderApiController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;
// 訂單服務調用會員服務
@RequestMapping("/getOrder")
public String getOrder() {
// 有兩種方式,一種是採用服務別名方式調用,另一種是直接調用 使用別名去註冊中心上獲取對應的服務調用地址
String serviceUrl = getServiceUrl("consul-member") + "/getMember";
String result = restTemplate.getForObject(serviceUrl, String.class);
System.out.println("訂單服務調用會員服務result:" + result);
return result;
}
public String getServiceUrl(String name) {
List<ServiceInstance> list = discoveryClient.getInstances(name);
if (list != null && !list.isEmpty()) {
return list.get(0).getUri().toString();
}
return null;
}
}