首先需要我们事先在电脑上或者服务器上成功安装Consul
参考:Docker安装Consul
一、创建子module项目 – 服务提供者
cloud-provider-consul-payment8006
- 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>spring-cloud-demo</artifactId>
<groupId>com.cloud.demo</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-provider-consul-payment8006</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<!-- 引用自己定义的api通用包 -->
<groupId>com.cloud.demo</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>
<!--热部署-->
<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>
</project>
- appliction.yml文件
server:
port: 8006
spring:
application:
name: payment-provider-service
cloud:
consul:
# consul 的 地址与端口号
host: 192.168.155.13
port: 8600
discovery:
#注册服务名
service-name: ${spring.application.name}
- Controller
@Slf4j
@RestController
@RequestMapping("/Payment")
public class PaymentController {
@Value("${server.port}")
private String port;
@GetMapping("/getuuid")
public ResultModel getUuid() {
return ResultModel.success("服务端口号:"+port + "查询成功", UUID.randomUUID().toString());
}
}
二、创建子module项目 – 服务消费者
cloud-consumer-consul-order80
- 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>spring-cloud-demo</artifactId>
<groupId>com.cloud.demo</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-consumer-consul-order80</artifactId>
<dependencies>
<dependency>
<!-- 引用自己定义的api通用包 -->
<groupId>com.cloud.demo</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</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-web</artifactId>
</dependency>
<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>
</project>
- appliction.yml文件
server:
port: 80
spring:
application:
name: order-consumer-service
cloud:
consul:
host: 192.168.155.13
port: 8600
discovery:
service-name: ${spring.application.name}
- RestTemplate bean
@Configuration
public class ApplicationContextConfig {
@Bean
//RestTemplate并且开启了客户端负载均衡功能
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
- controller
@Slf4j
@RestController
@RequestMapping("/Order")
public class OrderController {
@Resource
private RestTemplate restTemplate;
//用微服务服务名去调用服务
private static final String paymentUrl = "http://payment-provider-service/Payment/";
@GetMapping("/getuuid")
public ResultModel getPayment(){
return restTemplate.getForObject(paymentUrl+"getuuid", ResultModel.class );
}
}
三、启动、测试
成功运行以上两个模块后,前往Consul视图查看
注册正常
功能测试,也使用正常
其实Consul可以做的,远不止服务注册
这里只是当作服务注册中心说了下简单的功能,欢迎自行摸索。