day02-项目搭建+consul

news/2024/10/6 3:37:40/文章来源:https://www.cnblogs.com/yuqiu2004/p/18288361

1 RestTemplate

RestTemplate提供了多种便捷访问远程Http服务的方法,

是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集

官网地址:https://docs.spring.io/spring-framework/docs/6.0.11/javadoc-api/org/springframework/web/client/RestTemplate.html

常用接口:

  • getForObject:返回对象为响应体中数据转化成的对象,基本上可以理解为Json

  • getForEntity:返回对象为ResponseEntity对象,包含了响应中的一些重要信息,比如响应头、响应状态码、响应体等

  • postForObject

  • postForEntity

GET请求方法:

<T> T getForObject(String url, Class responseType, Object... uriVariables);

<T> T getForObject(String url, Class responseType, Map<String, ?> uriVariables);

<T> T getForObject(URI url, Class responseType);

<T> ResponseEntity getForEntity(String url, Class responseType, Object... uriVariables);

<T> ResponseEntity getForEntity(String url, Class responseType, Map<String, ?> uriVariables);

<T> ResponseEntity getForEntity(URI var1, Class responseType);

POST请求方法:

<T> T postForObject(String url, @Nullable Object request, Class responseType, Object... uriVariables);

<T> T postForObject(String url, @Nullable Object request, Class responseType, Map<String, ?> uriVariables);

<T> T postForObject(URI url, @Nullable Object request, Class responseType);

<T> ResponseEntity postForEntity(String url, @Nullable Object request, Class responseType, Object... uriVariables);

<T> ResponseEntity postForEntity(String url, @Nullable Object request, Class responseType, Map<String, ?> uriVariables);

<T> ResponseEntity postForEntity(URI url, @Nullable Object request, Class responseType);

通过容器注入编写配置类:

@Configuration
public class RestTemplateConfig
{@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}
}

2 Idea中调整Java语法版本

project structure -> modules -> sources -> language level

3 Consul

  1. 为什么要使用consul

    微服务所在的IP地址和端口号硬编码存在非常多的问题:IP和端口变化、无法实现负载均衡、维护复杂

    应该怎么做:服务名固定,路径不固定

  2. 什么是Consul

    开源的分布式服务发现与配置管理系统,由HashiCorp公司用Go语言开发

  3. consul安装、下载和运行

    • 下载:http://consul.io -> downloads -> 选择相应的版本
    • 安装:解压即可
    • 运行:在根路径下输入命令consul agent -dev
    • 验证:访问http://localhost:8500
  4. 注册

    1. 启动consul

    2. 添加依赖如下

      <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId>//用于排除冲突提示</exclusion></exclusions>
      </dependency>
      
    3. 修改配置

      spring:application:name: cloud-consumer-order####Spring Cloud Consul for Service Discoverycloud:consul:host: localhostport: 8500discovery:service-name: ${spring.application.name}prefer-ip-address: true #优先使用服务ip进行注册
      
    4. 在RestTemplateConfig的方法上添加负载均衡的注解

      @Configuration
      public class RestTemplateConfig
      {@Bean@LoadBalanced // 开启负载均衡public RestTemplate restTemplate(){return new RestTemplate();}
      }
      

4 三个注册中心的异同点

前置概念 | 评判标准:CAP,即Consistency强一致性、Availability可用性、Partition tolerance分区容错性

  • AP架构(Eureka)

    • 当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。

    • 当数据出现不一致时,虽然A, B上的注册信息不完全相同,但每个Eureka节点依然能够正常对外提供服务,这会出现查询服务信息时如果请求A查不到,但请求B就能查到。如此保证了可用性但牺牲了一致性结论:违背了一致性C的要求,只满足可用性和分区容错,即AP

  • CP架构(Zookeeper/Consul)

    • 当网络分区出现后,为了保证一致性,就必须拒接请求,否则无法保证一致性,Consul 遵循CAP原理中的CP原则,保证了强一致性和分区容错性,且使用的是Raft算法,比zookeeper使用的Paxos算法更加简单。虽然保证了强一致性,但是可用性就相应下降了,例如服务注册的时间会稍长一些,因为 Consul 的 raft 协议要求必须过半数的节点都写入成功才认为注册成功 ;在leader挂掉了之后,重新选举出leader之前会导致Consul 服务不可用。结论:违背了可用性A的要求,只满足一致性和分区容错,即CP

Eureka只能进行服务注册,而Consul不仅可以注册还可以分布式配置

5 consul分布式配置

  1. 添加依赖

    		<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-config</artifactId><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>
    
  2. 新增配置 bootstrap.yml

    • 区别:

      • application.yml 用户级的资源配置项
      • bootstrap.yml 系统级的 优先级更高
    • spring:application:name: cloud-payment-service####Spring Cloud Consul for Service Discoverycloud:consul:host: localhostport: 8500discovery:service-name: ${spring.application.name}config:profile-separator: '-' # default value is ','format: yaml
      
    • 将相关内容从application.yml中删去

  3. Consul添加配置

    1. Kay/Value 下创建文件夹config(创建时以/结尾识别为文件夹),然后建立三个子文件夹**-prod、**-dev、**分别表示发布环境、开发环境、默认环境,**表示服务名
    2. 接着在各个子文件夹中添加data配置文件 配置相关信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/739727.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何恢复SSD NVME固态硬盘的数据恢复

