springcloud-服务治理-consul
1,Consul简介
Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发。
它具有很多优点。包括: 基于 raft 协议,比较简洁; 支持健康检查, 同时支持 HTTP 和 DNS 协议 支持跨数据中心的 WAN 集群 提供图形界面 跨平台,支持 Linux、Mac、Windows
Consul 整合SpringCloud 学习网站:https://springcloud.cc/spring-cloud-consul.html
Consul下载地址https://www.consul.io/downloads.html
consul 和 eureka 的区别:
eureka:需要手动搭建注册中心的服务端和客户端
consul:只需要搭建注册中心的客户端
2,Consul 环境搭建(服务端)
官方下载地址下载window版,解压得到一个可执行文件。设置环境变量,让我们直接在cmd里可直接使用consul使命。在path后面添加consul所在目录例如D:\soft\consul_1.1.0_windows_amd64
启动consul命
consul agent -dev -ui -node=cy
-dev开发服务器模式启动,-node结点名为cy,-ui可以用界面访问,默认能访问。
测试访问地址:http://localhost:8500
3,Consul客户端
3.1 添加 jar 包依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>springcloud-consul</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springcloud-consul</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.2 配置 application.yml 文件
###eureka 服务端口号
server:
port: 8502
spring:
application:
name: consul-order
#### consul注册中心地址
cloud:
consul:
host: localhost # consul 服务端的地址
port: 8500 # consul 服务端的端口
discovery:
hostname: 192.168.18.220 # 设置服务地址直接为端口号,默认情况下, 服务注册中心地址随机生成英文如:pc-xxuohx
3.3 启动类中添加 @EnableDiscoveryClient 注解支持
package com.example.springcloudconsul;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class SpringcloudConsulApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudConsulApplication.class, args);
}
}
3.4 DiscoveryClient 的使用
package com.example.springcloudconsul.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class MemberController {
@Value("${server.port}")
private String port;
@Autowired
private DiscoveryClient discoveryClient;
@RequestMapping("/getMember")
public String getMember() {
return "会员服务调用成功,端口号为:" + port;
}
@RequestMapping("/discoveryClient")
public List<ServiceInstance> discoveryClient() {
List<ServiceInstance> instances = discoveryClient.getInstances("consul-member");
instances.forEach(instance -> System.out.println(instance));
return instances;
}
}