前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原创 | Eureka搭建分布式SpringCloud项目

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

作者头像
润森
发布2020-01-13 17:55:46
1.1K0
发布2020-01-13 17:55:46
举报
文章被收录于专栏:毛利学Python毛利学Python

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小刘IT教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringCloud
  • Eureka
  • Eureka实战
    • 开启eureka-server
      • 创建项目
        • provide-ticket
          • eureka-server
            • consumer-user
            • 测试运行
            • 总结
            相关产品与服务
            负载均衡
            负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档