Spring Cloud Eureka 实践(二)
接上一篇的内容,Eureka服务已经启动成功后,可以尝试开发服务的提供者与消费者,并注册到Eureka来实现服务的发现与调用。
首先,在父工程中继续创建服务提供者的Module,最新的目录结构如下图所示:

pom中需要添加Eureka客户端的依赖:
<artifactId>spring-cloud-provider</artifactId> <dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
启动类中也需要添加Eureka客户端的注解@EnableDiscoveryClient:
@SpringBootApplication
@EnableDiscoveryClient
public class EurekaProviderApplication { public static void main(String[] args) {
SpringApplication.run(EurekaProviderApplication.class, args);
}
}
有一些资料里会提到,添加@EnableEurekaClient或者@EnableDiscoveryClient都可以,我实际替换验证了一下,也都是可以。继续查询相关资料,两者的主要区别如下:
@EnableDiscoveryClient注解是基于spring-cloud-commons依赖,并且在classpath中实现。
@EnableEurekaClient注解是基于spring-cloud-netflix依赖,只能为Eureka作用。
这样就可以理解为什么官方也建议使用@EnableDiscoveryClient了,因为这种注解方式其实会更加通用,支持对接多种注册中心。
application.yml中需要指定上一篇中已经创建完成的Eureka地址和端口:
server:
port: 7070
spring:
application:
name: spring-cloud-service-provider
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:9090/eureka
fetch-registry: true
register-with-eureka: true
接下来先后启动Eureka服务和提供者的应用来检查一下服务提供端是否注册成功:

在Controller层添加一个返回服务名的功能,目录如下:

代码也贴一下:
@RestController
@RequestMapping("/query")
public class ServiceController { @Value("${spring.application.name}")
private String serviceName; @GetMapping("/getServiceName")
public String getServiceName() {
return serviceName;
}
}
效果是什么样呢,我们做一个简单的验证:

