初识springcloud (一)

一、springcloud 概述

1.微服务与springcloud

微服务是一种架构风格,将单体应用划分为小型的服务单元,微服务之间使用HTTP的API进行访问操作。

2.springcloud 的主要模块

  • Eureka :基于REST服务的分布式中间件,主要用于服务管理
  • Hystrix : 容错框架,通过添加延迟阈值和容错逻辑,帮助我们控制分布式系统件组件交互。
  • Feign : 一个REST 客户端,目的是为了简化web service  客户端开发。
  • Ribbon : 负载均衡框架,在微服务集群中为各个客户端提供通信支持,它主要实现中间层应用的负载均衡。
  • Zuul :为微服务集群提供代理,过滤,路由等功能。
  • spring cloud config :为分布式系统提供了配置配置服务器和配置客户端。通过他的配置,可以很好的管理集群中的配置文件。
  • spring cloud sleuth :  服务跟踪框架,可以很好的与ZIPkin,ELK等框架整合。
  • spring cloud stream : 用于构建消息驱动微服务框架。
  • spring cloud  bus :  连接RabbitMQ,Kafka等消息代理的集群消息总线。

二、微服务的发布与调用

1、Eureka介绍

Eureka提供基于REST的服务,在集群中主要用于服务器管理。Eureka提供了基于Java语言的客户端组件,并且客户端组件实现了负载均衡的功能。使用该框架,可以将业务组件注册到Eureka容器中,这些组件可进行集群部署,Eureka主要维护这些服务的列表并自动检测他们的状态。

一个简单的Eureka 集群,需要一个Eureka服务器,若干个服务提供者。可以将业务组件注册到Eureka服务器中,其他客户端组件可以向服务器获取服务并进行远程调用。

2.写一个简单的Eureka应用

该程序包括 :

  •  服务器端  : 对于注册到服务端的服务组件,Eureka服务器并没有提供后台的存储,这些注册的服务实例被保存在内存的注册中心,他们通过心跳来保持其最新状态,这些操作可以在内存中完成。客户端存在相同的的机制,同样在内存中保存了注册信息,这样的机制提升了Eureka的性能,每次服务的请求都不必服务端注册中心。
  • 服务提供者:1、向服务器注册服务 2、发送心跳给服务器 3、向服务器获取注册列表。
  • 服务调用者 :对于发布到Eureka服务器的服务,服务调用者可以对其进行服务查找与调用,服务调用者也是作为客户端存在的,但他的主要职责是发现与调用服务。并且服务调用者可以也是服务提供者。

构建服务器

我使用的是IDEA

建项目步骤

建好项目之后,在项目启动类中增加@EnableEurekaServer注解,表示该应用是Eureka服务器

@SpringBootApplication
@EnableEurekaServer
public class SpringcouldStudyApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringcouldStudyApplication.class, args);
    }

}

启动项目,会发现出现如下错误

解决这个问题很简单,只需将在application.properties中做如下配置

server.port = 8761
# 聲明是否將自己的服務器信息注冊到Eureka服務器上。默認為true
eureka.client.register-with-eureka=false
# 是否到Eureka服務器上抓取信息
eureka.client.fetch-registry=false  

再次启动,不在报错。

然后在浏览器中访问服务器

服务提供者

重新建一个项目名为first-service-provider-eureka,方法和上面的一样,启动类添加注解

@SpringBootApplication
@EnableEurekaClient
public class FirstServiceProviderEurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(FirstServiceProviderEurekaApplication.class, args);
    }

}  

配置application.properties文件

#配置實例主機名
eureka.instance.hostname = localhost
#  默認地址
eureka.client.service-url.defaultZone = http://localhost:8761/eureka/  

编写一个实体类

@Data
public class Person {
    private int id;
    private String personName;
    private String personSex;
}

  

编写一个controller类

@RestController
public class FirstController {
    @RequestMapping(value = "/person/{id}",method = RequestMethod.GET)
    public Person getPerson(@PathVariable("id") Integer id){
        Person person = new Person();
        person.setId(id);
        person.setPersonName("curry");
        person.setPersonSex("男");
        return person;
    }

  服务调用者

新建一个项目名为first-service-invoker-eureka,方法同上

@SpringBootApplication
@EnableDiscoveryClient
public class FirstServiceInvokerEuerkaApplication {

    public static void main(String[] args) {
        SpringApplication.run(FirstServiceInvokerEuerkaApplication.class, args);
    }

}

 @EnableDiscoveryClient 使其具有发现Eureka服务的能力,@EnableEurekaClient 包含了@EnableDiscoveryClient

编写application.properties

server.port=9000
spring.application.name= first-service-invoker

eureka.instance.hostname = localhost
eureka.client.service-url.defaultZone = http://localhost:8761/eureka/  

编写controller类

@RestController
public class Controller {
    @Bean
    @LoadBalanced
    /**
     * @Method getRestTemplate
     * @Author qinda
     * @Version  1.0
     * @Description    RestTemplate主要是用來調REST服務的,是spring-web模塊下的類
     *                  本身本身不具有調用分佈式的能力。所以用@ LoadBalanced注解 使其具有該能力。
     * @param
     * @Return org.springframework.web.client.RestTemplate
     * @Exception
     * @Date 2019/6/19 18:12
     */
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
     @RequestMapping(value = "/router")
    public String router(){
        RestTemplate restTemplate = getRestTemplate();
        //根據應用名稱調用服務
        String s  = restTemplate.getForObject("http://localhost:8080/person/2",String.class);
         //String json  = restTemplate.getForObject("http://first-service-provider/person/2",String.class);

         return s;
    }

}

