最大感受:
spring cloud无非是将spring boot中的各个工作模块拆分成独立的小spring boot,各个模块之间,不再是通过导包什么的,调用而是通过网路进行各个模块之间的调用
工具一:RestTemplate
在Java代码中发送HTTP请求,可配合spring mvc实现类似于前端的请求转发一样的效果
步骤一:导入依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
步骤二:编写配置类
config/RestTemplateConfig
@Configuration public class RestTemplateConfig {@Bean@LoadBalanced//实现负载均衡public RestTemplate restTemplate(){return new RestTemplate();} }
步骤三:发送HTTP请求
@RestController @Slf4j public class OrderController {public static final String PaymentSrv_URL="http://localhost:8001";@Resourceprivate RestTemplate restTemplate;@GetMapping("/consumer/pay/add")public ResultData addOrder(PayDTO payDTO){System.out.println(payDTO);return restTemplate.postForObject(PaymentSrv_URL + "/pay/add",payDTO,ResultData.class);}从“/consumer/pay/add”接收到的数据,再通过restTemplate中的方法发送别的请求
技术栈一: Consul
场景:
微服务所在的IP地址和端口号硬编码到订单微服务中,会存在非常多的问题
(1)如果订单微服务和支付微服务的IP地址或者端口号发生了变化,则支付微服务将变得不可用,需要同步修改订单微服务中调用支付微服务的IP地址和端口号。
(2)如果系统中提供了多个订单微服务和支付微服务,则无法实现微服务的负载均衡功能。
(3)如果系统需要支持更高的并发,需要部署更多的订单微服务和支付微服务,硬编码订单微服务则后续的维护会变得异常复杂。
所以,在微服务开发的过程中,需要引入服务治理功能,实现微服务之间的动态注册与发现。
步骤一:导入依赖
<!--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><!--SpringCloud consul discovery --> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency>
步骤二:编写配置文件
基础知识:
一个项目中通常存在application.yml文件用于项目的参数配置,
但同时还存在bootstrap.yml文件也可以进行参数配置
bootstrap.yml通常用于配置全局的通用的参数,优先级较高
application.yml通常用于配置局部的参数,优先级较低
可共存
bootstrap.ymlspring: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 ",",we update '-'format: YAML# config/cloud-payment-service/data# /cloud-payment-service-dev/data# /cloud-payment-service-prod/data
application.ymlserver:port: 8001# ==========applicationName + druid-mysql8 driver===================
spring:profiles://选择要从consul中读取的文件active: dev # 多环境配置加载内容dev/prod,不写就是默认default配置# ========================mybatis===================
mybatis:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.atguigu.cloud.entitiesconfiguration:map-underscore-to-camel-case: true
数据永久化:consul数据持久化_consul配置持久化-CSDN博客
步骤三:启动服务
cmd命令行: consul agent -dev
在http://localhost:8500/中进行配置
步骤四:调用服务
//从application.yml中获取的参数 @Value("${server.port}") private String port; @GetMapping("/pay/get/info") //从bootstrap.yml中获取consul中的对应文件中的参数 public String getInfoByConsul( @Value("${atguigu.info}") String atguiguInfo ) {return "atguiguInfo:"+atguiguInfo+"\t"+"port:"+port; }