服务发现与消费,其服务发现的任务是由Eureka的客户端完成,而服务的消费任务由Ribbon、JerseyClient等完成,Ribbon是一个基于HTTP和TCP的客户端负载均衡器;使用JerseyClient是一个基于HTTP的客户端调用组件,需要需要增加负载均衡器,需要自己来实现,示例代码如下:

  • 创建一个Spring Boot 的基础工程来实现服务消费者,并在pom.xml 中引入必须依赖项 spring-cloud-starter-eureka,引入 spring-cloud-starter-web 来实现Spring MVC 的REST服务进行测试

    <?xml version="1.0" encoding="UTF-8"?>

    <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>org.drsoft.consumer</groupId>

    <artifactId>consumer-helloservice</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <packaging>jar</packaging>

    <name>consumer-helloservice</name>

    <description>Demo project for Spring Boot</description>

    <parent>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-parent</artifactId>

    <version>1.5.6.RELEASE</version>

    <relativePath/> <!-- lookup parent from repository -->

    </parent>

    <properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

    <java.version>1.8</java.version>

    <spring-cloud.version>Dalston.SR2</spring-cloud.version>

    </properties>

    <dependencies>

    <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-test</artifactId>

    <scope>test</scope>

    </dependency>

    </dependencies>

    <dependencyManagement>

    <dependencies>

    <dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-dependencies</artifactId>

    <version>${spring-cloud.version}</version>

    <type>pom</type>

    <scope>import</scope>

    </dependency>

    </dependencies>

    </dependencyManagement>

    <build>

    <plugins>

    <plugin>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-maven-plugin</artifactId>

    </plugin>

    </plugins>

    </build>

    </project>

  • 创建应用主类 ConsumerHelloserviceApplication ,通过 @EanbleDiscoveryClient 注解将应用注册为Eureka 客户端应用,以获取服务发现的能力,代码如下:

    @EnableDiscoveryClient

    @SpringBootApplication

    public class ConsumerHelloserviceApplication {

    public static void main(String[] args) {

    SpringApplication.run(ConsumerHelloserviceApplication.class, args);

    }

    }

  • 创建 ConsumerController 类,并实现 /consumer 接口,在接口中对服务的调用,这里使用的是服务的名而不是一个具体的地址,服务消费Java代码:

    @RestController

    public class ConsumerController {

    @Autowired

    private DiscoveryClient discoveryClient;

    @RequestMapping (value = "/consumer", method = RequestMethod.GET)

    public String helloConsumer() {

    List<ServiceInstance> serviceInstanceList = discoveryClient.getInstances("org.drsoft.webservice.helloservice");

    StringBuilder stringBuilder = new StringBuilder();

    URI uri = null;

    for (ServiceInstance instance : serviceInstanceList) {

    stringBuilder.append("host=" + instance.getHost());

    stringBuilder.append("port=" + instance.getPort());

    stringBuilder.append("serviceId=" + instance.getServiceId());

    stringBuilder.append("uri=" + instance.getUri());

    stringBuilder.append("\n");

    uri = instance.getUri();

    }

    String uriString = uri.toString() + "/hello/get";

    stringBuilder.append("response body=" + new RestTemplate().getForEntity(uriString, String.class).getBody());

    return stringBuilder.toString();

    }

    }

  • 在 application.properties 中配置Eureka 服务注册中心的位置,需要和服务提供者的一致,否则是无法发现服务的,同时设置该消费者的端口号,代码如下:

    server.port=8090

    spring.application.name=consumer-helloservice

    eureka.client.service-url.defaultZone=http://eurekaserver1:1111/eureka/,http://eurekaserver2:1112/eureka

  • 启动consumer-helloservice应用后,我们可以在Eureka信息面板中看到,我们实现的 CONSUMER-HELLOSERVICE 服务,访问地址 http://localhost:8090/consumer 可以看到请求返回内容:

    host=192.168.196.187port=8085serviceId=ORG.DRSOFT.WEBSERVICE.HELLOSERVICEuri=http://192.168.196.187:8085 response body=get ok

