内容简介:上一篇文章我们介绍了创建一个通过
上一篇文章我们介绍了 Eureka
服务注册中心
的搭建,这篇文章介绍一下如何使用 Eureka
服务注册中心
,搭建一个简单的 服务端注册服务
,由 客户端
通过 Ribbon
负载均衡
地去调用服务案例。
正文
1. 创建服务提供者
创建一个 service-hi
的 Module
,创建完成后的 pom.xml
如下:
<?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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>io.ostenant.github.springcloud</groupId> <artifactId>service-hi</artifactId> <version>0.0.1-SNAPSHOT</version> <name>service-hi</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Dalston.SR1</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-cloud-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> 复制代码
通过 注解
@EnableEurekaClient
表明自己是一个 Eureka Client
。
@SpringBootApplication @EnableEurekaClient @RestController public class ServiceHiApplication { public static void main(String[] args) { SpringApplication.run(ServiceHiApplication.class, args); } } 复制代码
创建一个控制器 HelloController
,对外提供一个 /hi
的 HTTP
的服务。在响应数据中返回当前 服务实例
的 端口号
。
@RestController public class HelloController { @Value("${server.port}") private String port; @RequestMapping("/hi") public String hi(@RequestParam String name) { return "Hi " + name + ", I am from port: " + port; } } 复制代码
在 配置文件
中注明的 服务注册中心
的地址, application.yml
配置文件如下:
spring: active: profiles: service-hi1 # service-hi2 --- spring: profiles: service-hi1 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ server: port: 8763 spring: application: name: service-hi --- spring: profiles: service-hi2 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ server: port: 8764 spring: application: name: service-hi 复制代码
分别以 spring.profiles.active=hi1
和 spring.profiles.active=hi2
作为 Spring Boot
的 启动命令参数
,在 端口号
8763
和 8764
启动 2
个 服务提供者
实例。
2. 创建服务消费者
重新新建 service-ribbon
的 Module
,在它的 pom.xml
文件分别引入 起步依赖
spring-cloud-starter-eureka
、 spring-cloud-starter-ribbon
、 spring-boot-starter-web
,代码如下:
<?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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>io.ostenant.github.springcloud</groupId> <artifactId>service-ribbon</artifactId> <version>0.0.1-SNAPSHOT</version> <name>service-ribbon</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Dalston.SR1</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</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> 复制代码
在项目的 配置文件
指定服务的 服务注册中心
的地址, 应用名称
为 service-ribbon
, 端口号
为 8762
。完整配置文件 application.yml
如下:
eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ server: port: 8762 spring: application: name: service-ribbon 复制代码
在应用 启动类
上,通过 @EnableDiscoveryClient
向 服务中心
注册自身信息,向 Spring Boot
容器注册一个 RestTemplate
对象,并通过 @LoadBalanced
注解表明这个 RestRemplate
开启 客户端负载均衡
的功能。
@SpringBootApplication @EnableDiscoveryClient public class ServiceRibbonApplication { public static void main(String[] args) { SpringApplication.run(ServiceRibbonApplication.class, args); } @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } } 复制代码
写一个 测试接口
,注入上面的 RestTemplate
对象来消费 service-hi
服务的 /hi
接口。在 RestTemplate
的 URL
中,我们将具体 服务生产者
的 主机名称
和 端口号
替换为它的 服务名称
。
@RestController public class HelloController { @Autowired private RestTemplate restTemplate; @RequestMapping(value = "/hi") public String requestForHi(@RequestParam String name){ return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class); } } 复制代码
在浏览器上多次访问 http://localhost:8762/hi?name=ribbon
,浏览器交替显示:
Hi ribbon, I am from port: 8763 Hi ribbon, I am from port: 8764
在具体的调用过程中, Ribbon
提供的 @LoadBalanced
注解会从 Eureka Server
上查询 服务列表
,根据 服务名称
找到 SERVICE-HI
的 服务实例
。如果有多个 SERVICE-HI
实例, Ribbon
会根据 客户端负载均衡
算法筛选其中一台,并把 URL
中的 SERVICE-HI
替换为具体实例的 主机名称
和 端口号
。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 基于 Pub/Sub 的同步 RRPC 调用实战
- 实战使用 Arthas 排查生产问题:实例方法接口调用
- Python实战---制作专属有声小说(调用百度语音合成接口)
- Jaeger-分布式调用链跟踪系统理论与实战
- Spring Cloud实战系列(三) - 声明式客户端调用Feign
- FGC实战:如何用Idea揪出开源组件调用System.gc导致频繁FGC
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数据结构与算法分析
韦斯 (Mark Allen Weiss) / 机械工业出版社 / 2009-1-1 / 55.00元
本书是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。 随着计算机速度的不断增加和功能的日益强大,人们对有效编程和算法分析的要求也不断增长。本书把算法分析与最有效率的Java程序的开发有机地结合起来,深入分析每种算法,内容全面、缜密严格,并细致讲解精心构造程序的方法。一起来看看 《数据结构与算法分析》 这本书的介绍吧!