springCloud 整理(一) eureka feign

springCloud 整理(一)

1 springCloud

1.1 springcloud介绍

​ Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册配置中心消息总线负载均衡断路器数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

springcloud官方网站

1.2 springboot 和springCloud 之间的关系

​ Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具;

​ Spring Boot专注于快速、方便集成的单个微服务个体,Spring Cloud关注全局的服务治理框架;

​ Spring Boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring Boot来实现,可以不基于Spring Boot吗?不可以。

​ Spring Boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring Boot,属于依赖的关系。

1.3 springCloud 主要框架
  • 服务发现–Netflix Eureka 南京话:依维柯
  • 服务调用——Netflix Feign :
  • 熔断器——Netflix Hystrix
  • 服务网关——Netflix Zuul
  • 分布式配置——Spring Cloud Config
  • 消息总线 —— Spring Cloud Bus
1.4 Spring Cloud和Dubbo对比

​ Spring Cloud和Dubbo的对比有点不公平,Dubbo只是实现了服务治理,而Spring Cloud下面有17个子项目(可能还会新增)分别覆盖了微服务架构下的方方面面,服务治理只是其中的一个方面,一定程度来说,Dubbo只是Spring CloudNetflix中的一个子集。

DubbospringCloud
服务注册中心ZookeeperNetflix Eureka
服务调用方式RPCREST API
服务网关Netflix Zuul
熔断器不完善Netflix Hystrix
分布式配置Spring Cloud Config
服务跟踪Spring Cloud Sleuth
消息总线Spring Cloud Bus
数据流Spring Cloud Stream
批量任务Spring Cloud Task
1.5 springCloud的版本
Spring BootSpring Cloud
1.2.xAngel版本
1.3.xBrixton版本
1.4.xCamden版本
1.5.xDalston版本、Edgware版本
2.0.xFinchley版本

2 服务发现组件 Eureka

2.1 Eureka

​ Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目spring-cloud-netflix中,实现SpringCloud的服务发现功能。Eureka包含两个组件:

  • Eureka Server

    ​ Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样eurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

    ​ Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。

  • Eureka Client
    Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就别一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90
    秒)。

2.2 Eureka服务端开发
  1. 引入依赖 父工程pom.xml 定义spingCould版本
<dependencyManagement>
    <dependencies>
        <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring‐cloud‐dependencies</artifactId>
        <version>Finchley.M9</version>
        <type>pom</type>
        <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  1. 创建boot-eureka 模块
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>
  1. 添加配置文件

server:
  port: 6868
eureka:
  client:
    register-with-eureka: false #s是否将自己注册到服务中,本身就是服务不需要注册
    fetch-registry: false # 是否从服务器端获取注册信息
    service-url:
      defaultZone: http://127.0.0.1:${server.port}/eureka/



4)编写启动类

package com.liu.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 *  springCloud 祖册发现服务中心就搞定了
 */
@SpringBootApplication
@EnableEurekaServer // eureka 服务
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }



}

5)运行启动类,测试 localhost:6868

在这里插入图片描述

2.3 Eureka 服务 注册

将微服务模块注册到Eureka 服务中心,这样我们的微服务就能互相之间调用了

1)添加依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency> 
  1. 添加配置文件

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:6868/eureka/
  instance:
    prefer-ip-address: true #跨域访问

3)启动类中添加

@EnableEurekaClient  //说明是客户端需要被发现的微服务

4) 通过以上的三部曲,我们就很方便的在服务管理中发现我们注册的三个服务

在这里插入图片描述
这里我之前帖子中涉及的10个小模块都注册了,建议把常用的小模块 没事都谢谢,下次有需要直接搞下来

在这里插入图片描述

docker容器中的服务开启的服务: redis、mongo、es、mysql、es-head

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                                                                                                                                              NAMES
894c19980c8d        rabbitmq:management         "docker-entrypoint..."   2 days ago          Up About an hour    0.0.0.0:4369->4369/tcp, 0.0.0.0:5672->5672/tcp, 0.0.0.0:15671-15672->15671-15672/tcp, 0.0.0.0:25672->25672/tcp, 5671/tcp, 0.0.0.0:5671->5617/tcp   liubijun_rabbitmq
89227b3809e8        mobz/elasticsearch-head:5   "/bin/sh -c 'grunt..."   2 days ago          Up 12 minutes       0.0.0.0:9100->9100/tcp                                                                                                                             liubijun_es_head
c4de8f237ce0        elasticsearch:5.6.8         "/docker-entrypoin..."   2 days ago          Up 13 minutes       0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp                                                                                                     liubijun_el
6f1fc5d13f54        mongo                       "docker-entrypoint..."   3 months ago        Up 22 minutes       0.0.0.0:27017->27017/tcp                                                                                                                           liubijun_mongo
c34d96964e7e        redis                       "docker-entrypoint..."   4 months ago        Up About an hour    0.0.0.0:6379->6379/tcp                                                                                                                             liubijun_redis
0a816c1be4f2        mysql                       "docker-entrypoint..."   4 months ago        Up About an hour    0.0.0.0:3306->3306/tcp, 33060/tcp                                                                                                                  liubijun_mysql
[root@localhost ~]# 

注意:在服务名称命名的时候,别用下划线。要不然服务找不见,别怨我

2.4 保护机制

​ 上面截图中,有红色报警,我查了资料是,一下原因引起的。不用太在意。

​ Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况(在单机调试的时候很容易满足,实际在生产环境上通常是由于网络不稳定导致),Eureka Server会将当前的实例注册信息保护起来,同时提示这个警告。保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。

3 Feign实现服务间的调用

​ Feign是简化Java HTTP客户端开发的工具(java-to-httpclient-binder),它的灵感来自于Retrofit、JAXRS-2.0和WebSocket。Feign的初衷是降低统一绑定Denominator到HTTP API的复杂度,不区分是否为restful

3.1 案例构建

我们在之前构建的boot-user 模块中调用boot-base模块中的接口数据。我们对于boot-base模块中的数据不需要任何修改,只需要在boot-user模块中,做如下调整:

3.2 导入依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>


3.3 在启动类添加注解

@EnableDiscoveryClient
@EnableFeignClients


3.4 编写接口
package com.liu.user.client;

import com.liu.common.entity.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Created by Administrator on 2019/8/23 0023.
 */
@FeignClient("boot-base")
public interface LabelClient {
    @RequestMapping(value = "/label",method = RequestMethod.GET)
    public Result findAll();

}

注意: 如果path 路径提到@FeignClient(path="/label") ,@requestMapping 中可以不写路径

3.5 控制层

    @Autowired
    private LabelClient labelClient;

    @GetMapping("/label")
    public Result findLableAll(){
       Result result =labelClient.findAll();
        System.out.println("我进入该方法了");
        return result;
    }



3.6 测试结果

在这里插入图片描述

3.7 运维的福音

在springcloud 开发的项目中,被调用微服务启动多个,但是调用方可以,自动负载均衡调用注册到服务中心的微服务。不需要再Nginx中配置负载均衡了 。项目实施难度降低很多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值