服务发现与消费,其服务发现的任务是由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 Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能,服务 ...

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

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

  7. 1 Spring Cloud Eureka服务治理

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

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

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

  9. Spring Cloud Eureka 服务治理

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

随机推荐

  1. mysql打不开表问题解决方案

    做开发时候某一表怎么也打不开,数据也不多,网上查了按下面这篇文章完美解决,但是要记得用root登录mysql: 记一次MySQL中Waiting for table metadata lock的解决方 ...

  2. 【Unity3D】Unity3D 摄像机带透明截图

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/CropCamera.html ↓↓↓下面的废话可以不看↓↓↓ 最近处理了一批我的游戏的图标,步骤特别繁琐, 需要先 ...

  3. (二十九)java条件控制语句培训笔记

    java结构控制语句示例:if,if else,switch case 定义三个变量: :在这个例子中,if并列,则每一次都会进行判断,条件为true则输出里边的内容 ,因此,这里会输出one和fou ...

  4. Jquery常用操作:checkbox、select取值,radio、checkbox、select选中及其相关

    常用Jquery操作:checkbox取值.select取值.radio选中.checkbox选中.select选中及其相关: 1.影藏页面元素 使用jquery真的很方便,比如要控制div的显示与隐 ...

  5. 从DataTable中查询数据

    /// <summary> /// 从DataTable中查询数据 /// </summary> /// <param name="tb">待处 ...

  6. C#数据缓存介绍及Caching通用帮助类整理

    C#缓存主要是为了提高数据的读取速度.因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能. 以下为 ...

  7. 芝麻HTTP:TensorFlow LSTM MNIST分类

    本节来介绍一下使用 RNN 的 LSTM 来做 MNIST 分类的方法,RNN 相比 CNN 来说,速度可能会慢,但可以节省更多的内存空间. 初始化 首先我们可以先初始化一些变量,如学习率.节点单元数 ...

  8. Radar Installation POJ - 1328

    Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. ...

  9. lvy打包到本地

    图解

  10. Angular通过订阅观察者对象实现不同组件中数据的实时传递

    在angular官方定义中,组件直接的数据交换只要在父子直接传递,但是我们在项目中经常需要在各种层级之间传递数据,下面介绍关于订阅可观察对象实现的数据传递. 首先定义一个服务app.sevice.ts ...