SpringCloud02_consul概述、功能及下载、服务注册与发现、配置与刷新

①. Euraka为什么被废弃

  • ①. Eureka停更进维
    在这里插入图片描述
  • ②. Eureka对初学者不友好,下图为自我保护机制
    在这里插入图片描述
  • ③. 阿里巴巴Nacos的崛起
    在这里插入图片描述

②. consul简介、如何下载

在这里插入图片描述

  • ③. HashiCorp是一家非常知名的基础软件提供商,很多人可能没听过它的名字,但是其旗下的6款主流软件,Terraform、Consul、Vagrant、Nomad、Vault,Packer 相信不少程序员都听说或使用过,尤其是Consul使用者不尽其数。截止目前为止,从HashiCorp 官网上的声明来看,开源项目其实还是“安全”的,被禁用的只是Vault企业版(并且原因是Vault产品目前使用的加密算法在中国不符合法规,另一方面是美国出口管制法在涉及加密相关软件上也有相应规定。因此这两项原因使得HashiCorp不得不在声明中说明风险)而非其他所有开源产品(Terraform、Consul等)。因此,大家可以暂时放下心来,放心使用!
    在这里插入图片描述

③. consul功能及下载

  • ①. consul功能
  1. 服务发现:提供HTTP和DNS两种发现方式。
  2. 健康监测:支持多种方式,HTTP、TCP、Docker、Shell脚本定制化监控
  3. KV存储:Key、Value的存储方式
  4. 多数据中心:Consul支持多数据中心
  5. 可视化Web界面
  • ②. consul下载地址

  • ③. consul如何玩?

  • ④. 两大作用:服务发现和配置中心
    在这里插入图片描述

  • ⑤. 官网下载
    在这里插入图片描述

  • ⑥. 下载完成后只有一个consul.exe文件,对应全路径下查看版本号信息
    在这里插入图片描述

  • ⑦. 使用开发模式启动 - consul agent -dev
    在这里插入图片描述

  • ⑧. 通过以下地址可以访问Consul的首页:http://localhost:8500
    在这里插入图片描述

④. 服务注册与发现 - 8001改造

	<!--SpringCloud consul discovery -->
	<dependency>
	    <groupId>org.springframework.cloud</groupId>
	    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
	</dependency>
  • ③. yaml文件配置
spring:
  ####Spring Cloud Consul for Service Discovery
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}
  • ④. 使用@EnableDiscoveryClient注解开启
@SpringBootApplication
@MapperScan("com.atguigu.cloud.mapper") 
@EnableDiscoveryClient
public class Main8001{
    public static void main(String[] args){
        SpringApplication.run(Main8001.class,args);
    }
}
  • ⑤. 启动8001并查看consul控制台
    在这里插入图片描述

⑤. 服务注册与发现 - 80改造

  • ①. pom文件
 <!--SpringCloud consul discovery -->
 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-consul-discovery</artifactId>
 </dependency>
  • ②. yaml文件
server:
  port: 80
spring:
  application:
    name: cloud-consumer-order
  ####Spring Cloud Consul for Service Discovery
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        prefer-ip-address: true #优先使用服务ip进行注册
        service-name: ${spring.application.name}
  • ③. 主启动类 - @EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient //该注解用于向使用consul为注册中心时注册服务
public class Main80{
    public static void main(String[] args){
        SpringApplication.run(Main80.class,args);
    }
}
  • ④. Controller层改造地址为服务地址,进行远程调用8001服务
@RestController
public class OrderController{
    //public static final String PaymentSrv_URL = "http://localhost:8001";//先写死,硬编码

    public static final String PaymentSrv_URL = "http://cloud-payment-service";//服务注册中心上的微服务名称

    @Autowired
    private RestTemplate restTemplate;

