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

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

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

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

  1. 搭建服务注册中心
  2. 注册服务提供者
  3. 服务发现和消费

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

一、搭建服务注册中心

先列出完整目录结构:

搭建过程如下:

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.启动服务并访问,我们会看到这样的画面:

二、注册服务提供者

先列出完整目录结构:

搭建过程如下:

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,会发现有服务注册到注册中心了

三、服务发现和消费

完整目录结构如下:

搭建过程:

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启动两个服务,启动两个服务的具体步骤如下

以上是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());吗?对,就是这个打印)

四、总结

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

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

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

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

(0)

相关推荐

  • Spring Cloud Eureka服务治理的实现

    什么是Spring Cloud Eureka Spring Cloud Eureka 是 Spring Cloud 中的一个组件,它是基于 Netflix Eureka 做了二次封装,主要是负责完成微服务框架中服务治理的功能.Spring Cloud通过为 Eureka 增加了 Spring Boot 风格的自动化配置,我们只需要通过简单的引用依赖和注解就能让 Spring Boot 够将的微服务应用轻松的与 Eureka 服务治理体系进行整合. 服务治理 服务治理是微服务框架中最为核心和基础的

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

    服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现. Spring Cloud Eureka是Spring Cloud Netflix 微服务套件的一部分,主要负责完成微服务架构中的服务治理功能. 本文通过简单的小例子来分享下如何通过Eureka进行服务治理: 搭建服务注册中心 注册服务提供者 服务发现和消费 ==========我是华丽的分割线======================== 一.搭建服务注册中心 先列出完整目录结构: 搭建过程如下

  • Spring Cloud引入Eureka组件,完善服务治理

    简介 Netflix Eureka 是一款由 Netflix 开源的基于 REST 服务的注册中心,用于提供服务发现功能.Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 进行了二次封装,主要负责完成微服务架构中的服务治理功能. Spring Cloud Eureka 是一个基于 REST 的服务,并提供了基于 Java 的客户端组件,能够非常方便的将服务注册到 Spring Cloud Eureka 中

  • Spring Cloud构建Eureka应用的方法

    Eureka 介绍 Eureka提供基于REST的服务,在集群中主要用于服务管理.Eureka提供了基于Java语言的客户端组件,客户端组件实现了负载均衡的功能,为业务组件的集群部署创造了条件.使用该框架,可以将业务组件注册到Eureka容器中,这些业务组件可进行集群部署,Eureka主要维护这些服务的列表并自动检查它们的状态. 程序结构 创建Eureka Server maven依赖 <dependencyManagement> <dependencies> <depend

  • Spring Cloud 专题之Sleuth 服务跟踪实现方法

    目录 准备工作 实现跟踪 抽样收集 整合Zipkin 1.下载Zipkin 2.引入依赖配置 3.测试与分析 持久化到mysql 1.创建zipkin数据库 2.启动zipkin 3.测试与分析 在一个微服务架构中,系统的规模往往会比较大,各微服务之间的调用关系也错综复杂.通常一个有客户端发起的请求在后端系统中会经过多个不同的微服务调用阿里协同产生最后的请求结果.在复杂的微服务架构中,几乎每一个前端请求都会形成一条复杂的分布式的服务调用链路,在每条链路中任何一个依赖服务出现延迟过高或错误的时候都

  • Spring Cloud 使用 Resilience4j 实现服务熔断的方法

    目录 CircuitBreaker 断路器 隔舱Bulkhead 限速器RateLimiter CircuitBreaker 断路器 服务熔断是为了保护我们的服务,比如当某个服务出现问题的时候,控制打向它的流量,让它有时间去恢复,或者限制一段时间只能有固定数量的请求打向这个服务.这些都是保护措施.我在实际工作中也确实遇到过,数据库出现问题了,进而导致Web服务出现问题了,导致不依赖数据库的服务也出现问题了,出现一连串问题. 这次学习<玩转 Spring 全家桶>,丁雪丰老师给了使用resili

  • Spring Cloud Stream消息驱动组件使用方法介绍

    目录 1.Stream解决的痛点问题 2.Stream重要概念 3.传统MQ模型与Stream消息驱动模型 4.Stream消息通信方式及编程模型 4.1.Stream消息通信方式 4.2.Stream编程注解 4.3.Stream消息驱动之开发生产者端 4.4.Stream消息驱动之开发消费者端 5.Stream高级之自定义消息通道 6.Stream高级之消息分组 MQ:消息队列/消息中间件/消息代理,产品有很多,ActiveMQ RabbitMQ RocketMQ Kafka 1.Strea

  • idea快速搭建spring cloud注册中心与注册的方法

    spring cloud快速搭建 Spring Cloud是一个微服务框架,它基于spring boot, Spring Cloud提供的全套的分布式系统解决方案 . 首先我们使用gradle来创建: 选择JDK以及勾选Java,然后下一步 起包名已经项目名,下一步: 选择我们本地的gradle包,一直下一步,点击build.gradle并添加我们的依赖: group 'com.gaofei' version '1.0-SNAPSHOT' //gradle使用的插件 apply plugin:

  • Spring Cloud zuul自定义统一异常处理实现方法

    Zuul在springcloud微服务体系中提供filer和router功能,是微服务不可或缺的部分.filer处理默认实现的外还可以自定义进行授权.限流.安全校验等,router完全可以替代Nginx反向代理.Zuul异常处理就是由SendErrorFilter完成. 在我们应用过程我们发现使用默认的异常filter有两个问题不是很友好: 1.无法快速识别出是否是请求路由的服务超时还是没有任何可用节点,发生错误只能查看日志通过堆栈去定位: 2.无法兼容自定义的譬如{code:500,msg:"

  • Spring Cloud搭建eureka过程图解

    这篇文章主要介绍了Spring Cloud搭建eureka过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Eureka Server 的搭建 eureka 是 Spring Cloud 的注册中心,提供服务注册和服务发现的功能. 利用idea 快速创建一个eureka应用 File - NewProject-Spring Initalizr 1.利用 https://start.spring.io 创建spring cloud eure

  • 基于Nacos实现Spring Cloud Gateway实现动态路由的方法

    简介 该文档主要介绍以Nacos为配置中心,实现Spring Cloud GateWay 实现动态路由的功能.Spring Cloud Gateway启动时候,就将路由配置和规则加载到内存里,无法做到不重启网关就可以动态的对应路由的配置和规则进行增加,修改和删除.通过nacos的配置下发的功能可以实现在不重启网关的情况下,实现动态路由. 集成 Spring Cloud GateWay集成 spring-cloud-starter-gateway:路由转发.请求过滤(权限校验.限流以及监控等) s

随机推荐