spring cloud 入门系列二:使用Eureka 进行服务治理「建议收藏」

服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现。SpringCloudEureka是SpringCloudNetflix微服务套件的一部分

大家好,又见面了,我是全栈君。

服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现。

Spring Cloud Eureka是Spring Cloud Netflix 微服务套件的一部分,主要负责完成微服务架构中的服务治理功能。

本文通过简单的小例子来分享下如何通过Eureka进行服务治理:

  • 搭建服务注册中心
  • 注册服务提供者
  • 服务发现和消费

==========我是华丽的分割线========================

一、搭建服务注册中心

  先列出完整目录结构:

  spring cloud 入门系列二:使用Eureka 进行服务治理「建议收藏」

  搭建过程如下:

  1. 创建maven工程:eureka(具体实现略)
  2. 修改pom文件,引入依赖
    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.sam</groupId>
        <artifactId>eureka</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.1.RELEASE</version>
        </parent>
    
        <properties>
            <javaVersion>1.8</javaVersion>
        </properties>
        <!-- 使用dependencyManagement进行版本管理 -->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Camden.SR6</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
    
        </dependencyManagement>
    
        <dependencies>
            <!-- 引入eureka server依赖 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka-server</artifactId>
            </dependency>
    
        </dependencies>
    
    </project>

  3. 创建启动类
    /**
     * 
     * @EnableEurekaServer
     * 用来指定该项目为Eureka的服务注册中心
     */
    @EnableEurekaServer
    @SpringBootApplication
    public class EurekaApp {
    
        public static void main(String[] args) {
            SpringApplication.run(EurekaApp.class, args);
        }
    }

  4. 配置application.properties文件
    #设置tomcat服务端口号
    server.port=1111
    #设置服务名称
    spring.application.name=eureka-service
    
    eureka.instance.hostname=localhost
    #注册中心不需要注册自己
    eureka.client.register-with-eureka=false
    #注册中心不需要去发现服务
    eureka.client.fetch-registry=false
    #设置服务注册中心的URL
    eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka

  5. 启动服务并访问,我们会看到这样的画面:

    spring cloud 入门系列二:使用Eureka 进行服务治理「建议收藏」

     

二、注册服务提供者

  先列出完整目录结构:

  spring cloud 入门系列二:使用Eureka 进行服务治理「建议收藏」

  搭建过程如下:

  1. 创建maven工程:hello-service(具体实现略)
  2. 修改pom文件,引入依赖
    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.sam</groupId>
        <artifactId>hello-service</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.1.RELEASE</version>
        </parent>
    
        <properties>
            <javaVersion>1.8</javaVersion>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Camden.SR6</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
    
        </dependencyManagement>
    
        <dependencies>
            <!-- 引入eureka 客户端依赖 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
    
        </dependencies>
    </project>

  3. 创建启动类
    /***
     * 
     * @EnableDiscoveryClient
     * 让服务使用eureka服务器
     * 实现服务注册和发现
     *
     */
    @EnableDiscoveryClient
    @SpringBootApplication
    public class HelloApp {
    
        public static void main(String[] args) {
    
            SpringApplication.run(HelloApp.class, args);
        }
    
    }

  4. 创建controller
    @RestController
    public class HelloController {
    
        Logger logger = LoggerFactory.getLogger(HelloController.class);
    
        @Autowired
        DiscoveryClient discoveryClient;
        
        @RequestMapping("/hello")
        public String hello() {
            ServiceInstance instance = discoveryClient.getLocalServiceInstance();
            //打印服务的服务id
            logger.info("*********" + instance.getServiceId());
            return "hello,this is hello-service";
        }
    }

  5. 配置application.properties文件
    server.port=9090
    #设置服务名
    spring.application.name=hello-service
    #设置服务注册中心的URL,本服务要向该服务注册中心注册自己
    eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka

  6. 启动并测试
    1. )启动后再hello-service的控制台会有这种字样(xxx代表你的PC名)
      Registered instance HELLO-SERVICE/xxx:hello-service:9090 with status UP (replication=false)

      eureka的控制台会打印出如下字样(xxx代表你的PC名)

      Registered instance HELLO-SERVICE/xxx:hello-service:9090 with status UP (replication=false)

    2. )再次访问localhost:1111,会发现有服务注册到注册中心了spring cloud 入门系列二:使用Eureka 进行服务治理「建议收藏」

       

       

