• SpingCloud整合Consul实现服务注册并访问


    目录

    SpingCloud整合Consul实现服务注册

    前言

    一.环境准备

    二.编写服务提供者模块

    三.测试服务提供者模块是否搭建成功

    四.编写服务消费者模块

    五.测试服务消费者模块是否搭建成功


    SpingCloud整合Consul实现服务注册

    前言

    Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发。

    它提供了微服务系统中的服务治理配置中心控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。能够很容易和springcloud等微服务框架集成。

     

    一.环境准备

    1.Windows环境下的Consul

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

    Window环境下Consul的介绍与安装教程(超详细!!)https://blog.csdn.net/weixin_47025166/article/details/125502753?spm=1001.2014.3001.5502

     

    2.一个简单的springcloud父项目环境 

     

    cloud2022项目中的pom.xml导入springcloud依赖和一些常规依赖

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0</modelVersion>
    5. <groupId>com.canrioyuan</groupId>
    6. <artifactId>cloud2022</artifactId>
    7. <version>1.0-SNAPSHOT</version>
    8. <packaging>pom</packaging>
    9. <!--父工程的打包方式必须为pom:表示父工程不写代码,只在父工程的pom.xml文件中使用配置版本,
    10. 子工程的打包方式才是war:发布在服务器上的工程,如网站或者是服务,maven会自动帮助我们指明这个工程为web工程
    11. jar:默认打程jar工程,相当于打包-->
    12. <modules>
    13. <module>cloud-provider-payment8001</module>
    14. <module>cloud-consumer-order80</module>
    15. <module>cloud-api-commons</module>
    16. <module>cloud-eureka-server7001</module>
    17. <module>cloud-eureka-server7002</module>
    18. <module>cloud-provider-payment8002</module>
    19. <module>cloud-provider-payment8004</module>
    20. </modules>
    21. <!-- 统一管理jar包版本 -->
    22. <properties>
    23. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    24. <maven.compiler.source>1.8</maven.compiler.source>
    25. <maven.compiler.target>1.8</maven.compiler.target>
    26. <junit.version>4.12</junit.version>
    27. <log4j.version>1.2.17</log4j.version>
    28. <lombok.version>1.18.24</lombok.version>
    29. <mysql.version>8.0.21</mysql.version>
    30. <druid.version>1.1.21</druid.version>
    31. <mybatis-plus.spring.boot.version>3.5.1</mybatis-plus.spring.boot.version>
    32. </properties>
    33. <!-- 子模块继承之后,提供作用:锁定版本+子module不用写groupId和version -->
    34. <dependencyManagement>
    35. <!--只是声明依赖,并不实现引入-->
    36. <dependencies>
    37. <!--spring boot 2.2.2-->
    38. <dependency>
    39. <groupId>org.springframework.boot</groupId>
    40. <artifactId>spring-boot-dependencies</artifactId>
    41. <version>2.2.2.RELEASE</version>
    42. <type>pom</type>
    43. <scope>import</scope>
    44. </dependency>
    45. <!--spring cloud Hoxton.SR1-->
    46. <dependency>
    47. <groupId>org.springframework.cloud</groupId>
    48. <artifactId>spring-cloud-dependencies</artifactId>
    49. <version>Hoxton.SR1</version>
    50. <type>pom</type>
    51. <scope>import</scope>
    52. </dependency>
    53. <!--spring cloud alibaba 2.1.0.RELEASE-->
    54. <dependency>
    55. <groupId>com.alibaba.cloud</groupId>
    56. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    57. <version>2.1.0.RELEASE</version>
    58. <type>pom</type>
    59. <scope>import</scope>
    60. </dependency>
    61. <dependency>
    62. <groupId>mysql</groupId>
    63. <artifactId>mysql-connector-java</artifactId>
    64. <version>${mysql.version}</version>
    65. </dependency>
    66. <dependency>
    67. <groupId>com.alibaba</groupId>
    68. <artifactId>druid-spring-boot-starter</artifactId>
    69. <version>${druid.version}</version>
    70. </dependency>
    71. <dependency>
    72. <groupId>com.baomidou</groupId>
    73. <artifactId>mybatis-plus-boot-starter</artifactId>
    74. <version>${mybatis-plus.spring.boot.version}</version>
    75. </dependency>
    76. <dependency>
    77. <groupId>junit</groupId>
    78. <artifactId>junit</artifactId>
    79. <version>${junit.version}</version>
    80. </dependency>
    81. <dependency>
    82. <groupId>log4j</groupId>
    83. <artifactId>log4j</artifactId>
    84. <version>${log4j.version}</version>
    85. </dependency>
    86. <dependency>
    87. <groupId>org.projectlombok</groupId>
    88. <artifactId>lombok</artifactId>
    89. <version>${lombok.version}</version>
    90. <optional>true</optional>
    91. </dependency>
    92. </dependencies>
    93. </dependencyManagement>
    94. <build>
    95. <plugins>
    96. <plugin>
    97. <groupId>org.springframework.boot</groupId>
    98. <artifactId>spring-boot-maven-plugin</artifactId>
    99. <configuration>
    100. <fork>true</fork>
    101. <addResources>true</addResources>
    102. </configuration>
    103. </plugin>
    104. </plugins>
    105. </build>
    106. </project>

    二.编写服务提供者模块

    1.在cloud2022下创建一个cloud-providerconsul-payment8006作为服务提供者

     2.在pom.xml文件中添加常规依赖和consul和一些常规依赖

    1. <!--SpringCloud consul-server -->
    2. <dependency>
    3. <groupId>org.springframework.cloud</groupId>
    4. <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    5. </dependency>
    6. <!-- SpringBoot整合Web组件 -->
    7. <dependency>
    8. <groupId>org.springframework.boot</groupId>
    9. <artifactId>spring-boot-starter-web</artifactId>
    10. </dependency>
    11. <!--性能监控-->
    12. <dependency>
    13. <groupId>org.springframework.boot</groupId>
    14. <artifactId>spring-boot-starter-actuator</artifactId>
    15. </dependency>
    16. <!--热部署-->
    17. <dependency>
    18. <groupId>org.springframework.boot</groupId>
    19. <artifactId>spring-boot-devtools</artifactId>
    20. <scope>runtime</scope>
    21. <optional>true</optional>
    22. </dependency>
    23. <!--简化实体类开发-->
    24. <dependency>
    25. <groupId>org.projectlombok</groupId>
    26. <artifactId>lombok</artifactId>
    27. <optional>true</optional>
    28. </dependency>
    29. <dependency>
    30. <groupId>org.springframework.boot</groupId>
    31. <artifactId>spring-boot-starter-test</artifactId>
    32. <scope>test</scope>
    33. </dependency>

     

    3.编写application.yaml

    1. #consul服务端口号
    2. server:
    3. port: 8006
    4. spring:
    5. application:
    6. name: consul-provider-payment #服务名字
    7. #consul注册中心地址
    8. cloud:
    9. consul:
    10. host: localhost
    11. port: 8500
    12. discovery:
    13. #hostname: 127.0.0.1
    14. service-name: ${spring.application.name}

     

    4.编写主启动类PaymentMain8006

    1. package com.canrioyuan;
    2. import org.springframework.boot.SpringApplication;
    3. import org.springframework.boot.autoconfigure.SpringBootApplication;
    4. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    5. @SpringBootApplication
    6. @EnableDiscoveryClient //该注解用于使用consul和zookeeper时作为注册中心提供服务
    7. public class PaymentMain8006 {
    8. public static void main(String[] args) {
    9. SpringApplication.run(PaymentMain8006.class,args);
    10. }
    11. }

     

    5.编写PaymentController

    1. package com.canrioyuan.controller;
    2. import lombok.extern.slf4j.Slf4j;
    3. import org.springframework.beans.factory.annotation.Value;
    4. import org.springframework.web.bind.annotation.GetMapping;
    5. import org.springframework.web.bind.annotation.RestController;
    6. import java.util.UUID;
    7. @RestController
    8. @Slf4j
    9. public class PaymentController {
    10. @Value("${sever.port}")
    11. private String serverPort;
    12. @GetMapping(value="/payment/consul")
    13. public String paymentConsul(){
    14. return "springcloud with consul"+serverPort+"\t"+ UUID.randomUUID().toString();
    15. }
    16. }

    三.测试服务提供者模块是否搭建成功

    1.运行consul

    在命令行端口输入consul agent -dev,启动consul

    consul agent -dev

    启动成功后如下图所示 

    2.运行PaymentMain8006

    运行成功后如下图所示: 

    3.访问  http://localhost:8006/payment/consul

    访问成功后如下图所示

    4.访问  http://localhost:8500

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

    四.编写服务消费者模块

    1.在cloud2022下创建一个cloud-consumerconsul-order80作为服务消费者      

    2.在pom.xml文件中添加常规依赖和consul和一些常规依赖

    1. <!--SpringCloud consul-server -->
    2. <dependency>
    3. <groupId>org.springframework.cloud</groupId>
    4. <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    5. </dependency>
    6. <!-- SpringBoot整合Web组件 -->
    7. <dependency>
    8. <groupId>org.springframework.boot</groupId>
    9. <artifactId>spring-boot-starter-web</artifactId>
    10. </dependency>
    11. <!--性能监控-->
    12. <dependency>
    13. <groupId>org.springframework.boot</groupId>
    14. <artifactId>spring-boot-starter-actuator</artifactId>
    15. </dependency>
    16. <!--热部署-->
    17. <dependency>
    18. <groupId>org.springframework.boot</groupId>
    19. <artifactId>spring-boot-devtools</artifactId>
    20. <scope>runtime</scope>
    21. <optional>true</optional>
    22. </dependency>
    23. <!--简化实体类开发-->
    24. <dependency>
    25. <groupId>org.projectlombok</groupId>
    26. <artifactId>lombok</artifactId>
    27. <optional>true</optional>
    28. </dependency>
    29. <dependency>
    30. <groupId>org.springframework.boot</groupId>
    31. <artifactId>spring-boot-starter-test</artifactId>
    32. <scope>test</scope>
    33. </dependency>

     

     3.编写application.yaml

    1. ###consul服务端口号
    2. server:
    3. port: 80
    4. spring:
    5. application:
    6. name: cloud-consumer-order
    7. ####consul注册中心地址
    8. cloud:
    9. consul:
    10. host: localhost
    11. port: 8500
    12. discovery:
    13. #hostname: 127.0.0.1
    14. service-name: ${spring.application.name}

     

    4.编写主启动类OrderConsulMain80

    1. package com.canrioyuan;
    2. import org.springframework.boot.SpringApplication;
    3. import org.springframework.boot.autoconfigure.SpringBootApplication;
    4. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    5. @SpringBootApplication
    6. @EnableDiscoveryClient //该注解用于向使用consul或者zookeeper作为注册中心时注册服务
    7. public class OrderConsulMain80 {
    8. public static void main(String[] args) {
    9. SpringApplication.run(OrderConsulMain80.class, args);
    10. }
    11. }

     

    5.编写配置类ApplicationContextConfig(用于注册RestTemplate

    1. package com.canrioyuan.controller;
    2. import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    3. import org.springframework.context.annotation.Bean;
    4. import org.springframework.context.annotation.Configuration;
    5. import org.springframework.web.client.RestTemplate;
    6. @Configuration
    7. public class ApplicationContextConfig {
    8. /**
    9. * RestTemplate是Spring提供的用于访问Rest服务的客户端,
    10. * 它提供了很多可以方便访问远程http服务的方法,这些方法可以帮助开发人员减少编写客户端代码的工作量。
    11. * @return
    12. */
    13. @Bean //将RestTemplate注册到容器中
    14. /**
    15. * @LoadBalanced注解,我们在使用这个注解后,就能在调用其他微服务的时候,通过服务实例名称就能进行调用其他的微服务,
    16. * 而不是直接把要调用的微服务的ip和端口号写死在代码当中。
    17. */
    18. @LoadBalanced
    19. public RestTemplate getRestTemplate(){
    20. return new RestTemplate();
    21. }
    22. }

     

    6.编写OrderConsulController

    1. package com.canrioyuan.controller;
    2. import org.springframework.beans.factory.annotation.Autowired;
    3. import org.springframework.web.bind.annotation.GetMapping;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import org.springframework.web.bind.annotation.RestController;
    6. import org.springframework.web.client.RestTemplate;
    7. @RestController
    8. public class OrderConsulController
    9. {
    10. public static final String INVOKE_URL = "http://cloud-provider-payment"; //consul-provider-payment
    11. @Autowired
    12. private RestTemplate restTemplate;
    13. @GetMapping(value = "/consumer/payment/consul")
    14. public String paymentInfo()
    15. {
    16. String result = restTemplate.getForObject(INVOKE_URL+"/payment/consul", String.class);
    17. System.out.println("消费者调用支付服务(consule)--->result:" + result);
    18. return result;
    19. }
    20. }

    五.测试服务消费者模块是否搭建成功

    1.启动该服务消费者模块

    2.访问 http://localhost/consumer/payment/consul

    访问成功后如下图所示

     3.访问 http://localhost:8500

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

    至此,我们SpingCloud整合Consul实现服务注册的教程就结束啦~

    感谢您的阅读,希望我的文章能给你带来帮助!!!

  • 相关阅读:
    ChatGPT 制作转化率分析漏斗图的制作
    【C++】运算符重载 ⑧ ( 左移运算符重载 | 友元函数 / 成员函数 实现运算符重载 | 类对象 使用 左移运算符 )
    【VS2022】调试
    统信UOS提示系统磁盘空间不足,磁盘扩容
    Python绘图布局设计
    第10讲:Vue组件的定义与注册
    Chrome的V8引擎 和操作系统交互介绍
    量化风控的贷前实操课—详解的规则调优
    Kafka的docker安装
    Shell 脚本学习
  • 原文地址:https://blog.csdn.net/weixin_47025166/article/details/125506182