zoukankan      html  css  js  c++  java
  • 微服务框架SpringCloud(Dalston版)学习 (一):Eureka服务注册与发现

    eureka-server

    eureka服务端,提供服务的注册与发现,类似于zookeeper

    新建spring-boot工程,pom依赖:

    
    <dependency>
    	<groupId>org.springframework.cloud</groupId>
    	<artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>
    
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- 定义springcloud的版本为Dalston版 -->
    <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>
    
    

    然后是启动类,在启动类上加上注解 @EnableEurekaServer

    
    @EnableEurekaServer
    @SpringBootApplication
    public class Application {
    
    	public static void main(String[] args) {
            	//启动方式区别于springboot
    		new SpringApplicationBuilder(Application.class).web(true).run(args);
    	}
    
    }
    
    

    注册中心配置

    默认情况下,注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为,只需要在application.properties进行配置,具体配置信息如下:

    # 该服务中心名字
    spring.application.name=eureka-server
    #端口号
    server.port=10000
    
    eureka.instance.hostname=localhost
    eureka.client.register-with-eureka=false
    eureka.client.fetch-registry=false
    
    logging.file=${spring.application.name}.log
    
    

    接下来,打开浏览器,访问127.0.0.1:10000

    eureka注册中心.png

    显然,注册中心还没有任何服务提供者以及消费者:


    eureka-client

    我们接下来创建提供服务的客户端,并向服务注册中心注册自己。

    新建spring-boot工程,命名为eureka-client,pom依赖:

    
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- 定义springcloud的版本为Dalston版 -->
    <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>
    
    

    然后创建一个接口服务,如下:

    
    @RestController
    public class EurekaController {
    
        @Autowired
        private DiscoveryClient discoveryClient;
    
        @GetMapping("/client")
        public String client() {
            String services = "Services: " + discoveryClient.getServices();
            System.out.println(services);
            return services;
        }
    
    }
    

    接下来是启动类,注意在启动类加上@EnableDiscoveryClient注解,具体如下:

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

    application.properties 配置

    
    spring.application.name=eureka-client
    
    server.port=2000
    
    eureka.client.serviceUrl.defaultZone=http://localhost:10000/eureka/
    
    
    

    通过spring.application.name属性,我们可以指定微服务的名称后续在调用的时候只需要使用该名称就可以进行服务的访问。

    eureka.client.serviceUrl.defaultZone属性对应服务注册中心的配置内容,指定服务注册中心的位置。

    启动项目,浏览器访问127.0.0.1:10000

    eureka1.png

    如上,证明服务提供方注册成功


    eureka-consumer

    通过上面两步,我们已经成功地将服务提供者:eureka-client注册到了Eureka服务注册中心了,同时我们也通过DiscoveryClient接口的getServices获取了当前客户端缓存的所有服务清单,那么接下来我们要学习的就是:如何去消费服务提供者的接口

    新建spring-boot工程,命名为eureka-consumer,pom依赖:

    
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    
    <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>
    
    <!-- 定义springcloud的版本为Dalston版 -->
    <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>
    
    

    配置application.properties,指定服务注册中心

    
    spring.application.name=eureka-consumer
    
    server.port=2100
    
    eureka.client.serviceUrl.defaultZone=http://localhost:10000/eureka/
    
    
    

    创建应用主类,注意注解@EnableDiscoveryClient,和之前服务提供者写法一致

    
    @EnableDiscoveryClient
    @SpringBootApplication
    public class Application{
      @Bean
      public RestTemplate restTemplate() {
        return new RestTemplate();
      }
      public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
      }
    }
    
    

    创建一个接口用来消费eureka-client提供的接口

    
    @RestController
    public class ConsumerController{
      
      @Autowired
      private LoadBalancerClient loadBalancerClient;
      
      @Autowired
      RestTemplate restTemplate;
      
      @GetMapping("/consumer")
      public String consumer() {
        ServiceInstance serviceInstance = loadBalancerClient.choose("eureka-client");
        String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/client";
        System.out.println(url);
        return restTemplate.getForObject(url, String.class);
      }
    
    

    可以看到,我们注入了LoadBalancerClient和RestTemplate,并在/consumer接口的实现中,先通过loadBalancerClientchoose函数来负载均衡的选出一个eureka-client的服务实例,这个服务实例的基本信息存储在ServiceInstance中,然后通过这些对象中的信息拼接出访问/client接口的详细地址,最后再利用RestTemplate对象实现对服务提供者接口的调用。


    如上,基于eureka的服务注册,发现,消费已经全部完成.

    [本文参考:程序员DD教程]
  • 相关阅读:
    Gulp使用入门操作---压缩JS
    Linux如何查看进程及如何杀死进程
    连不上GitHub,也ping不通,亲测解决方案
    idea一键生成mybatis工具
    idea逆向生成hibernate工程
    idea常用快捷键大全
    mysql日期函数
    数据库事务
    idea激活码
    oracle创建表前校验是否存在
  • 原文地址:https://www.cnblogs.com/leihuazhe/p/7732163.html
Copyright © 2011-2022 走看看