SpringCloud基础篇

1.认识微服务

单体架构耦合度高,不利于后期维护升级,改为分布式架构,将一个大的项目分为几个独立的功能模块,每个模块成为一个服务,功能模块之间有调用关系。

          使用RestTemplate(SpringMVC中的)进行远程调用,需要知道那个模块的功能的URL地址,消费者和生产者:只是一个概念,在一次远程调用中,调用者也叫消费者,远程调用其他服务,被调用服务称为生产者

2.Eureka注册中心

          Eureka:远程调用中使用了硬编码,耦合度高,引入了一个服务注册中心的概念。Eukera是服务注册中心,是一个独立的微服务。

2.1服务搭建

a.导入eureka依赖(父模块中)。

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

b.启动类上加@EnableEuekaServer注解,开启eureka。

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

c.配置文件添加服务注册地址。注意服务名称(要改)

server:
  port: 10086
spring:
  application:
    name: eureka-server
eureka:
  client:
    service-url: 
      defaultZone: http://127.0.0.1:10086/eureka

启动微服务,然后在浏览器访问http://127.0.0.1:10086 就可以了。

2.2服务注册(将服务注册到注册中心)

a.导入依赖(服务提供者中)。

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

b.在配置文件中添加服务名称、eureka地址。

spring:
  application:
    name: userservice
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

2.3服务发现

a.导入依赖(服务消费者中

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

b.配置文件添加服务名称,eureka地址

spring:
  application:
    name: orderservice
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

c.服务拉取和负载均衡,在消费者的启动类中,给RestTemplate这个Bean添加一个@LoadBalance注解,此时就可以通过修改消费者中访问的url路径,用服务代替ip、端口。

 3.ribbon负载均衡

  • 拦截我们的RestTemplate请求http://userservice/user/1

  • RibbonLoadBalancerClient会从请求url中获取服务名称,也就是服务提供者。

  • DynamicServerListLoadBalancer根据服务提供者到eureka拉取服务列表

  • eureka返回列表,localhost:8081、localhost:8082

  • IRule利用内置负载均衡规则,从列表中选择一个,例如localhost:8081

  • RibbonLoadBalancerClient修改请求地址,用localhost:8081替代userservice,得到http://localhost:8081/user/1,发起真实请求

3.1.负载均衡策略

      负载均衡的规则都定义在IRule接口中,而IRule有很多不同的实现类:

 默认实现的是ZoneAvoidanceRule,是一种轮询方案。

3.2.自定义负载均衡策略

通过定义IRule实现可以修改负载均衡规则,有两种方式:

代码方式:在消费者的启动类中定义一个新的IRule:

@Bean
public IRule randomRule(){
    return new RandomRule();
}

或者

配置文件方式:在消费者配置文件中,添加新的配置可以修改规则

userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 

3.3饥饿加载

     Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。

而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

ribbon:
  eager-load:
    enabled: true
    clients: userservice

4.Nacos注册中心

       Nacos是SpringCloudAlibaba的组件,而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册、服务发现规范。因此使用Nacos和使用Eureka对于微服务来说,并没有太大区别。

        主要差异在于:a.依赖不同     b. 服务地址不同

a.引入依赖(父工程)

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.6.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

b.在消费者和提供者中加入依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

c.在消费者和提供者中配置nacos地址

spring:
  cloud:
    nacos:
      server-addr: localhost:8848

        注意:一个服务不能出现两个注册中心,所以我们要将前面Eureka的依赖全部注释掉,否则会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_71093010

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值