上篇文章介绍了如何使用zookeeper作为服务与注册中心,本篇文章将介绍一下如何使用Consul来实现服务注册与发现,当然这个也不是我个人杜撰,是springcloud官网介绍推荐的组件之一,既然要学就要学的彻底一些,我在实际项目开发中,用的都是eureka和最新的nacos,Consul也仅限于在个人学习中使用过,踩的坑很少,可能也有一些理解上的错误,还是那句话,欢迎批评指正,技术是需要交流的。
Consul我接触的不多,第一次和最后一次接触只在springcloud官网上见过,度娘了一下它的用途,在这里简单提一下。
Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司使用GO语言开发的,提供了微服务系统中的服务治理,配置中心,控制总线等功能,这些功能中的每一个都可以独立使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。
它能够作为服务注册发现组件,并提供HTTP和DNS两种发现方式;也可用作健康监测,支持HTTP,TCP,DOCKER,SHELL脚本定制等方式(没研究过尚不清楚);也可用作KV存储,支持key、value的存储方式;也可以作为多数据中心使用;并且提供了可视化的Web界面。
安装和运行
安装Consul比较顺利,按照官网给出的步骤一步一步执行即可,此过程我没有踩过坑,所以也给不出什么注意事项,启动的话,可以通过参数指定已何种方式运行,我自己学习用使用的是开发模式,命令是 consul agent -dev,运行起来以后直接访问http://ip:8500即可进入它的web控制台,忘记截图了,后期在补吧
下面开始对我们的代码进行改造
服务者代码
pom文件
<dependencies>
<dependency><!-- 引用自定义的通用包 -->
<groupId>com.zdd.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- SpringCloud consul server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
yml文件
server:
port: 8006
spring:
application:
name: consul-provider
#consul注册中心地址
cloud:
consul:
host: 192.168.102.10
port: 8500
discovery:
service-name: ${spring.application.name}
主启动类
@SpringBootApplication
@EnableDiscoveryClient
public class ProvideConsul8006 {
public static void main(String[] args) {
SpringApplication.run(ProvideConsul8006.class,args);
}
}
测试controller
@RestController
@Slf4j
public class TestController {
@Value("${server.port}")
private String serverPort;
@RequestMapping(value = "/provider/consul")
public String paymentConsul() {
return "springcloud consul:" + serverPort + "\t" + UUID.randomUUID().toString();
}
}
启动项目,访问 http://localhost:8006/procider/consul,成功打印端口号和随机uuid字符串
打开之前consoul的web控制台可以看到我们consoul-provide服务已经注册进consul。
至此,Consoul服务注册中心搭建完成,下一篇准备对目前eureka,zookeeper,consul几个注册中心组件进行一下分析,至于nacos作为当前最新的spring cloud alibaba成员想放在后面单独写一篇着重写一下。