一、使用数据恢复软件 操作步骤(以EaseUS Data Recovery Wizard为例): 安装软件:从EaseUS官网或其他可靠来源下载并安装EaseUS Data Recovery Wizard。 连接固态硬盘:将SSD NVMe固态硬盘连接到电脑上,并确保系统能够识别。 启动软件并选择恢复选项:打开EaseUS Data Reco…

raid5存储池已损毁硬盘数据

RAID 5存储池中的硬盘数据损毁是一个复杂的问题,因为它涉及到数据的冗余、存储方式以及恢复策略。 一、RAID 5的工作原理 RAID 5是一种使用条带化和奇偶校验技术的存储解决方案,它至少需要三个硬盘来构建。在这种配置中,数据和奇偶校验信息被分布在所有硬盘上,以提供数据冗…

SSD NVME固态 硬盘 数据恢复

SSD NVMe固态硬盘数据恢复是一个复杂但并非不可能的任务,以下是一些建议的方法和步骤: 一、了解数据恢复的基本原理 数据恢复的基本原理在于,即使文件在操作系统中被删除或格式化,其实际数据在硬盘的物理介质上可能仍然存在,只是被标记为可覆盖。 SSD NVMe固态硬盘与传统的…

磁盘阵列中raid5坏了一个硬盘数据恢复

RAID5数据恢复步骤包括备份数据、更换故障硬盘、重建RAID阵列和数据恢复注意事项。在恢复过程中,需遵循正确的步骤并保持冷静,不要尝试自行解决复杂的数据恢复问题,以免造成不可逆转的数据损失。完成恢复后,应进行完整性检查和验证。 一、概述 RAID 5是一种存储配置,它将多…

电脑开机检测不到硬盘怎么办 电脑检测不到硬盘问题解决

电脑开机检测不到硬盘,无法进入系统或者显示“Reboot and Select proper Boot device”等错误信息。这种情况可能会导致我们的数据丢失或者无法使用电脑。 一、电脑检测不到硬盘的可能原因 电脑检测不到硬盘的原因主要有以下几种:1、硬盘连接线松动或损坏:硬盘是通过SATA线或…

CentOS 7 下载 网络配置 ssh配置 JDK配置 Python3配置 Git配置 nvm配置 防火墙配置

背景 CentOS 8系统2021年12月31日已停止维护服务,CentOS 7系统将于2024年06月30日停止维护服务。CentOS官方不再提供CentOS 9及后续版本,不再支持新的软件和补丁更新。 所以我们如果要安装服务器操作系统就需要安装centos7。这里我是用虚拟机安装的centos7mini版,mini版本是…

IBM服务器raid1数据恢复

IBM服务器RAID1数据恢复是一个相对复杂的过程,因为RAID1涉及数据的镜像和冗余,但一旦数据丢失,恢复的可能性仍然存在。以下是一些建议的步骤和注意事项,以帮助您进行IBM服务器RAID1数据恢复: 一、停止使用受影响的服务器 一旦发现数据丢失,首要任务是停止使用受影响的服务…

服务器刷新BIOS后死机

服务器刷新BIOS后死机是一个比较常见的问题,可能由多种原因引起。 一、原因分析 BIOS文件问题: 刷新的BIOS文件可能本身就是坏的,或者与服务器硬件不兼容。 BIOS版本选择不当,也可能导致兼容性问题。 刷新过程问题: 刷新过程中突然断电或操作不当,可能导致BIOS损坏。 硬件…

其他计算机系统基础知识

计算机语言计算机语言是指用于人与计算机之间交流的一种语言,是人与计算机之间传递信息的媒介。计算机语言主要由一套指令组成,而这种指令一般包括表达式、流程控制和集合三大部分内容。表达式又包含变量、常量、字面量和运算符。 流程控制有分支、循环、函数和异常。 集合包…

函数,调试,循环,头文件

1.关于函数 作用:避免代码重复 可以方便维护,因为当多个地方需要用到同样的代码时,如果要做出修改只需要改函数就能整体修改。 函数通常都会有返回值,什么类型的函数返回什么样的类型的值 函数通常分为函数声明和函数参数通常声明放在头文件中 函数定义发在C++文件中 这样做…

ENVI无缝镶嵌、拼接栅格数据的方法

本文介绍基于ENVI软件,利用“Seamless Mosaic”工具实现栅格遥感影像无缝镶嵌的操作~本文介绍基于ENVI软件,利用“Seamless Mosaic”工具实现栅格遥感影像无缝镶嵌的操作。在遥感图像镶嵌拼接:ENVI的Pixel Based Mosaicking工具操作方法这篇文章中,我们介绍了在ENVI软件中通…