Spring Cloud 入门Eureka -Consumer服务消费(一)
2024-09-03 05:26:26
这里介绍:LoadBalancerClient
接口,它是一个负载均衡客户端的抽象定义,下面我们就看看如何使用Spring Cloud提供的负载均衡器客户端接口来实现服务的消费。
引用之前的文章中构建的eureka-server作为服务注册中心、eureka-client作为服务提供者作为基础。
1、pom.xml 和eureka-client一样的配置
<?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>com.example</groupId>
<artifactId>eurekaConsumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>eurekaConsumer</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.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>
</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>Dalston.SR3</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>
2、application, server使用了8000,client使用了8001端口,这里我们使用8002
spring.application.name=eurekaConsumer
server.port=8002
#指定eureka-servcer注册中心的地址
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
3、Spring Cloud 使用的是rest api, 这里我们初始化RestTemplate,用来真正发起REST请求
package com.example.demo; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate; @EnableDiscoveryClient
@SpringBootApplication
public class EurekaConsumerApplication { @Bean
public RestTemplate restTemplate() {
return new RestTemplate();
} public static void main(String[] args) {
SpringApplication.run(EurekaConsumerApplication.class, args);
}
}
4、创建一个消费接口
package com.example.demo.controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate; @RestController
public class ClientConsumerController { @Autowired
LoadBalancerClient loadBalancerClient; @Autowired
RestTemplate restTemplate; @GetMapping("/consumer")
public String all() {
// 发起REST请求
return restTemplate.getForObject(getUrl("eurekaClient", "/all"), String.class);
} /**
* 获取指定url
* @param clientApplicationName 指定的服务提供名
* @param interfaceName 需要消费的接口名
* @return
*/
private String getUrl(String clientApplicationName, String interfaceName) {
// 使用loadBalancerClient的choose函数来负载均衡的选出一个eurekaClient的服务实例
ServiceInstance serviceInstance = loadBalancerClient.choose(clientApplicationName);
// 获取之前eurekaClient /all接口地址
String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + interfaceName;
System.out.println(url);
return url;
} }
最后依次启动注册服务server,服务提供者client ,服务消费consumer,可以看到,访问http://localhost:8000/服务中心结果如下:
再然后访问http://localhost:8002/consumer,去消费 eurekaclient 的 all接口
由此可以看出,消费服务 ,需要指定服务提供方,和需要消费的接口,而引入LoadBalancerClient ,需要host,port,并且配置也很不友好,下面一篇会介绍Ribbon
最新文章
- 使用SQL语句查询日期(当月天数,当月第一天,当月最后一天,本年最后一天,当月第一个星期) 日期转字符串
- 02-C#入门(循环)
- ASP.NET MVC PartialView用法
- 浅谈scrum站立会议
- [转]Android输出Log到文件
- 响应式Web设计(Responsive Web design)
- Android 四种简单的动画(淡入淡出、旋转、移动、缩放效果)
- XAML中ContentControl,ItemsControl,DataTemplate之间的联系和区别
- SPRING IN ACTION 第4版笔记-第三章Advancing wiring-001-DataSource在应用和开发环境之间切换 profile
- FlexSlider是一个非常出色的jQuery滑动切换插件
- Dynamics CRM 2013 初体验(3):新增加的功能
- Hibernate_13_QBC查询
- JAVA学习笔记(3)—— 抽象类与接口
- make menuconfig 笔记
- Vue基础进阶 之 过渡效果
- java:给你一个数组和两个索引,交换下标为这两个索引的数字
- WPF:数据和行为
- Java 13 - Java 数组
- 基础拾遗----RabbitMQ
- HDU 2086 A1 = ?