目录
Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发。
它提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。能够很容易和springcloud等微服务框架集成。

如果还未配置consul环境的同学可以移步我的另外一篇文章喔,那里对如何在Windows环境下安装consul有着很详细的介绍~

在cloud2022项目中的pom.xml导入springcloud依赖和一些常规依赖
- <?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>
-
- <groupId>com.canrioyuan</groupId>
- <artifactId>cloud2022</artifactId>
- <version>1.0-SNAPSHOT</version>
- <packaging>pom</packaging>
- <!--父工程的打包方式必须为pom:表示父工程不写代码,只在父工程的pom.xml文件中使用配置版本,
- 子工程的打包方式才是war:发布在服务器上的工程,如网站或者是服务,maven会自动帮助我们指明这个工程为web工程
- jar:默认打程jar工程,相当于打包-->
-
- <modules>
- <module>cloud-provider-payment8001</module>
- <module>cloud-consumer-order80</module>
- <module>cloud-api-commons</module>
- <module>cloud-eureka-server7001</module>
- <module>cloud-eureka-server7002</module>
- <module>cloud-provider-payment8002</module>
- <module>cloud-provider-payment8004</module>
- </modules>
-
- <!-- 统一管理jar包版本 -->
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <maven.compiler.source>1.8</maven.compiler.source>
- <maven.compiler.target>1.8</maven.compiler.target>
- <junit.version>4.12</junit.version>
- <log4j.version>1.2.17</log4j.version>
- <lombok.version>1.18.24</lombok.version>
- <mysql.version>8.0.21</mysql.version>
- <druid.version>1.1.21</druid.version>
- <mybatis-plus.spring.boot.version>3.5.1</mybatis-plus.spring.boot.version>
- </properties>
-
- <!-- 子模块继承之后,提供作用:锁定版本+子module不用写groupId和version -->
- <dependencyManagement>
- <!--只是声明依赖,并不实现引入-->
- <dependencies>
- <!--spring boot 2.2.2-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-dependencies</artifactId>
- <version>2.2.2.RELEASE</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- <!--spring cloud Hoxton.SR1-->
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-dependencies</artifactId>
- <version>Hoxton.SR1</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- <!--spring cloud alibaba 2.1.0.RELEASE-->
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-alibaba-dependencies</artifactId>
- <version>2.1.0.RELEASE</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>${mysql.version}</version>
- </dependency>
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid-spring-boot-starter</artifactId>
- <version>${druid.version}</version>
- </dependency>
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter</artifactId>
- <version>${mybatis-plus.spring.boot.version}</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>${junit.version}</version>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>${log4j.version}</version>
- </dependency>
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <version>${lombok.version}</version>
- <optional>true</optional>
- </dependency>
-
- </dependencies>
- </dependencyManagement>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <configuration>
- <fork>true</fork>
- <addResources>true</addResources>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
- </project>
-
-
-
-
-
-

- <!--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>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>
- #consul服务端口号
- server:
- port: 8006
-
- spring:
- application:
- name: consul-provider-payment #服务名字
- #consul注册中心地址
- cloud:
- consul:
- host: localhost
- port: 8500
- discovery:
- #hostname: 127.0.0.1
- service-name: ${spring.application.name}
-
-
-
- package com.canrioyuan;
-
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
-
- @SpringBootApplication
- @EnableDiscoveryClient //该注解用于使用consul和zookeeper时作为注册中心提供服务
- public class PaymentMain8006 {
- public static void main(String[] args) {
- SpringApplication.run(PaymentMain8006.class,args);
- }
- }
- package com.canrioyuan.controller;
-
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- import java.util.UUID;
-
- @RestController
- @Slf4j
- public class PaymentController {
-
- @Value("${sever.port}")
- private String serverPort;
-
- @GetMapping(value="/payment/consul")
- public String paymentConsul(){
- return "springcloud with consul"+serverPort+"\t"+ UUID.randomUUID().toString();
- }
- }
-
在命令行端口输入consul agent -dev,启动consul
consul agent -dev
启动成功后如下图所示

运行成功后如下图所示:

访问成功后如下图所示

可以看到consul的web端中已经对服务提供者的服务进行注册


- <!--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>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>
- ###consul服务端口号
- server:
- port: 80
-
- spring:
- application:
- name: cloud-consumer-order
- ####consul注册中心地址
- cloud:
- consul:
- host: localhost
- port: 8500
- discovery:
- #hostname: 127.0.0.1
- service-name: ${spring.application.name}
-
- package com.canrioyuan;
-
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
-
- @SpringBootApplication
- @EnableDiscoveryClient //该注解用于向使用consul或者zookeeper作为注册中心时注册服务
- public class OrderConsulMain80 {
- public static void main(String[] args) {
- SpringApplication.run(OrderConsulMain80.class, args);
- }
- }
-
-
-
-
-
-
-
- package com.canrioyuan.controller;
-
- import org.springframework.cloud.client.loadbalancer.LoadBalanced;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.web.client.RestTemplate;
-
- @Configuration
- public class ApplicationContextConfig {
- /**
- * RestTemplate是Spring提供的用于访问Rest服务的客户端,
- * 它提供了很多可以方便访问远程http服务的方法,这些方法可以帮助开发人员减少编写客户端代码的工作量。
- * @return
- */
- @Bean //将RestTemplate注册到容器中
- /**
- * @LoadBalanced注解,我们在使用这个注解后,就能在调用其他微服务的时候,通过服务实例名称就能进行调用其他的微服务,
- * 而不是直接把要调用的微服务的ip和端口号写死在代码当中。
- */
- @LoadBalanced
- public RestTemplate getRestTemplate(){
- return new RestTemplate();
- }
- }
- package com.canrioyuan.controller;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.client.RestTemplate;
-
- @RestController
- public class OrderConsulController
- {
- public static final String INVOKE_URL = "http://cloud-provider-payment"; //consul-provider-payment
-
- @Autowired
- private RestTemplate restTemplate;
-
- @GetMapping(value = "/consumer/payment/consul")
- public String paymentInfo()
- {
- String result = restTemplate.getForObject(INVOKE_URL+"/payment/consul", String.class);
- System.out.println("消费者调用支付服务(consule)--->result:" + result);
- return result;
- }
- }
-
-
-
-

访问成功后如下图所示

可以看到我们的消费者模块和服务提供者模块都已经被注册进Services中

