SpringCloud入门

本文详细介绍了微服务架构的概念、特点,以及如何通过SpringCloud和Eureka实现服务注册与发现、远程调用及负载均衡。包括EurekaServer的搭建、服务注册、RestTemplate的使用和微服务之间的调用关系。
摘要由CSDN通过智能技术生成
1.什么是微服务

微服务是一种架构,这种架构是将单个的整体应用程序分割成更小的项目关联的独立的服务。一个服务通常实现一组独立的特性或功能,包含自己的业务逻辑和适配器。各个微服务之间的关联通过暴露api来实现。这些独立的微服务不需要部署在同一个虚拟机,同一个系统和同一个应用服务器中。

2.微服务的特点

1.单一职责

2.面向服务

3.自治

4.隔离性强

3.为什么使用微服务

我们要先知道单体系统的优缺点,分布式系统的优缺点,在此不多赘述。而微服务是一种良好的分布式架构方案。

SpringCloud和微服务:

SpringCloud是目前使用最广泛的微服务架构,集成了各种微服务功能组件,并基于SpringBoot实现这些组件的自动装配。


微服务的远程调用:
1.在启动类注入RestTemplate
    @Bean
    public RestTemplate restTemplate() {
        return  new RestTemplate();
    }
2.服务远程调用RestTemplate


微服务的调用关系:

服务提供者:暴漏接口给其他微服务调用。

服务消费者:调用其他微服务提供的接口。

消费者提供者是相对而言的。

那么有几个问题:

1.消费者如何获得提供者的具体信息?

答:提供者启动时向eureka注册自己的信息,eureka保存这些信息,消费者根据服务名称向eureka拉取提供者信息。

2.如果有多个服务提供者,消费者怎么选择?

答:消费者利用负载均衡算法,从服务列表挑选一个。

3.消费者如何感知提供者健康状态?(服务宕机了咋办)

提供者每隔30秒向EurekaServer发送心跳请求,eureka更新记录到服务列表,心跳不正常的会被剔除,消费者可以拉取到最新的信息。


EurekaServer搭建步骤:

1.导入依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

2.启动类上,添加@EnableEurekaServer注解

3.编写application.yml文件:

server:
  port: 10086 # 服务端口
spring:
  application:
    name: eurekaserver # eureka的服务名称
eureka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka
我们搭建好服务端之后就可以进行服务注册了:

1.导入依赖

         <!--eureka客户端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

2.application.yml注册:

spring:
  application:
    name: userservice
eureka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

最后我们想要远程调用服务:

    @Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.利用RestTemplate发起http请求,查询用户
        // 2.1.url路径
        String url = "http://userservice/user/" + order.getUserId();
        // 2.2.发送http请求,实现远程调用
        User user = restTemplate.getForObject(url, User.class);
        // 3.封装user到Order
        order.setUser(user);
        // 4.返回
        return order;
    }
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {

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

    /**
     * 创建RestTemplate并注入Spring容器
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

也就是两步:1.把硬编码替换成我们euerka注册的name。2.注入RestTemplate时@LoadBalanced实现负载均衡。

总结流程:

1.搭建EurekaServer

      ---导入Server依赖

      ---启动类添加注解

      ---yml配置信息

2.注册服务

      ---导入Client依赖

      ---yml配置信息

3.服务拉取

      ---硬编码换成注册服务时,服务的name

      ---RestTemplate加上负载均衡注解

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值