没问题,那么接下来添加服务调用者的应用,继续在父工程创建新的Module,pom和启动类直接参考服务提供者即可。
application.yml内容如下:
server:
port: 8080
spring:
application:
name: spring-cloud-service-caller
eureka:
client:
service-url:
defaultZone: http://localhost:9090/eureka
register-with-eureka: true
fetch-registry: true
区别于Dubbo的RPC调用,Spring Cloud Eureka通过REST访问,创建RestTemplate的实例用于调用:
@Configuration
public class RestTemplateConfig { @Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
继续在Controller层添加调用者的相关逻辑:
@RestController
@RequestMapping("/caller")
public class ServiceCaller { @Autowired
private RestTemplate restTemplate; @Autowired
private DiscoveryClient discoveryClient; @GetMapping("/queryServiceName")
public String queryServiceName() { List<ServiceInstance> instances = discoveryClient.getInstances("spring-cloud-service-provider");
ServiceInstance instance = instances.get(0);
String ip = instance.getHost();
int port = instance.getPort();
String url = "http://" + ip + ":" + port + "/query/getServiceName";
return restTemplate.getForObject(url, String.class);
}
}
需要注意,这里别选错了,否则是无法根据服务名来获取实例的:

此时的调用者应用目录结构:

最后再验证一下效果:

参考资料:
https://blog.csdn.net/yuanshangshenghuo/article/details/106962926
https://blog.csdn.net/lizhiqiang1217/article/details/89883519
Spring Cloud Eureka 实践(二)的更多相关文章
- Spring Cloud Eureka(二):Eureka 注册中心体验
1.Eureka 简述 本文主要从应用角度体验一下注册中心的搭建和使用,后文会由浅入深学习Spring Cloud Eureka 的各种原理和机制. Spring Cloud Eureka 是 Spr ...
- Spring Cloud Eureka 实践(一)
Spring Cloud Eureka是Spring Cloud Netflix微服务套件中的一部分,主要在Spring Cloud架构中提供服务注册发现的功能.那么是不是可以尝试在本地搭一个单例Eu ...
- Spring Cloud Eureka(一): 开篇说明及目录汇总
开篇简述 基于Spring Boot 和 Spring Cloud 的微服务应用,本人在工作中已经使用两年有余了,伴随着个人学习计划的实施,希望借助博文的方式,将工作中使用到的技术点体系化的总结出来, ...
- spring cloud 入门系列二:使用Eureka 进行服务治理
服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现. Spring Cloud Eureka是Spring Cloud Netflix 微服务套件的一部分 ...
- Spring Cloud Eureka 服务注册中心(二)
序言 Eureka 是 Netflix 开发的,一个基于 REST 服务的,服务注册与发现的组件 它主要包括两个组件:Eureka Server 和 Eureka Client Eureka Clie ...
- spring cloud深入学习(二)-----服务注册中心spring cloud eureka
服务治理 主要用来实现各个微服务实例的自动化注册与发现,为啥需要这玩意呢?在一开始比如A系统调用B服务,可能通过手工维护B服务的实例,并且还得采用负载均衡等方式,这些全部都得需要手工维护,等后面系统越 ...
- 【Spring Cloud 系列】 二、Spring Cloud Eureka 的第一印象
Eureka : 翻译翻译,找到了!(惊讶语气) Spring CLoud 中的 Spring Cloud Eureka,用于 分布式项目中的服务治理.是对Netflix 套件中的Eureka 的二次 ...
- 第三章 服务治理:Spring Cloud Eureka
Spring Cloud Eureka是Spring Cloud Netflix 微服务套件中的一部分,它基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的服务治理功能.Spri ...
- 【SpringCloud微服务实战学习系列】服务治理Spring Cloud Eureka
Spring Cloud Eureka是Spring Cloud Netflix微服务中的一部分,它基于NetFlix Sureka做了二次封装,主要负责完成微服务架构中的服务治理功能. 一.服务治理 ...
随机推荐
- Dubbo 实现一个Route Factory(用于灰度发布)
Dubbo 可以实现的扩展很多, 官方文档在这: https://dubbo.apache.org/zh/docs/v2.7/dev/impls/ (太简单了....) 下面我们实现一个Route F ...
- 用Python预测双色球福利彩票中奖号码(请不要当真)
前言 双色球是中国福利彩票的一种玩法. 红球一共6组,每组从1-33中抽取一个,六个互相不重复.然后蓝球是从1-16中抽取一个数字,这整个组成的双色球 python从零基础入门到实战 今天,我们就用P ...
- 关于C语言中对数字的扩展和缩短
关于对数字的扩展:如果需要在不改变他的类型的情况下去扩展一个数字 有符号数字: 如果最高位为0---向左按位复制0 如果最高位为1---向左按位复制1 无符号数字:向左按位复制0即可 对于数字的缩短: ...
- for循环排它算法(经典实用)
核心代码 let lis = document.querySelectorAll("li"); for(let i = 0; i < lis.length; i ++) { ...
- 从理发店小弟到阿里P10大牛,一位高中学渣的“登天”之路
蚂蚁金服,可能是众多程序猿眼中梦寐以求的归宿,无数拿过数不清奖状的各个高校走出的学子精英都挤破头皮,只为能在蚂蚁占有一席之地. 蚂蚁金服里不乏各种深藏不露的大佬,到了那里才会深刻明白一山还有一山高这句 ...
- 用notepad2代替notepad
Windows自带的notepad.exe功能比较弱,notepad2是一个比较好的替代方案,但在任何系统调用notepad的时候都能用notepad2代替并不是一件容易的事,下面是一个解决方法: h ...
- vue源码解析之响应式原理
关于defineReactive等使用细节需要自行了解 一些关键知识点 $mount时 会 new Watcher 把组件的 updateComponent 方法传给watcher 作为getter ...
- 《微服务架构设计模式》读书笔记 | 第4章 使用Saga管理事务
目录 前言 1. 微服务架构下的事务管理 1.1 分布式事务的挑战 1.2 一个Saga的示例 1.3 Saga使用补偿事务来回滚所作出的改变 2. Saga的协调模式 2.1 两种Saga协调模式 ...
- 题解 Sequence
传送门 只会爆搜系列 关于「本质不同的子序列个数」:限定长度,无限制(就是这题) 无限制的柿子是(令 \(dp[i]\) 为以 \(i\) 为结尾的不同子序列个数) \(dp[i] = \sum dp ...
- js函数聚合
//掺杂类实现聚合(有的时候,我们需要某个或多个类里的一些方法函数) //将要被聚合的函数 var JSON = { toJsonString: function () { var output = ...