zoukankan      html  css  js  c++  java
  • 注册中心eureka

      最近在忙一些其它的事情,两个城市来回跑还要办一些手续,挺费劲的,学习的事情也就耽误了一些,尽量赶吧。

      spring cloud为分布式的微服务架构提供了一站式的解决方案,eureka注册中心在spring cloud的架构中占据了非常重要的角色,这使得我们有必要认真理清eureka的设计和使用思路。说起注册中心,用过dubbo的话会直接联想到zookeeper,我们先暂时不管他们的异同以及spring cloud的整体结构,先来看一下它是怎么使用的,然后再来看跟zk的区别。
    --------------------------------------------------------------------------------------------------------------------
    注册中心,当然就是让别的服务把信息注册到自己,然后供消费者使用的这么个应用。这里涉及三个角色:注册中心、服务生产者跟服务消费者,我们分别搭建这三个服务,来看一下三者是如何使用的。
    1、搭建eureka-server
      eureka服务端的部署有两种方式:1、直接下载war包放入tomcat的webapp下;2、spring boot开启eureka服务端,实际跟1是类似的。
      第一种方式我没有尝试成功,一直报一个连接错误的异常,应该是默认连接自己失败导致的,但配置文件中没看到相关配置,,,,跳过,以后有时间了再搞。
      第二种方式:搭建spring boot项目,pom文件配置如下:
    <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>1.5.9.RELEASE</version>
       <relativePath/>
    </parent>
    
    <dependencyManagement>
       <dependencies>
          <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-dependencies</artifactId>
             <version>Dalston.SR1</version>
             <type>pom</type>
             <scope>import</scope>
          </dependency>
       </dependencies>
    </dependencyManagement>
    
    <dependencies>
       <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
    
       <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-actuator</artifactId>
       </dependency>
    
       <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-eureka-server</artifactId>
       </dependency>
    
       <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
       </dependency>
    </dependencies>
    

      pom文件中,parent信息用于继承spring boot的基础默认配置,这个spring boot的parent实际是个空项目,只有一个pom文件,包含一些版本号等信息;dependencyManagement是用于描述Spring cloud所依赖的版本信息;因为spring boot跟spring cloud版本有对应关系,不能随意匹配版本;还有要注意的是此处eureka的依赖为eureka-server,不是starter,starter是用于客户端的jar包。

      在resources下新建bootstrap.yml,内容为:  
    spring:
      application:
        name: eureka-server
    
      之所以在bootstrap.yml中设置,是因为该文件会优先于application.yml加载,而此设置需要提前设置。application的内容为:
    #服务的描述信息,可以填写服务描述,责任联系人等信息
    info:
      name: Eureka server
      contact: eureka 服务器
    server:
      port: 8761
    
    eureka:
      client:
        #是否注册到eureka server
        registerWithEureka: true
        #是否从服务器获取信息
        fetchRegistry: false
        #eureka server地址
        serviceUrl:
          defaultZone: http://127.0.0.1:8761/eureka/
      server:
        #获取不到集群里对等服务器上的实例时,需要等待的时间,单位毫秒
        waitTimeInMsWhenSyncEmpty: 0
        #开启自我保护,无论如何都要剔除心跳检测异常的服务
        enableSelfPreservation: true
        #updatePeerEurekaNodes执行间隔时间,集群信息刷新间隔时间
        peerEurekaNodesUpdateIntervalMs: 100000
    
       最后,在application.java中启用eureka服务端配置信息:
    @SpringBootApplication
    @EnableEurekaServer
    public class MyEurekaApplication {
       public static void main(String[] args) {
          SpringApplication.run(MyEurekaApplication.class, args);
       }
    }
    
    运行程序,访问 http://localhost:8761

     

      2、生产者搭建
      同样的spring boot项目,只是pom中的eureka换为了客户端的jar,也就是:
    <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    
      bootsrtap.yml内容:
    spring:
      application:
        name: sms-module
    
    application.yml内容:
    info:
      name: author:wzy,class:develop,tel:17301394307
    server:
      port: 9003
    eureka:
      client:
        registerWithEureka: true
        fetchRegistry: true
        serverUrl:
          defaultZone: http://127.0.0.1:8761/eureka
      instance:
        #心跳间隔
        leaseRenewalIntervalInSeconds: 10
    
    启用eureka客户端配置
    @EnableEurekaClient
    @SpringBootApplication
    public class SmsApplication {
       public static void main(String[] args) {
          SpringApplication.run(SmsApplication.class, args);
       }
    }
    
    可以看到刚起的两个服务:

      3、消费者搭建

    相关配置同生产者,我们此处主要看如何获取服务信息,手动创建controller如下:
    @RequestMapping("/mytest")
    @RestController
    public class TestController {
        @Autowired
        DiscoveryClient discoveryClient;
    
        @RequestMapping("/test")
        public String test(){
            List<ServiceInstance> instanceList = discoveryClient.getInstances("sms-module");
            StringBuffer sb = new StringBuffer();
            for(int i=0; i<instanceList.size(); i++){
                ServiceInstance instance = instanceList.get(i);
                String host = instance.getHost();
                int port = instance.getPort();
                String result = new RestTemplate().getForObject("http://"+host+":"+port+"/sms/sendmsg",String.class);
                sb.append(result+",");
            }
            return sb.toString();
        }
    }
    
    其中,DiscoveryClient是eureka 客户端提供的服务发现工具类,默认会自动注册到spring中;我们可以通过getInstances根据服务名称获取相关的服务实例列表,通过实例可以查看到具体的ip,端口等信息,通过RestTemplate的getForObject可以直接调用相关方法并获取返回结果,这里拿到的是返回结果的body信息;如需要获取其它信息,可以调用getForEntity来获取。直接访问http://localhost:8080/mytest/test
    生产者的代码及信息输出:
    可以看到,消费者调用了getForObject后,生产者对应服务实例的相关代码也执行了。
    ------------------------------------------------------------------------------------------------------------------------------
    就这样吧,先做个简单的了解,接下来我们看eureka的实现原理及机制

  • 相关阅读:
    Spyder的汉化
    Python,Pycharm,Anaconda等的关系与安装过程~为初学者跳过各种坑
    好了,我的第一篇博客!
    Xcode 最低要求和支持的 SDK
    python连接hive (安装impyla)的采坑之旅
    java泛型(泛型接口、泛型类、泛型方法)
    oracle命令查看表结构及表索引
    Linux环境下安装、配置Nginx1.14.2(CentOS Linux release 7.6.1810)
    Caffe入门随笔
    Gradient Boosting算法简介
  • 原文地址:https://www.cnblogs.com/nevermorewang/p/9164928.html
Copyright © 2011-2022 走看看