一、下载部署consul
1. docker部署consul
部署命令
docker run -d --name consul -p 8500:8500 consul
查看是否部署成功,查询consul版本
docker exec -it consul consul -version
2.官网下载
二、SpringCloud向consul中注册服务
1.引入库
<!--consul注册jar包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!--健康检查、审计、统计和监控,用于springCloud心跳机制-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.完整pom文件内容
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>consul-servant2020</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>consul-servant2020</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2021.0.1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--consul注册jar包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!--健康检查、审计、统计和监控,用于springCloud心跳机制-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</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>
<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>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
3.yml相关配置
server:
port: 2021
spring:
application:
name: consul-consumer2021
#consul注册中心地址
cloud:
consul:
host: 192.168.87.128
port: 8500
discovery:
service-name: ${spring.application.name}
prefer-ip-address: true # 表示注册时使用IP而不是hostname
4.使用@EnableDiscoveryClient注解声明main方法
@SpringBootApplication
@EnableDiscoveryClient
public class ConsulServant2020Application {
public static void main(String[] args) {
SpringApplication.run(ConsulServant2020Application.class, args);
}
}
5.RestTemplate配置
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
6.测试方法
@RestController
@RequestMapping("consulServantController")
public class ConsulServantController {
@Value("${server.port}")
String port;
@Resource
private RestTemplate restTemplate;
/***
* description: 提供消费信息
* version: 1.0 ->
* date: 2022/3/27 16:51
* author: xiaYZ
* iteration: 迭代说明
* @param
* @return java.lang.String
*/
@RequestMapping("sendMessage")
public String sendMessage(){
return port + ":" + UUID.randomUUID();
}
private static final String INVOKE_URL = "http://consul-consumer2021";
/**
* description: 调佣consul-consumer2021服务中/consulConsumerController/sendMessage方法
* version: 1.0
* date: 2022/3/28 13:48
* author: xiaYZ
* iteration: 迭代说明
* @param
* @return
*/
@GetMapping(value = "getMessage")
public String getMessage() {
return restTemplate.getForObject(INVOKE_URL + "/consulConsumerController/sendMessage", String.class);
}
}
1.运行截图
- 运行项目查询consul的UI界面
- consul-servant2020服务调用consul-consumer2021中方法
总结
- 引入jar包
- 配置consul服务
- 调用方法
项目地址