微服务:整合 Spring cloud Eureka - 服务消费以及Ribbon简单使用
一、前言
前面三篇文章已经介绍如何搭建Eureka注册中心以及服务注册、服务发现。本篇文章将会介绍如何使用Ribbon调用服务,并演示在客户端如何使用负载均衡。
二、Ribbon中RestTemplate的使用
1、代码结构
2、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"> <parent> <artifactId>spring-cloud-register</artifactId> <groupId>com.demo</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>demo-service-consumer</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- eureka-client 服务注册与发现 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- eureka-client 服务注册与发现 --> <!-- ribbon 负载均衡 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> <!-- ribbon 负载均衡 --> </dependencies> </project>
3、RibbonConfig:
package com.demo.service.consumer.config; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; @Configuration public class RibbonConfig { @Bean @LoadBalanced RestTemplate restTemplate(){ return new RestTemplate(); } }
RibbonConfig 类中很简单,只是配置了一个 Ribbon中的RestTemplate,并声明是一个Bean。
4、ConsumerHelloController
package com.demo.service.consumer.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class ConsumerHelloController { @Autowired RestTemplate restTemplate; @RequestMapping("/hello/{name}") public String hello(@PathVariable("name")String name){ String ribbon_url = "http://demo-service-provider/hello/sayhello/" + name; String msg =restTemplate.getForEntity(ribbon_url,String.class).getBody(); System.out.println("服务返回信息为:" + msg); return "服务返回信息为:" + msg; } }
三、运行分析
1、第一步启动Eureka注册中心 - demo-register,可以参考《微服务:整合 Spring Cloud Eureka - 注册中心 Eureka Server》。
2、第二步启动服务提供者 - demo-service-provider,可以参考 《微服务:整合 Spring cloud Eureka - 服务注册 Eureka Client 》 。
3、第三步启动服务消费者 - demo-service-consumer。
4、在浏览器中打开:http://localhost:8201/hello/tom
服务消费者使用Ribbon-restTemplete调用服务已经成功。
四、总结
@RequestMapping("/hello/{name}") public String hello(@PathVariable("name")String name){ String ribbon_url = "http://demo-service-provider/hello/sayhello/" + name; String msg =restTemplate.getForEntity(ribbon_url,String.class).getBody(); System.out.println("服务返回信息为:" + msg); return "服务返回信息为:" + msg; }
从以上代码可以看出来:
1、restTemplete调用的url地址为:"http://demo-service-provider/hello/sayhello/" + name。
2、Ribbon拿到这个地址后,会解析出路由中的ServiceId:demo-service-provider
3、通过demo-service-provider找到服务提供者的ip:port 列表。
4、通过ip:port 列表按照负载均衡策略选出一个url地址。
5、重新拼接url地址,此时才开始真正的调用远程服务:demo-service-provider
原文地址:https://www.cnblogs.com/yansg/p/12535671.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Kafka分区分配策略(Partition Assignment Strategy)
- 内网渗透-代理篇(一)
- java学习应用篇|逃不掉的HelloWorld
- java学习原理篇|java程序运行套路
- 架构师成长之路系列(二)
- 前端性能优化 24 条建议(2020)
- 【Flutter 实战】大量复杂数据持久化
- GBDT+LR:Practical Lessons from Predicting Clicks on Ads
- 告别setState()! 优雅的UI与Model绑定 Flutter DataBus使用~
- k8s etcd 的实现原理
- iOS动态View的探索
- 安卓开发的瑞士军刀“Retrofit2框架”
- R语言中的广义线性模型(GLM)和广义相加模型(GAM):多元(平滑)回归分析保险资金投资组合信用风险敞口
- 来玩 TencentOS tiny 物联网终端操作系统
- LeetCode | 66.加一