SpringCloud第二章(服务治理Eureka)

目录

1:springcloud组件介绍

2:服务注册组件原理

3:springcloud原生服务注册组件(Eureka-尤里卡) 

3.1:Eureka基础知识

3.2:Eureka单机部署

3.3:Eureka集群

3.4:Eureka微服务信息完善Actuator

3.5:Eureka服务发现Discovery

3.6:Eureka自我保护


1:springcloud组件介绍

为了springcloud的服务管理、服务发布、服务降级、服务网管等问题,springcloud引入了各种组件、用来解决这些问题!

springcloud组件结构如下

不同的服务组件有不同的功能,我们首先学习服务注册组件,服务注册组件主流的有三种

1:Eureka 是 Netflix 开发的,一个基于 REST 服务的,服务注册与发现的组件


2:服务注册组件原理

 

服务注册组件的原理大概相同,都是有生产者发布服务和消费者消费服务。

生产者的服务在注册中心注册,消费者在注册中心得到服务注册的代理,从而调用服务。

原理图如下:

 

 

3:springcloud原生服务注册组件(Eureka-尤里卡) 

3.1:Eureka基础知识

Eureka-server:各个服务节点启动之后,会在Eurekaserver中进行服务注册,Eurekaserver可以查看到所有的服务注册节点,服务注册节点可以在管理页面中直观的看到。

Eureka-clinet:这是一个java客户端,简化了与Eurekaserver的交互,客户端有一个内置的轮询的(round-robin)负载均衡算法的负载均衡器,客户端启动之后会在想Eurekaserver每隔30秒钟发送心跳。如果Eurekaserver在多个周期哪没有收到某一个节点的心跳,Eurekaserver会在服务列表中把这个节点删除。

3.2:Eureka单机部署

单机Eurekaservice来管理所有的服务

1:Eureka服务端pom文件

    <dependencies>
        <!--Spring web 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--Springcloud的eureka组件  server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <!--图形监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

      

    </dependencies>

2:Eureka服务端application 配置文件

#端口号
server.port=8081

#服务端的物理地址
eureka.instance.hostname=eservice1
# 设置是否将自己作为客户端注册到注册中心(缺省true)
#服务端不向service注册自己
eureka.client.register-with-eureka=false

# 设置是否从注册中心获取注册信息(缺省true)
# 因为这是一个单点的EurekaServer,不需要同步其它EurekaServer节点的数据,故设为false
#服务端的作用就是服务中心 管理服务 不用发现服务
eureka.client.fetch-registry=false

#设置地址 服务注册和查询服务依赖这个地址
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/


#是否开启自我保护模式,默认为true。
eureka.server.enable-self-preservation=true


#续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
eureka.server.eviction-interval-timer-in-ms=10000

#服务续约任务的调用间隔时间,默认为30秒
eureka.instance.lease-renewal-interval-in-seconds=30

3:Eureka服务端启动类

@SpringBootApplication
@ComponentScan(basePackages= {"com.thit"})
@EnableEurekaServer //此注解用来表示这是service
public class Service1Application {
    public static void main(String[] args) {
        SpringApplication.run(Service1Application.class,args);
    }
}

 

4:Eureka客户端pom

    <dependencies>
        <!--Spring web 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--Springcloud的eureka组件  client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--图形监控信息-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

       

    </dependencies>

5:Eureka客户端application

#端口号
server.port=8091

#eureka管理页面显示服务名字  多个相同的服务可以用相同的名字来负载访问
spring.application.name=client

# 设置是否将自己作为客户端注册到注册中心(缺省true)
#服务端不向service注册自己
eureka.client.register-with-eureka=true

# 设置是否从注册中心获取注册信息(缺省true)
# 因为这是一个单点的EurekaServer,不需要同步其它EurekaServer节点的数据,故设为false
#但节点无所谓  多节点必须为true 配合robin的负载均衡
eureka.client.fetch-registry=true

#页面显示ip信息
eureka.instance.instance-id=eureka8091
eureka.instance.prefer-ip-address=true

#设置地址 服务注册和查询服务依赖这个地址  client配置服务端的地址信息
#单机版
eureka.client.serviceUrl.defaultZone=http://localhost:8090/eureka/

6:Eureka服务端启动类

@SpringBootApplication
@ComponentScan(basePackages= {"com.thit"})
@EnableEurekaClient  //客户端需要EnableEurekaClient注解
public class Client1Application {
    public static void main(String[] args) {
        SpringApplication.run(Client1Application.class,args);
    }
}

7:启动service和client 我们查看管理页面可以看到服务已经可以查看到了

3.3:Eureka集群

由于单机版的Eureka服务端在实际生产中不够健壮,稳定性能差,我们访问Eureka服务端的时候可能存在系统停机。并且客户端可能是集群部署,所有我们在上面的架构中,改成几圈架构来管理整个项目。新的集群架构如下

1:Eureka服务端8081和8082的application

修改host文件

127.0.0.1       eservice1

127.0.0.1       eservice2

 

2:Eureka客户端8091和8092的配置

3:启动两个服务端 然后启动两个客户端,页面显示效果如下

4:测试方法需要重新注册一个service服务,采用resttemple来调用服务返回端口号


1:8091和8092 相同的UserController 方法
@RestController
public class UserController {
    @Value("${server.port}")
    private  String port;
    @RequestMapping(value = "/add",method = RequestMethod.GET)
    public String add(){
        System.out.println("端口号:"+port);
        return "端口号"+port;
    }

}

2:测试方法

@RestController
public class UserController {
    
    //以前的是固定地址
   // public static final String URL1="http://localhost:8092/add";

    //使用eureka 注册管理服务  使用的是使用eureka地址
    public static final String URL1="http://CLIENT/add";

    @Autowired
    RestTemplate restTemplate1;

    @RequestMapping("/test")
    public String hello1() {
        String a= restTemplate1.getForObject(URL1,String.class);
        return a;
    }

}

3.4:Eureka微服务信息完善Actuator

1:在管理页面显示物理地址

2:不要主机名字

#页面显示ip信息
eureka.instance.instance-id=自定义名字页面显示可以查看
eureka.instance.prefer-ip-address=true

3.5:Eureka服务发现Discovery

 

3.6:Eureka自我保护


#是否开启自我保护模式,默认为true。
eureka.server.enable-self-preservation=true

#续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
eureka.server.eviction-interval-timer-in-ms=10000

#服务续约任务的调用间隔时间,默认为心跳90秒
eureka.instance.lease-renewal-interval-in-seconds=90

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值