三、服务发现和消费

  完整目录结构如下:

  spring cloud 入门系列二:使用Eureka 进行服务治理「建议收藏」

  搭建过程:

  1. 创建maven工程(具体实现略)
  2. 修改pom文件,引入依赖
    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.sam</groupId>
        <artifactId>hello-consumer</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.1.RELEASE</version>
        </parent>
    
        <properties>
            <javaVersion>1.8</javaVersion>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Camden.SR6</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
    
        </dependencyManagement>
    
        <dependencies>
            <!-- 引入eureka 客户端依赖 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
            <!-- 引入ribbon 依赖 ,用来实现负载均衡,我们这里只是使用,先不作其他介绍-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-ribbon</artifactId>
            </dependency>
    
        </dependencies>
    </project>

    这里比hello-service服务提供者,多了ribbon的依赖

  3. 创建启动类
    @EnableDiscoveryClient
    @SpringBootApplication
    public class ConsumerApp {
    
    
        //@Bean 应用在方法上,用来将方法返回值设为为bean
        @Bean
        @LoadBalanced  //@LoadBalanced实现负载均衡
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
        
        public static void main(String[] args) {
            SpringApplication.run(ConsumerApp.class, args);
        }
    }

    这里也要用到@EnableDiscoveryClient, 让服务使用eureka服务器, 实现服务注册和发现
     

  4. 创建controller
    @RestController
    public class ConsumerController {
    
        //这里注入的restTemplate就是在com.sam.ConsumerApp中通过@Bean配置的实例
        @Autowired
        RestTemplate restTemplate;
    
        @RequestMapping("/hello-consumer")
        public String helloConsumer() {
            //调用hello-service服务,注意这里用的是服务名,而不是具体的ip+port
            restTemplate.getForObject("http://hello-service/hello", String.class);
            return "hello consumer finish !!!";
        }
    }

  5. 配置application.properties文件
    server.port=9999
    
    spring.application.name=hello-consumer
    eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka
    
    
    #这里的配置项目和服务提供者hello-service一样

  6. 启动,测试
    1. )启动eureka。为了展示负责均衡的效果,我们的hello-service启动两个服务,启动两个服务的具体步骤如下
      1. spring cloud 入门系列二:使用Eureka 进行服务治理「建议收藏」

        spring cloud 入门系列二:使用Eureka 进行服务治理「建议收藏」

        spring cloud 入门系列二:使用Eureka 进行服务治理「建议收藏」

        spring cloud 入门系列二:使用Eureka 进行服务治理「建议收藏」

        以上是hello-service1的启动步骤,端口号为9090;同样方法设置hello-service2,端口号为9091(具体实现略)。

    2. )启动hello-consumer
    3. )再次访问http://localhost:1111/,会发现有2个hello-service服务(端口号一个是9090,一个是9091),1个hello-consume服务
    4. )   多次访问http://localhost:9999/hello-consumer,会发现hello-service1和hello-service2会轮流被调用(已经实现了负责均衡),可以通过两者的控制台打印内容确认(还记得我们在hello-service的controller中有个loggerlogger.info(“*********” + instance.getServiceId());吗?对,就是这个打印)spring cloud 入门系列二:使用Eureka 进行服务治理「建议收藏」

      spring cloud 入门系列二:使用Eureka 进行服务治理「建议收藏」

      spring cloud 入门系列二:使用Eureka 进行服务治理「建议收藏」

      spring cloud 入门系列二:使用Eureka 进行服务治理「建议收藏」

       

四、总结

