大家好,我是润森。期末化学已挂,谁来烧纸,挂得又有动力学习了?
SpringCloud
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
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实战
开启eureka-server
踩坑之一: 在Windows系统开启eureka-server
,路径:C:\Windows\System32\drivers\etc\host
127.0.0.1 eureka-server
至于Github的SSH应该使用的Github的SSH开启配置的
创建项目
创建空的IDEA项目,以及三个consumer-user,eureka-server和provide-ticket SpringBOOT的模块
eureka-server
eureka-server的服务注册功能,创建SpringBOOT需要选用eureka-server
consumer-user和provide-ticket
consumer-user和provide-ticket是实现服务发现功能,需要选用eureka-DisCovery-Clien
目录如下
provide-ticket
provide-ticket中的application.yml
server:
port: 8001
spring:
application:
name: provider-ticket
eureka:
instance:
hostname: eureka-server # eureka实例的主机名
client:
register-with-eureka: true # 注册服务的时候使用服务的ip地址
fetch-registry: false #不从eureka上来获取服务的注册信息
service-url:
defaultZone: http://localhost:8761/eureka/
service中的TicketService
@Service
public class TicketService {
@Autowired
public String getTicket() {
System.out.println("8001");
return "《厉害了,我的国》";
}
}
Controller中的TickerController
@RestController
public 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
eureka-server中的application.yml配置文件
server:
port: 8761
eureka:
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
consumer-user中的application.yml配置文件
spring:
application:
name: consumer-user
server:
port: 8200
eureka:
instance:
prefer-ip-address: true # 注册服务的时候使用服务的ip地址
client:
service-url:
defaultZone: http://localhost:8761/eureka/
controller中的UserController
@RestController
public 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
@SpringBootApplication
public class ConsumerUserApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerUserApplication.class, args);
}
@LoadBalanced //使用负载均衡机制
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
consumer-user目录如下:
测试运行
通过java -jar
命令运行两个provide-ticket的jar包
启动eureka-server和eureka-server,访问http://localhost:8761/
点击- localhost:consumer-user:8200 访问buy去买票
总结
本文使用Eureka搭建服务注册和服务发现的分布式SpringCloud项目
再自我介绍一下吧。我叫润森,是一个的学习者,分享自己的所学所得。
扫描公众号回复IDEA
关键字领取破解文档和jar包。