idea搭建springcloud项目_Eureka搭建分布式SpringCloud项目

@Author:By Runsen

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:WindowsSystem32driversetchost

C:WindowsSystem32driversetc

127.0.0.1eureka-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: 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 "《厉害了,我的国》";    }}

Controller中的TickerController

@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

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

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项目

再自我介绍一下吧。我叫润森,是一个的学习者,分享自己的所学所得。

你可能感兴趣的:(resttemplate,eureka,springcloud,eureka搭建双节点)