Spring Cloud Eureka 服务发现与消费的更多相关文章

  1. 笔记:Spring Cloud Eureka 服务发现与消费

    服务发现与消费,其服务发现的任务是由Eureka的客户端完成,而服务的消费任务由Ribbon.JerseyClient等完成,Ribbon是一个基于HTTP和TCP的客户端负载均衡器:使用Jersey ...

  2. Spring Cloud Eureka 服务发现 4.2

      在微服务架构中,服务发现可以说是最为核心和基础的模块,该模块主要用于实现各个微服务实例的自动化注册与发现.在Spring Cloud的子项目中,Spring Cloud Netflix提供了Eur ...

  3. SpringCloud微服务实战一:Spring Cloud Eureka 服务发现与注册中心(高可用实列为两个注册中心)

    微服务架构: 微服务架构的核心思想是,一个应用是由多个小的.相互独立的.微服务组成,这些服务运行在自己的进程中,开发和发布都没有依赖.不同服务通过一些轻量级交互机制来通信,例如 RPC.HTTP 等, ...

  4. SpringBoot + Spring Cloud Eureka 服务注册与发现

    什么是Spring Cloud Eureka Eureka是Netflix公司开发的开源服务注册发现组件,服务发现可以说是微服务开发的核心功能了,微服务部署后一定要有服务注册和发现的能力,Eureka ...

  5. spring cloud Eureka 服务注册发现与调用

    记录一下用spring cloud Eureka搭建服务注册与发现框架的过程. 为了创建spring项目方便,使用了STS. 一.Eureka注册中心 1.新建项目-Spring Starter Pr ...

  6. 1 Spring Cloud Eureka服务治理

    注:此随笔为读书笔记.<Spring Cloud微服务实战> 什么是微服务? 微服务是将一个原本独立的系统拆分成若干个小型服务(一般按照功能模块拆分),这些小型服务都在各自独立的进程中运行 ...

  7. 1 Spring Cloud Eureka服务治理(上)

    注:此随笔为读书笔记.<Spring Cloud微服务实战>,想学习Spring Cloud的同伴们可以去看看此书,里面对源码有详细的解读. 什么是微服务? 微服务是将一个原本独立的系统拆 ...

  8. 笔记:Spring Cloud Eureka 服务治理

    Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能,服务 ...

  9. Spring Cloud Eureka 服务治理

    Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能,服务 ...

随机推荐

  1. SSL/TLS Server supports TLSv1.0

    远程登录服务器后打开注册表编辑器,点开HKEY-LOCAL-MACHINE,SYSTEM,CURRENTCONTROLSET下的Control 找到SecurityProviders下的SCHANNE ...

  2. Samsung_tiny4412(驱动笔记04)----volatile,container_of,file_operations,file,inode

    /*********************************************************************************** * * volatile,co ...

  3. Java调用Lua脚本(热载实现)

    前言: Lua作为解析执行的脚本语言, 往往是易变逻辑编写的首选语言, 尤其是在游戏领域. C/C++和Lua的结合, 往往了标配. 比如Redis, Nginx其对Lua的支持, 也是杠杠的. 当然 ...

  4. 【02_258】Add Digits

    Add Digits Total Accepted: 49702 Total Submissions: 104483 Difficulty: Easy Given a non-negative int ...

  5. pc端复制方法

    dom结构如下: <div id="btn">复制</div> <input id="content" type="te ...

  6. windows apache "The requested operation has failed" 启动失败

    找到失败原因,进入cmd(win+r快捷键,输入cmd)命令行下 进入到你的apache  bin目录下: 每个人错误可能不同,根据自己问题去相应改

  7. 《DSP using MATLAB》Problem 7.1

    只有春节那么几天才能和家人团聚,看着爸爸妈妈一年比一年老,自己还是一无所有,照顾好自己尚且惭愧,真是悲从中来,又能怎么办呢, 唯有奋发努力,时不我待,多想想怎么赚钱,加油. 代码: function ...

  8. python-基础-文件

    一.文件操作 打开文件时,需要指定文件路径和以何等方式打开文件, 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 打开文件的模式有: r ,只读模式[默认模式 ...

  9. 【BZOJ1030】【JSOI2007】文本生成器

    我现在连AC自动姬都不会,怎么办嘛QAQ 原题: JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以 ...

  10. 【liunx】linux后台执行命令:&和nohup

    当我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件.对于密集访问磁盘的进程,我们更希望它能够在每天的非负荷高峰时间段运行(例如凌晨).为 ...