SpringCloud H版 使用Consul作为注册中心
Posted 小毕超
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud H版 使用Consul作为注册中心相关的知识,希望对你有一定的参考价值。
一、consul作为注册中心
eureka现在已经不更新,上篇博客中我们讲解了zookeeper作为注册中心的解决方案,除了zk还有consul也可以作为注册中心来使用,并且consul所支持的功能是多余eureka和zk 的,可以说如果没有nacos的出现,consul很有可能成为现在的主流。
上篇文章地址:https://blog.csdn.net/qq_43692950/article/details/121985527
二、consul 安装
Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发。
提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。
它具有很多优点。包括: 基于 raft 协议,比较简洁; 支持健康检查, 同时支持 HTTP 和 DNS 协议 支持跨数据中心的 WAN 集群 提供图形界面 跨平台,支持 Linux、Mac、Windows。
consul 的下载地址
https://www.consul.io/downloads
这里可以先选windows版本进行测试,linux版本,官方也给出了安装步骤。windows版下载好之后,只有一个 consul.exe ,使用consul agent -dev
就可以启动consul服务,我们也可以编写一个启动脚本,放在 consul.exe同级目录中,来方便我们进行测试:
start.bat
consul agent -dev
pause
启动后,可以在浏览器中输入 http://127.0.0.1:8500/
来查看consul 的可视化页面
至此,consul服务就已经准备好了
三、声明SpringCloud版本
还是和上篇文章中讲的一样,在父pom,或者自己的boot项目中声明出SpringCloud的版本:
版本我们采用H版的SR9版本
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bxc</groupId>
<artifactId>cloud-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>cloud-parent</name>
<packaging>pom</packaging>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR9</spring-cloud.version>
<model.version>0.0.1-SNAPSHOT</model.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>$spring-boot.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud Hoxton.SR9-->
<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.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.7.RELEASE</version>
<configuration>
<mainClass>com.bxc.clouddemo.CloudDemoApplication</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
四、服务提供者修改
在pom中引入依赖:
<!--SpringCloud consul-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!-- SpringBoot整合Web组件 -->
<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>
<dependency>
<groupId>com.bxc</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
common是我们上篇博客中讲到的公共的module,大家可以参考上篇博客,也可以不依赖,将controller的返回修改为自定义的即可。
修改配置文件:
server:
port: 8091
spring:
application:
name: provider
cloud:
consul:
host: localhost
port: 8500
discovery:
#hostname: 127.0.0.1
service-name: $spring.application.name
主启动类修改:
@SpringBootApplication
@EnableDiscoveryClient
public class ZkProvider2Application
public static void main(String[] args)
SpringApplication.run(ZkProvider2Application.class, args);
启动服务提供者,查看consul 可视化页面:
可以看出服务信息,已经存储在了consul中,此时切换一个端口,再启动一个提供者,在查看consul可视化页面:
provider节点下,就出现两个信息了。
最后编写提供者提供的服务接口:
@RestController
public class ProviderController
@Value("$server.port")
private String port;
@GetMapping("/getData")
public ResponseTemplate providerData()
return ResSuccessTemplate.builder().data("come from : " + port).build();
@GetMapping("/getTimeData")
public ResponseTemplate getTimeData() throws InterruptedException
TimeUnit.SECONDS.sleep(5);
return ResSuccessTemplate.builder().data("come from : " + port).build();
四、服务消费者修改
消费者端的pom和配置和提供者相同,可以完全拷贝过来,将端口改为8080,在消费端,我们还是采用ribbon + restTemplate 的方式进行演示,后面我们会讲解feign的具体使用。
声明 RestTemplate
@Configuration
public class RestTemplateConfig
@Bean
@LoadBalanced
public RestTemplate getRestTemplate()
return new RestTemplate();
编写测试接口
@RestController
@RequestMapping("/rest/consumer")
public class ConsumerController
@Autowired
RestTemplate restTemplate;
@GetMapping("/getData")
public ResponseTemplate getData()
ResponseTemplate responseTemplate = restTemplate.getForObject("http://provider/getData", ResSuccessTemplate.class);
return responseTemplate;
@GetMapping("/getTimeData")
public ResponseTemplate getTimeData()
ResponseTemplate responseTemplate = restTemplate.getForObject("http://provider/getTimeData", ResSuccessTemplate.class);
return responseTemplate;
接口测试,在浏览器输入:http://localhost:8080/rest/consumer/getData
已经实现和Eureka和zookeeper相同的效果,但也只修改了少量的配置。
喜欢的小伙伴可以关注我的个人微信公众号,获取更多学习资料!
以上是关于SpringCloud H版 使用Consul作为注册中心的主要内容,如果未能解决你的问题,请参考以下文章