专栏首页毛利学Python原创 | Eureka搭建分布式SpringCloud项目

原创 | Eureka搭建分布式SpringCloud项目

大家好,我是润森。期末化学已挂,谁来烧纸,挂得又有动力学习了?

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

C:\Windows\System32\drivers\etc

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目录如下:

consumer-user项目目录

测试运行

通过java -jar命令运行两个provide-ticket的jar包

启动eureka-server和eureka-server,访问http://localhost:8761/

点击- localhost:consumer-user:8200 访问buy去买票

总结

本文使用Eureka搭建服务注册和服务发现的分布式SpringCloud项目

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

本文分享自微信公众号 - Python之王(gh_70a22bfa8e3a),作者:小sen

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Eureka实现相互注册

    Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的...

    润森
  • springboot中的cache(三)

    Redis 是一个高性能的 key-value 数据库。它支持存储的 value 类型很多,包括 String(字符串)、List(列表)、Set(集合)、So...

    润森
  • 八十二、Python | Leetcode贪心算法系列

    作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件。导致翘课严重,专业排名中下。.在大学60%...

    润森
  • Spring Cloud Eureka:服务注册与发现

    在微服务架构中往往会有一个注册中心,每个微服务都会向注册中心去注册自己的地址及端口信息,注册中心维护着服务名称与服务实例的对应关系。每个微服务都会定时从注册中心...

    macrozheng
  • Spring Eureka 初探及集群搭建

    Eureka 主要是用于进行服务的注册和发现,今天就来学习一下如何使用 Eureka

    Java技术大杂烩
  • SpringCloud教程(Finchley版本)-08:eureka集群搭建

    在eureka的服务治理设计中,所有的节点既是服务提供方,也是服务消费方,注册中心也不例外。eureka server的高可用集群,其实就是将自己作为服务向其他...

    IT云清
  • SpringCloud的入门学习之Netflix-eureka(Eureka的集群版搭建)

    1、Eureka单机版的话,可能会出现单点故障,所以要保障Eureka的高可用,那么可以进行搭建Eureka的集群版。

    别先生
  • Spring Cloud 服务的注册与发现(Eureka)

    服务发现是微服务架构下最核心的概念。Eureka是服务发现的服务端和客户端,服务端是服务的注册中心,客户端是每一个服务。

    小忽悠
  • Spring Cloud 服务的注册与发现(Eureka)

    Eureka Server是服务的注册中心,这是分布式服务的基础,我们看看这一部分如何搭建。

    小忽悠
  • Spring Cloud Eureka Client的使用

    第一篇了解了Spring Cloud Eureka Server 之后,我们就可以搭建起单机或者简单集群的注册中心,此时已经可以允许客户端将服务注册到eurek...

    不蜇人的小蜜蜂

扫码关注云+社区

领取腾讯云代金券