ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

springcloud-知识点总结(一):Eureka

2019-03-19 20:40:09  阅读:356  来源: 互联网

标签:知识点 服务 springcloud eureka 注册 http Eureka class


1.Spring Cloud简介

  Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

2.基本的服务者与消费者及调用关系

 1 import org.springframework.context.annotation.Bean;
 2 import org.springframework.context.annotation.Configuration;
 3 import org.springframework.web.client.RestTemplate;
 4  
 5 /**
 6  * SpringCloud相关配置
 7  * @author Administrator
 8  *
 9  */
10 @Configuration
11 public class SpringCloudConfig {
12  
13     /**
14      * 调用服务模版
15      * @return
16      */
17     @Bean
18     public RestTemplate getRestTemplate(){
19         return new RestTemplate();
20     }
21 }
View Code

 

 主要是定义一个bean RestTemplate对象; springcloud消费者,服务提供者之间的交互是http rest方式,比dubbo rpc方式更加灵活方便点;

StudentConsumerController类:

 1 /**
 2  * 
 3  * @author Administrator
 4  *
 5  */
 6 @RestController
 7 @RequestMapping("/student")
 8 public class StudentConsumerController {
 9  
10      @Resource
11      private RestTemplate restTemplate;
12       
13      /**
14       * 添加或者修改学生信息
15       * @param student
16       * @return
17       */
18      @PostMapping(value="/save")
19      private boolean save(Student student){
20          return restTemplate.postForObject("http://localhost:1001/student/save", student, Boolean.class);
21      }
22       
23      /**
24      * 查询学生信息
25      * @return
26      */
27     @SuppressWarnings("unchecked")
28     @GetMapping(value="/list")
29     public List<Student> list(){
30         return restTemplate.getForObject("http://localhost:1001/student/list", List.class);
31     }
32      
33     /**
34      * 根据id查询学生信息
35      * @return
36      */
37     @GetMapping(value="/get/{id}")
38     public Student get(@PathVariable("id") Integer id){
39         return restTemplate.getForObject("http://localhost:1001/student/get/"+id, Student.class);
40     }
41      
42     /**
43      * 根据id删除学生信息
44      * @return
45      */
46     @GetMapping(value="/delete/{id}")
47     public boolean delete(@PathVariable("id") Integer id){
48         try{
49             restTemplate.getForObject("http://localhost:1001/student/delete/"+id, Boolean.class);
50             return true;
51         }catch(Exception e){
52             return false;
53         }
54     }
55 }
View Code

再搞一个启动类StudentConsumerApplication_80:

1 @SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})
2 public class StudentConsumerApplication_80 {
3  
4     public static void main(String[] args) {
5         SpringApplication.run(StudentConsumerApplication_80.class,args);
6     }
7 }
View Code

这里的话 加了特殊配置 排除了 数据源注入(@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})),

不加的话 会报错,老版本没有这个问题;

3.服务注册与发现组件Eureka

服务注册与发现组件Eureka

Eureka github 地址: https://github.com/Netflix/eureka

Eureka简介:

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。

Eureka包含两个组件:Eureka Server和Eureka Client。

Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就别一个内置的、使用轮询(round-robin)负载算法的负载均衡器。

在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。

Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。

综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。

 

类似zookeeper,Eureka也是一个服务注册和发现组件,是SpringCloud的一个优秀子项目,不过比较坑的是,Eureka2版本已经停止更新了。但是Eureka1版本还是很稳定,功能足够用,所以还是有必要学习下。

但是这里有几个常用的服务注册与发现组件比对;

QQ鎴浘20180806224522.jpg

服务注册与发现原理。

 

QQ鎴浘20180806221135.jpg

4.搭建Eureka服务注册中心

搭建Eureka服务注册中心

前面说过eureka是c/s模式的  server服务端就是服务注册中心,其他的都是client客户端,服务端用来管理所有服务,客户端通过注册中心,来调用具体的服务;

我们先来搭建下服务端,也就是服务注册中心;

新建 module   microservice-eureka-server-2001

application.yml配置:

 1 server:
 2   port: 2001
 3   context-path: /
 4   
 5 eureka: 
 6   instance:
 7     hostname: localhost #eureka注册中心实例名称
 8   client: 
 9     register-with-eureka: false     #false 由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己。
10     fetch-registry: false     #false 由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false
11     service-url: 
12        defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/       #设置与Eureka注册中心交互的地址,查询服务和注册服务用到
View Code

启动类:

1 @SpringBootApplication
2 @EnableEurekaServer
3 public class EurekaApplication_2001 {
4  
5     public static void main(String[] args) {
6         SpringApplication.run(EurekaApplication_2001.class, args);
7     }
8 }
View Code

主要是要加入下@EnableEurekaServer

5.Eureka注册中心高可用集群配置

Eureka高可用集群配置

当注册中心扛不住高并发的时候,这时候 要用集群来扛;

我们再新建两个module  microservice-eureka-server-2002  microservice-eureka-server-2003

第一步:

修改三个项目(eureka)的application.yml文件,主要是修改 hostname和defaultZone,

2001修改(其他2002、2003修改方式一样,这里只列举2001):

server:

  port: 2001

  context-path: /

 

eureka: 

  instance:

    # 单机 hostname: localhost #eureka注册中心实例名称

    hostname: eureka2001.wfd.com # 集群

  client: 

    register-with-eureka: false     #false 由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己。

    fetch-registry: false     #false 由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false

    service-url: 

      defaultZone: http://eureka2002.wfd.com:2002/eureka/,http://eureka2003.wfd.com:2003/eureka/ # 集群

      #单机defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/       #设置与Eureka注册中心交互的地址,查询服务和注册服务用到

 

第二步:

修改服务提供者项目的application.yml,主要修改eureka.client.service-url.defaultZone

eureka:

  instance:

    hostname: localhost  #eureka客户端主机实例名称

    appname: microservice-student  #客户端服务名

    instance-id: microservice-student:1001 #客户端实例名称

    prefer-ip-address: true #显示IP

  client: 

    service-url: 

      # 单机 defaultZone: http://localhost:2001/eureka   #把服务注册到eureka注册中心

      defaultZone: http://eureka2001.wfd.com:2001/eureka/,http://eureka2002.wfd.com:2002/eureka/,http://eureka2003.wfd.com:2003/eureka/ # 集群

 访问。。。。

注:这里本质是三个服务注册中心都有我们服务提供者的信息,等后面讲到服务发现和服务调用,我们通过一些策略(默认轮询),会去找对应的服务注册中心;通过集群,能减轻每个服务注册中心的压力;

标签:知识点,服务,springcloud,eureka,注册,http,Eureka,class
来源: https://www.cnblogs.com/newAndHui/p/10561140.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有