Spring-Cloud 系列第 3 篇:spring-cloud-eureka-consumer

本贴最后更新于 2715 天前,其中的信息可能已经斗转星移

自学 spring-cloud 系列,越来越感觉 spring-cloud 很强大!

主要分为以下几篇:

  1. spring-cloud-config: 分布式配置管理
  2. spring-cloud-eureka: 服务注册与发现
  3. spring-cloud-eureka-consumer: 远程服务调用和及其负载均衡
  4. spring-cloud-Hystrix: 熔断器保证服务高可用
  5. spring-cloud-config-eureka-ribbon: 分布式配置管理的高可用
  6. spring-cloud-bus: 配置信息的实时更新
  7. spring-cloud-zuul: 网关基础服务

介绍

spring-cloud-eureka,更加具体的内容,这里将会介绍远程服务调用和及其负载均衡。

我们将我们的服务注册在我们的服务中心里,那么如何去调用这些服务呢?我们可以用使用远程服务调用来解决,顺带还有方便的负载均衡功能。

如何使用

  1. 创建服务中心
  2. 注册几个被调用服务
  3. 注册一个 consumer
  4. 测试 consumer 与负载均衡

1. 创建服务中心

上一篇文章,我们已经学会了使用单机或者集群的方式来创建服务中心,这里我们使用简单的单机方式来创建!

spring-cloud-eureka-server 里启动采用这个 profile 文件:

server:
  port: 8761

spring:
  application:
    name: eureka-server

eureka:
  instance:
    lease-expiration-duration-in-seconds: 6
    lease-renewal-interval-in-seconds: 2
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

这个是单机版的。并将自己注册到了服务里。

2. 注册几个被调用服务

我们启动了这三个 profile 文件。

配置文件中,server.port 分别是 8083,8084,8085,其他参数完全一致!同时,我们在 controller 中设置了这样一个 rest 服务。

    @Value("${server.port}")
    String port;

    @RequestMapping("/hi")
    public String hi() {
        return port+" 端口为您服务!";
    }

这样方便知道我们具体调用了哪个服务。

3. 注册一个 consumer

需要额外的依赖,使用了 feign 来进行远程调用。

pom.xml :

        <!--远程调用-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>

创建一个接口:

@Component
@FeignClient(name = "eureka-client-1")
public interface HelloRemoteInterface {

    @RequestMapping(value = "/hi")
    public String hi();
}

这里的 name 就是你的那个服务的 application.name。根据名字来调用,才能实现负载均衡嘛。

使用接口,创建一个测试的 controller:

@RestController
public class ConsumerController {

    @Autowired
    HelloRemoteInterface helloRemoteInterface;

    @RequestMapping("/hello")
    public String hello() {
        return helloRemoteInterface.hi();
    }
}

同时,将我们的这个服务也注册到服务中心。

配置文件:

server:
  port: 8086

spring:
  application:
    name: eureka-consumer

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

启动方法:

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class SpringCloudEurekaConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudEurekaConsumerApplication.class, args);
    }
}

到这里,我们已经启动了好多个服务,如上图所示,在 IDEA 中,采用不同的 profile 来启动的方式,有一个单机的 server,三个普通的服务(端口号不一样),还有我们的消费服务,下一节,你可以从截图中看的更明白。

4. 测试 consumer 与负载均衡

到上一步为止,我们已经可以看到在 Eureka 的 dashboard 中已经有了好多个服务,如下图,主要包括:

  • 一个服务注册 server
  • 一个消费者,用来进行远程调用
  • 三个普通的 client(其端口不一样,来模拟分布式)

这时候,我们调用我们的 consumer 服务,浏览器里输入 http://localhost:8086/hello

得到的结果是不一样的,一共有三个:

  • 8083 端口为您服务!
  • 8084 端口为您服务!
  • 8085 端口为您服务!

正好就是我们想要的结果。

不断的进行测试下去会发现 3 种结果交替出现,说明服务中心自动提供了服务均衡负载的功能。如果我们将服务提供者的数量在提高为 N 个,测试结果一样,请求会自动轮询到每个服务端来处理。

示例源码

所有源码在我的 github 仓库里,传送门:https://github.com/xjtushilei/spring-cloud-simples.git

支持

如果你喜欢~ 给个星

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    944 引用 • 1459 回帖 • 17 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...