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做了二次封装,主要负责完成微服务架构中的服务治理功能. 一.服务治理 ...
随机推荐
- GhostScript 沙箱绕过(命令执行)漏洞(CVE-2019-6116)
影响范围 Ghostscript 9.24之前版本 poc地址:https://github.com/vulhub/vulhub/blob/master/ghostscript/CVE-2019-61 ...
- 声明提前(hoist)
程序执行前,都会先找到var声明的变量和function声明的函数. 一.var声明的变量 程序 结果 console.log(a); var a=10; console.log(a); //unde ...
- 【数据结构与算法】字符串匹配(Rabin-Karp 算法和KMP 算法)
Rabin-Karp 算法 概念 用于在 一个字符串 中查找 另外一个字符串 出现的位置. 与暴力法不同,基本原理就是比较字符串的 哈希码 ( HashCode ) , 快速的确定子字符串是否等于被查 ...
- 特殊回文数 BASIC-9
特殊回文数 代码 import java.util.Scanner; /*123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这样的五位和六位十进制数, 满足 ...
- 定制bash命令提示符
使用shell时经常要知道当前路径,如果将它写在提示符里很节省很多敲pwd的动作,方法是在启动文件(.bash_profile, .bashrc)里加上: export PS1="[\u@\ ...
- 安鸾CTF Writeup SSRF03
SSRF03 题目URL: http://whalwl.host:2000/ 其中的弯路我就不多说了,直接上解题思路 方法和SSRF02类似都是找内网机器端口,继续用ssrf02 这道题的方法:htt ...
- 位(bit)、字节(Byte)、字(Word)、双字(Dword)之间的关系
位(bit): bit(简写:b),是计算机数据存储最小的单位,二进制中,0或者1就是一个位(比特位)bit. 字节: Byte(简写:B),是计算机信息技术用于计量存储容量的一种计量单位,通常情况下 ...
- docker安装完权限问题
在用户权限下docker 命令需要 sudo 否则出现以下问题 通过将用户添加到docker用户组可以将sudo去掉,命令如下 sudo groupadd docker #添加docker用户组 su ...
- .net 温故知新:【5】异步编程 async await
1.异步编程 异步编程是一项关键技术,可以直接处理多个核心上的阻塞 I/O 和并发操作. 通过 C#.Visual Basic 和 F# 中易于使用的语言级异步编程模型,.NET 可为应用和服务提供使 ...
- Fancytree实例
一.实例 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> ...