SpringCloud-Consul 實現服務治理服務搭建

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;
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章