springcloud eureka注册与消费快速上手
springcloud eureka注册与消费快速上手
1、eureka 简介
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。Eureka包含两个组件:Eureka Server和Eureka Client。Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就别一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。(来自百度百科:https://baike.baidu.com/item/Eureka/22402835?fr=aladdin)
2、springboot引入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
3、注册服务
@SpringBootApplication @EnableEurekaServer public class EurekaserverApplication { public static void main(String[] args) { SpringApplication.run(EurekaserverApplication.class, args); } }
4、配置文件
server.port=8000 spring.application.name=eureka-server eureka.instance.hostname=localhost eureka.client.fetch-registry=false #检索服务 eureka.client.register-with-eureka=false #注册服务 eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
5、注册客户端
@SpringBootApplication @EnableDiscoveryClient public class EurekaclientApplication { public static void main(String[] args) { SpringApplication.run(EurekaclientApplication.class, args); } }
6、配置文件
server.port=6001 spring.application.name=eureka-client eureka.client.service-url.defaultZone=http://localhost:8000/eureka/
7、提供服务和消费服务
提供服务本身并没有什么特殊的地方,使用springMVC写的restController下的各个requestmapping就是提供的服务。
消费服务则比较重要:
1、ribbon
引入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>
restTemplate的注册
@SpringBootApplication
@EnableDiscoveryClient
public class EurekaclientApplication {
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(EurekaclientApplication.class, args);
}
}
restTemplate的使用
@Slf4j @Service public class UserRibbonService { public UserRibbonService() { } @Autowired private RestTemplate restTemplate; public String addUser(){ ResponseEntity<String> forEntity = restTemplate.getForEntity("http://user-service/user", String.class); String body = forEntity.getBody().toString(); return body; } }
使用restTemplate方式比较繁琐,需要写大量的代码去访问服务,解析响应。ribbon其实是作为一个负载均衡的中间件,有大量配置去更改负载均衡的各种参数,这里不细说了。
2、Feign
Feign是通过编写了一个服务提供者的接口,自动实现了消费服务的一种方式,比restTemplate更方便一些。
引入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
注册feign
@SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class EurekaclientApplication { public static void main(String[] args) { SpringApplication.run(EurekaclientApplication.class, args); } }
使用feignclient编写接口
@FeignClient("user-service") // user-service 是所指定的服务提供者serviceID
@Component
public interface UserFeign {
// 根据服务提供者的接口编写,保证一样。
@RequestMapping(value = "/user", method = RequestMethod.GET)
String addUser();
}
自动注入接口,调用服务
@Slf4j @Service public class UserService { public UserService() { } @Autowired private UserFeign userFeign; public String addUser() { log.info("addUser"); return userFeign.addUser(); } }
Feign 可以设置ribbon的属性,这里不演示了。
还有其他诸如:Hystrix(熔断)、zuul(网关)、config(远程配置)......等,我以后再写。
这篇文写的这么简陋应该没什么人转载吧
不过转载的话,请注明来源。

浙公网安备 33010602011771号