以上实例实现了基本的服务治理:

  • 通过spring-cloud-starter-eureka-server和@EnableEurekaServer实现服务注册中心
  • 通过spring-cloud-starter-eureka和@EnableDiscoveryClient使用并注册到服务注册中心
  • 通过spring-cloud-starter-eureka和@EnableDiscoveryClient使用注册中心并发现服务,通过spring-cloud-starter-ribbon来实现负载均衡消费服务

PS:这里说明下,我用的IDE是Spring Tool Suite,是spring定制版的eclipse,方便我们使用spring进行开发,有兴趣的朋友可以自行百度了解下。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120909.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 计算机网络技术现代安防是啥意思,现代化校园视频安防监控系统 具有哪些特点呢…

    计算机网络技术现代安防是啥意思,现代化校园视频安防监控系统 具有哪些特点呢…原标题:现代化校园视频安防监控系统具有哪些特点呢校园视频安防监控系统主要是利用监控设备对学校场所进行全方位、全高清视频立体化管理和监控,从而维护校园秩序和安全,同时能为同学们的生活和学习营造更好的安全环境。那么现代化校园视频安防监控系统具有哪些特点呢?今天就和小编一起来学习了解下吧。1、可靠性与安全性校园视频安防监控系统的设计应具有较高的可靠性,在校园视频安防监控系统故障或事故造成中断后,能确…

    2022年6月28日
    27
  • 简单介绍一下spring bean的生命周期_生命周期分析

    简单介绍一下spring bean的生命周期_生命周期分析面试题来自面试官发自灵魂深处的拷问:谈谈你对spring的理解;一脸懵逼的求职者的内心活动:啥?具体的问题是什么?现在的面试都不按套路出牌了吗?抛出一个这么大的问题,你让我怎么回答?一脸懵逼的求职者的回答:额~~~这个。。。。额~~~那个。。。。额~~~不知道唉。。。为什么面试官要问这种问题?不可否认,现在的大多数的面试出题方式都是这样的,惊人的相似,就是面试官喜欢抛出一个问题,看你能讲多深,考的就是你对这项技术的深度和广度,深度就是你对技…

    2022年9月19日
    4
  • (十一)模仿学习

    (十一)模仿学习  从之前的讨论看,都是有奖励的。哪怕是上一章的稀疏奖励,其实也有奖励。==假如任何奖励都没有怎么办?==本章介绍的就是这种情况的解决办法。什么时候任何奖励都没有。其实还挺常见的,以聊天机器人为例,聊的好不好很难定义奖励。解决这种情况的方法就是模仿学习  模仿学习(imitationlearning),有时也叫示范学习或者学徒学习。指有一些专家的示范,通过模仿这些专家来达到目的。专家的示范含义很广,比如在自动驾驶中,一个司机的行为就可以被称为专家的示范。  模仿学习中主要有两个方法:行为克隆和逆强化

    2022年9月19日
    3
  • 怎么从安卓设备转移数据到苹果_如何将数据从安卓手机转移到苹果手机[通俗易懂]

    怎么从安卓设备转移数据到苹果_如何将数据从安卓手机转移到苹果手机[通俗易懂]手机人手一部,更新也特别快,换系统的同时也想保留之前的数据怎么办?如何将数据从安卓手机转移到苹果手机?android手机数据转移到iPhone手机的方法教程在这里为你准备,第一次使用苹果的用户怎样才能将原有android数据迁移到苹果呢?来看如下具体内容!我们都知道在大屏iPhone6和iPhone6Plus智能手机即将上市的前夕,苹果公司发布了一份详细的支持文件,指导Android用户如何…

    2022年9月18日
    2
  • VS2005 常用快捷键

    VS2005 常用快捷键

    2021年7月27日
    52
  • 微信h5支付,微信外浏览器支付实现

    微信h5支付,微信外浏览器支付实现2021-02-07修改看一下官方文档还是很必要的,知道必不可少的参数是什么:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20&index=1下面按步骤跟着我做首先需要APPID,微信支付商户号mch_id,API密钥key,Appsecret(secret),说明在这里https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=3_1 然后设置支付域名,设置路径:商户平

    2022年5月3日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号