@Author:By Runsen
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
服务注册与发现根据功能可划分为服务注册中心、服务提供者、服务消费者三个角色
原理图
服务启动时,会以map的形式注入到服务注册中心,map的key为该服务的别名,value是list集合,list下的value是由ip地址与端口号组成的字符串,value为list集合是因为服务可能是集群的
启动服务消费者,服务消费者调用哪个服务,就会以哪个服务的别名作为key到注册中心获取value值,获取到服务的调用地址List,将其缓存到服务器当中,默认情况下,每隔30秒更新一次服务调用地址,即每隔30秒一次去服务注册中心获取最新的调用地址
当消费者实际调用服务接口时,若list集合大于1,即服务做了集群,则在本地进行负载均衡,决定要调用哪个地址,最后根据调用地址在本地使用httpclient技术实现接口调用
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
Eureka包含两个组件:Eureka Server和Eureka Client。
踩坑之一: 在Windows系统开启eureka-server,路径:C:WindowsSystem32driversetchost
C:WindowsSystem32driversetc
127.0.0.1eureka-server
至于Github的SSH应该使用的Github的SSH开启配置的
创建空的IDEA项目,以及三个consumer-user,eureka-server和provide-ticket SpringBOOT的模块
eureka-server的服务注册功能,创建SpringBOOT需要选用eureka-server
consumer-user和provide-ticket是实现服务发现功能,需要选用eureka-DisCovery-Clien
目录如下
server: port: 8001spring: application: name: provider-ticketeureka: instance: hostname: eureka-server # eureka实例的主机名 client: register-with-eureka: true # 注册服务的时候使用服务的ip地址 fetch-registry: false #不从eureka上来获取服务的注册信息 service-url: defaultZone: http://localhost:8761/eureka/
service中的TicketService
@Servicepublic class TicketService { @Autowired public String getTicket() { System.out.println("8001"); return "《厉害了,我的国》"; }}
@RestControllerpublic class TickerController { @Autowired TicketService ticketService; @GetMapping("/ticket") public String getTicket() { return ticketService.getTicket(); }}
provide-ticket具体目录
访问:http://127.0.0.1:8001/ticket
同时将provide-ticket工程通过打出jar
在provide-ticket换端口,分别打出运行在8001和8002不同端口的两个jar包
eureka-server中的application.yml配置文件
server: port: 8761eureka: instance: hostname: eureka-server # eureka实例的主机名 client: register-with-eureka: false #不把自己注册到eureka上 fetch-registry: false #不从eureka上来获取服务的注册信息 service-url: defaultZone: http://localhost:8761/eureka/
运行访问:http://localhost:8761
打开Eureka的WEB页面
consumer-user中的application.yml配置文件
spring: application: name: consumer-userserver: port: 8200eureka: instance: prefer-ip-address: true # 注册服务的时候使用服务的ip地址 client: service-url: defaultZone: http://localhost:8761/eureka/
controller中的UserController
@RestControllerpublic class UserController { @Autowired RestTemplate restTemplate; @GetMapping("/buy") public String buyTicket(String name) { String s = restTemplate.getForObject("http://PROVIDER-TICKET/ticket", String.class); return name + "购买了" + s; }}
consumer-user启动类
@EnableDiscoveryClient@SpringBootApplicationpublic class ConsumerUserApplication { public static void main(String[] args) { SpringApplication.run(ConsumerUserApplication.class, args); } @LoadBalanced //使用负载均衡机制 @Bean public RestTemplate restTemplate() { return new RestTemplate(); }}
consumer-user目录如下:
consumer-user项目目录
通过java -jar命令运行两个provide-ticket的jar包
启动eureka-server和eureka-server,访问http://localhost:8761/
点击- localhost:consumer-user:8200 访问buy去买票
本文使用Eureka搭建服务注册和服务发现的分布式SpringCloud项目
再自我介绍一下吧。我叫润森,是一个的学习者,分享自己的所学所得。