微服务之springCloud实现分析

1.springcloud组件有那些?

1)eureka 实现微服务的注册和发现,包含三个部分:服务发现组件、服务的提供者、服务的消费者;
2)ribbon 实现微服务负载均衡;
3)foreign eureka 和ribbon的结合体,实现微服务API 请求的转发和调度;
4)zuul 服务网关,实现路由服务转发,同时具备权限控制功能;
5)histy 熔断器,防止出现服务出现故障时还被持续访问,最终导致自身服务的瘫痪。
6)config 配置中心,用于分布式系统的配置,分为两部分,一是Config Server,二是Config Client。

2.springcloud组件内部具体如何实现?

2.1 eureka实现

服务注册表
是服务发现组件的核心,它用来记录各个微服务的信息,例如微服务的名称、IP、端口等。服务注册表提供查询API和管理API,查询API用于查询可用的微服务实例,管理API用于服务的注册和注销。

2.1.1 服务如何注册

1)注册IP、端口、服务名称
Eureka Server 提供服务发现的能力,各个微服务启动时,会向Eureka Server注册自己的信息(例如IP、端口、微服务名称等),Eureka Server会存储这些信息。
Eureka Client是一个Java客户端,用于简化与Eureka Server的交互。
2)注册表数据同步
默认情况下,Eureka Server同时也是Eureka Client。多个Eureka Server实例,相互之间通过复制的方式,来实现服务注册表中的数据的同步。

2.1.2 如何发现服务

1)获取网络地址、调用接口
服务消费者可从服务发现组件查询服务提供者的网络地址,并使用该地址调用服务提供者的接口;
2)缓存注册表信息
Eureka Client 会缓存服务注册表中的信息。这种方式有一定的优势——首先,微服务无须每次请求都查询Eureka Server 的压力;其次即使Eureka Server所有节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者并完成调用。

2.1.3 服务检查和维护服务链接

1)心跳检查
微服务启动后会周期性(默认30秒)地向Eureka Server发送心跳以续约自己的“租期”。
2)超时注销
如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。
3)注册表自动刷新
微服务网络地址发生变更(例如实例增减或者IP端口发生变化等)时,会重新注册到服务发现组件。使用这种方式,服务消费者就无须人工修改提供者的网络地址了。

2.1.3 eureka 高可用

Eureka Server可以通过运行多个实例并相互注册的方式实现高可用部署,Eureka Server实例会彼此增量地同步信息,从而确保所有节点数据一致。事实上,节点之前相互注册是Eureka Server的默认行为,前面单节点Eureka Server,额外配置了eureka.client.registerWithEureka=false、eureka.client.fetchRegistry=false。

2.1.4 eureka 安装配置

1) pom.xml配置
eureka server 的配置

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.4.1.RELEASE</version>
            <type>pom</type>
        </dependency>

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

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

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
        </dependency>
    </dependencies>

eureka client_1 的配置

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

eureka client_2 的配置

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

2) application.properties 配置
eureka server的配置

server.port=1111
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/

eureka client_1 的配置

spring.application.name=management-service-v1
server.port=8085
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

eureka client_2 的配置

spring.application.name=management-consumer
server.port=8075
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

3) 注解配置
eureka server的配置
eureka server中的Java代码只需要有这启动类即可,没有其他代码。

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 * Created by xxx
 */
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

    public static void main(String args[]){
        new SpringApplicationBuilder(EurekaServerApplication.class).web(true).run(args);
    }
}

eureka client_1的配置

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @author xxx
 * 入口程序
 */
@SpringBootApplication
@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
@EnableDiscoveryClient
public class ManagementApplication {

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

eureka client_2的配置

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * Created by xxx
 */
@SpringBootApplication
@EntityScan
@EnableDiscoveryClient
public class ManagementCoreApplication {
    public static void main(String[] args){
        SpringApplication springApplication =new SpringApplication(ManagementCoreApplication.class);
        springApplication.run(args);
    }
}

参考:
https://blog.csdn.net/chen497147884/article/details/79861084

3.springcloud微服务API请求如何转发?

5.springcloud微服务如何熔断,如何放置雪崩?

6.springcloud服务如何降级?

7.springcloud配置文件如何配置?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值