    /**
     * 一般情况下,通过浏览器的地址栏输入url,发送的只能是get请求
     * 我们模拟消费者发送get请求,but底层调用post方法,客户端消费者参数PayDTO可以不添加@RequestBody
     * @param payDTO
     * @return
     */
    @GetMapping("/consumer/pay/add")
    public ResultData addOrder(PayDTO payDTO){
        return restTemplate.postForObject(PaymentSrv_URL + "/pay/add",payDTO,ResultData.class);
    }

    // 删除+修改操作作为家庭作业,O(∩_∩)O。。。。。。。

    @GetMapping("/consumer/pay/get/{id}")
    public ResultData getPayInfo(@PathVariable Integer id){
        return restTemplate.getForObject(PaymentSrv_URL + "/pay/get/"+id, ResultData.class, id);
    }
}
  • ⑤. 启动80并查看consul控制台
    在这里插入图片描述
  • ⑥. 访问测试地址:http://localhost/consumer/pay/get/10
    在这里插入图片描述
  • ⑦. 配置修改RestTemplateConfig
@Configuration
public class RestTemplateConfig{
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
  • ⑧. 三个注册中心异同点
    在这里插入图片描述

⑥. 服务配置与刷新Refresh

<!--SpringCloud consul config-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
  • ③. yaml配置规则说明
    在这里插入图片描述
  • ④. 新增配置文件bootstrap.yml
    在这里插入图片描述
spring:
  application:
    name: cloud-payment-service
    ####Spring Cloud Consul for Service Discovery
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}
      config:
        profile-separator: '-' # default value is ",",we update '-'
        format: YAML

# config/cloud-payment-service/data
#       /cloud-payment-service-dev/data
#       /cloud-payment-service-prod/data
  • ⑤. application.yml
server:
  port: 8001

# ==========applicationName + druid-mysql8 driver===================
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/db2024?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
    username: root
    password: 123456
  profiles:
    active: dev # 多环境配置加载内容dev/prod,不写就是默认default配置

# ========================mybatis===================
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.xiaozhi.cloud.entities
  configuration:
    map-underscore-to-camel-case: true
  • ⑥. consul服务器key/value配置填写
  1. 参考规则
    在这里插入图片描述
  2. 创建config文件夹,以/结尾
    在这里插入图片描述
  3. config文件夹下分别创建其它3个文件夹,以/结尾
    在这里插入图片描述
  4. 上述3个文件夹下分别创建data内容,data不再是文件夹
    在这里插入图片描述
  • ⑦. 进行代码测试:http://localhost:8001/pay/get/info
@Value("${server.port}")
private String port;

@GetMapping(value = "/pay/get/info")
private String getInfoByConsul(@Value("${other.info}") String otherInfo){
    return "otherInfo: "+otherInfo+"\t"+"port: "+port;
}

在这里插入图片描述

  • ⑧. 接上一步,我们在consul的dev配置分支修改了内容马上访问,结果无效
    在这里插入图片描述
  • ⑨. 动态刷新案例步骤,修改数据后,可以正常的获取到值
  1. @RefreshScope主启动类添加
  2. bootstrap.yml修改下(只为教学实际别改) - spring.cloud.consul.config.watch.wait-time
    在这里插入图片描述
    在这里插入图片描述
  • ⑩. 截止到这,服务配置和动态刷新全部通过,假设我重启Consul,之前的配置还在吗?
    在这里插入图片描述

相关推荐

  1. 服务发现注册:EurekaConsul

    2024-07-15 15:12:04       21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 15:12:04       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 15:12:04       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 15:12:04       62 阅读
  4. Python语言-面向对象

    2024-07-15 15:12:04       72 阅读

热门阅读

  1. php file_get_contents https 请求 伪造user_agent

    2024-07-15 15:12:04       22 阅读
  2. HTML5 Input 验证身份证

    2024-07-15 15:12:04       25 阅读
  3. 使用jsencrypt在web前端对字符串进行Ras加密

    2024-07-15 15:12:04       23 阅读