spring cloud 使用Eureka 进行服务治理方法

时间:2021-05-02

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

spring cloud eureka是spring cloud netflix 微服务套件的一部分,主要负责完成微服务架构中的服务治理功能。

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

  • 搭建服务注册中心
  • 注册服务提供者
  • 服务发现和消费
  • ==========我是华丽的分割线========================

    一、搭建服务注册中心

    先列出完整目录结构:

    搭建过程如下:

    1.创建maven工程:eureka(具体实现略)

    2.修改pom文件,引入依赖

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 <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.创建启动类

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 /** * * @enableeurekaserver * 用来指定该项目为eureka的服务注册中心 */ @enableeurekaserver @springbootapplication public class eurekaapp { public static void main(string[] args) { springapplication.run(eurekaapp.class, args); } }

    4.配置application.properties文件

    ? 1 2 3 4 5 6 7 8 9 10 11 12 #设置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.启动服务并访问,我们会看到这样的画面:

    二、注册服务提供者

    先列出完整目录结构:

    搭建过程如下:

    1.创建maven工程:hello-service(具体实现略)

    2.修改pom文件,引入依赖

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 <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.创建启动类

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 /*** * * @enablediscoveryclient * 让服务使用eureka服务器 * 实现服务注册和发现 * */ @enablediscoveryclient @springbootapplication public class helloapp { public static void main(string[] args) { springapplication.run(helloapp.class, args); } }

    4.创建controller

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 @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文件

    ? 1 2 3 4 5 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,会发现有服务注册到注册中心了

    三、服务发现和消费

    完整目录结构如下:

    搭建过程:

    1.创建maven工程(具体实现略)

    2.修改pom文件,引入依赖

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 <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.创建启动类

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 @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

    ? 1 2 3 4 5 6 7 8 9 10 11 12 @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文件

    ? 1 2 3 4 server.port=9999 spring.application.name=hello-consumer eureka.client.serviceurl.defaultzone=http://localhost:1111/eureka #这里的配置项目和服务提供者hello-service一样

    6.启动,测试1.)启动eureka。为了展示负责均衡的效果,我们的hello-service启动两个服务,启动两个服务的具体步骤如下

    以上是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-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进行开发,有兴趣的朋友可以自行百度了解下。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

    原文链接:http://www.cnblogs.com/sam-uncle/p/8954401.html

    声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

    相关文章