 最后将三个应用都启动,访问服务调用者

成功。。。。。。。

再看Eureka容器里

服务已经存在Eureka中了

。。。。end

 

原文地址:https://www.cnblogs.com/qinda/p/11055073.html

时间: 2024-08-30 12:39:41

初识springcloud (一)的相关文章

springcloud情操陶冶-初识springcloud

许久之前便听到了springcloud如雷贯耳的大名,但是不曾谋面,其主要应用于微服务的相关架构.笔者对微服务并不是很了解,但其既然比较出众,遂也稍微接触研究下 springcloud特性 springcloud作为spring团队的微服务架构,其有如下的特性(摘自官方文档) Distributed/versioned configuration(分布式/版本化配置) Service registration and discovery(服务注册与发现) Routing(路由) Service-

初识SpringCloud微服务

微服务是一种架构方式,最终肯定需要技术架构去实施. 微服务的实现方式很多,但是最火的莫过于Spring Cloud了.为什么? 后台硬:作为Spring家族的一员,有整个Spring全家桶靠山,背景十分强大. 技术强:Spring作为Java领域的前辈,可以说是功力深厚.有强力的技术团队支撑,一般人还真比不了 群众基础好:可以说大多数程序员的成长都伴随着Spring框架,试问:现在有几家公司开发不用Spring?SpringCloud与Spring的各个框架无缝整合,对大家来说一切都是熟悉的配方

千锋《Java高级教程+分布式+springcloud+微信支付》

课程目录:├─千锋Java高级教程-cas单点登录(完结-8集)│      01单点登录介绍│      02cas介绍│      03tomcat搭建https│      04cas server搭建│      05Cas 配置 jdbc 连接数据库│      06Cas 密码 MD5值│      07 Cas 整合shiro1│      07 Cas 整合shiro2│      ├─千锋Java高级教程-dubbo+zookeeper分布式系统架构基础(11集)│      

初识Python,望君多多关照

在学习Python之前,我们接触过数据结构和网页制作.前者让我们学习如何把C语言运用的更加整齐规范,而后者让我们亲身学习如何运用所学,制作一个静态网页.通过这些课程的学习,让我对C语言产生了比较大的压力,以至于对编程.对这学期的Python课程都有一种如临大敌的感觉. 但是真的学习了这门课程,体会了编码过程中的一些固定运用方法和套路之后,也许过程中对这门课程隐隐约约产生了一点点朦胧的感觉,仿佛他也并没有想象中的那么困难,起码现在的学习让我认为,他可能没有C语言那么繁琐和麻烦.当然,以一个初学者的

初识数组排序!!!!

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>初识数组排序</title> <!--调试成功--> <style type="text/css"> *{ padding:0; margin: 0; } li,ul{ list-style: none; } #p

初识操作系统和linux

初识操作系统和linux 1.计算机系统由硬件系统和软件系统两大部分组成:是一种能接收和存储信息,并按照存储在其内部的程序对海量数据进行自动.高速地处理,然后把处理结果输出的现代化智能电子设备. 2.世界上第一台计算机是1946年诞生在美国宾州大学. 3.冯·诺依曼体系结构:1946年数学家冯·诺依曼于提出计算机硬件系统由运算器.控制器.存储器.输入设备.输出设备.摩根定律:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍.现在计算机技术进本很难遵

JAVA 初识类加载机制 第13节

JAVA 初识类加载机制 第13节 从这章开始,我们就进入虚拟机类加载机制的学习了.那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要编译成.class文件,再由虚拟机解释给当前的操作系统去执行.这些过程都是我们看不见的,我们能看见的也就是一个.class文件.既然虚拟机要解释这些.class文件给当前的操作系统听,那么他怎么获得这些.class文件呢?虚拟机获得这些.class文件的过程就是类加载了. 所以,总结来说就是:虚拟机将.class文件从磁盘或者其他地

初识React

原文地址:北云软件-初识React 专注于UI 在MVC分层设计模式中,react常被拿来实现视图层(V).React不依赖于技术栈的其他部分,因此可以方便的在现有项目中尝试用它来实现一个小特性. 虚拟DOM React从DOM中抽象出来,给出一种更简洁的编程模型,且性能表现更好.能够通过NodeJS实现服务端渲染,通过React Native开发原生app. 数据流React实现单向.响应式数据流,减少boilerplate且比传统数据绑定更容易理解. 简洁的组件React的组件都实现了一个r

泛型的几种类型以及初识webform

今天学习的可以分为两类吧,但是学习的都是比较抽象的,不太容易掌握吧.首先我们大部分时间学习了泛型,泛型的委托,泛型接口以及枚举器,迭代器,扩展方法:最后简单的认识了webform,实现了一个简单的功能. 一.泛型 定义:泛型(generic)可以软糖多个类型共享一组代码,泛型允许我们声明类型参数化.可以用不同的类型进行实例化,说白了,就是可以用类型占位符,创建具体类型致命的真实概念.C#中提供了五种泛型,类,结构,接口,委托和方法.下面举例说明可能更容易理解, class MyStack<T>