Spring Cloud 入门 第一节

spring cloud 介绍

spring Cloud是一个基于Spring Boot实现的微服务架构开发工具。它为微服务架构中涉及的服务治理、断路器、负载均衡、配置管理、控制总线和集群状态管理等操作提供了一种简单的开发方式。

  1. 外部或者内部的非Spring Cloud项目都统一通过API网关(Zuul)来访问内部服务。
  2. 网关接收到请求后,从注册中心(Eureka)获取可用服务。
  3. 由Ribbon进行均衡负载后,分发到后端的具体实例。
  4. 微服务之间通过Feign进行通信处理业务。
  5. Hystrix负责处理服务超时熔断。
  6. Turbine监控服务间的调用和熔断相关指标。

配置中心管理各微服务不同环境下的配置文件。
请添加图片描述
spring cloud官网
spring cloud中文网
spring cloud中文社区

spring cloudspring boot兼容性介绍
官网介绍网址
请添加图片描述
如果没有对应版本,项目就可能会报错

服务拆分注意事项

  1. 不同微服务,不要重复开发相同业务
  2. 微服务数据独立,不要访问其它微服务的数据库
  3. 微服务可以将自己的业务暴露为接口,供其它微服务调用

使用 RestTemplate 调用远程接口

RestTemplate 是 spring 发起请求的中间件,在没用使用注册中心时使用这个,有注册中心时使用Feign比较好

  1. 在启动类里配置注入 RestTemplate
    @SpringBootApplication
    public class ConsumerApplication {
         
    
        public static void main(String[] args) {
         
            SpringApplication.run(ConsumerApplication.class, args);
        }
    
        @Bean
        RestTemplate restTemplate() {
         
            return new RestTemplate();
        }
    }
    
  2. 调用 RestTemplate 发起请求
    get 请求用 getForEntity,post 请求用 postForEntity
    service
    public class OrderService {
         
      @Autowired
      private RestTemplate restTemplate;
      public Order queryOrderById (Long orderId) {
         
        //1.查询订单
        Order order = orderMapper.findById(orderId);  
        
        // TOD0 2.查询用户
        String url = "http://localhost:8081/usep/" +order.getUserId();
        //第二个参数默认是json,填了会反序列化成User类型
        User user = restTemplate.getFor0bject(url, User.class); 
    
        //3.封装user 信息
        order.setUser(user);
        
        //4.返回
        return order;
      }
    }
    

提供者(provide)与消费者(consumer)
服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)
服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)
提供者消费者角色其实是相对的
一个服务可以同时是服务提供者服务消费者

入门案例

创建父级maven工程springcloud-parent

父级工程的pom.xml

<?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>org.liu</groupId>
    <artifactId>springcloud-parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>user-provider</module>
        <module>user-provider-demo01</module>
        <module>user-consumer</module>
        <module>eureka-server</module>
    </modules>

    <properties>
        <!-- SpringCloud版本 -->
        <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
    </properties>

    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.2.2.RELEASE</version>
    </parent>

    <!-- SpringCloud包依赖管理 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

创建提供者(provide)子工程user-provide

在父级工程springcloud-parent下创建提供者(provide)的maven子工程user-provide
pom.xml

<?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">
    <parent>
        <artifactId>springcloud-parent</artifactId>
        <groupId>org.liu</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>user-provider</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

</project>
server:
  port: 18081

启动类

package com.liu.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ProviderApplication{
   
    public static void main(String[] args) {
   
        SpringApplication.run(ProviderApplication.class,args);
    }
}

controller层

package com.liu.provider.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值