十次方之springcould学习记录(eureka,feign入门)

首先介绍下springcloud
springcloud是一系列框架的有序集合,它利用springboot的开发便利性巧妙的简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控,都可用springboot的开发风格做到一键启动和部署.

Springcloud并 没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框 架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给 开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包
在这里插入图片描述

springcloud与springboot的关系
springboot是spring的一套快速配置脚手架。它使用了默认大于配置的理念,将原来spring相关开发繁重的xml配置全部用javaConfig和注解的方式帮你自动装配所需要的基础配置。甚至内置tomcat直接用jar包运行。我们可以基于springboot快速开发单个微服务
springcloud是一个基于springboot实现的云应用开发工具:它关注全局的服务治理框架
它很大一部分是基于springboot实现所以必须依赖springboot

原来做的项目是用ssm+dubbo实现分布式面向服务开发 dubbo采用zookper当做注册中心当然也可以用springboot+dubbo
我们现在做的是微服务开发采用springboot+springcloud
那springcoud和dubbo有什么区别呢?
或许很多人会说Spring Cloud和Dubbo的对比有点不公平,Dubbo只是实现了服务治 理,而Spring Cloud下面有17个子项目(可能还会新增)分别覆盖了微服务架构下的方 方面面,服务治理只是其中的一个方面,一定程度来说,Dubbo只是Spring Cloud Netflix中的一个子集。
下图是他们2个具备的功能对比
在这里插入图片描述

首先介绍服务发现组件Eureka

Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目 spring-cloud-netflix中,实现SpringCloud的服务发现功能。Eureka包含两个组件: Eureka Server和Eureka Client。
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注 册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点 的信息可以在界面中直观的看到。

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

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

正式开始开发
我们需要先创建一个Eureka服务端服务tensquare_eureka 所有的服务提供者和消费者都会和这个服务打交道 其实就相当于zooekper
首先导入maven依赖 因为springboot 和springcloud有对应关系
在这里插入图片描述
我们需要在父工程定义SpringCloud版本

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

然后在tensquare_eureka微服务导入eureka服务依赖

 <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

然后在配置文件中配置相关信息

  server:
      port: 6868
    eureka:
      client:
        register-with-eureka: false
        fetch-registry: false
        service-url:
          defaultZone: http://127.0.0.1:${server.port}/eureka/

最后在启动类中注明@EnableEurekaServer
启动该服务之后我们就可以通过 http://localhost:6868/ 访问eureka管理界面

eureka服务端弄完了 接下来来搞客户端
其实我们写的每个服务都可能相互调用
所以他们都可以成为eureka客户端注册进eureka服务端中
将其他微服务模块添加依赖

 <dependency>
		  <groupId>org.springframework.cloud</groupId>
		  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
	  </dependency>

修改每个微服务的application.yml,添加注册eureka服务的配置

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:6868/eureka/
  instance:
    prefer-ip-address: true 

修改每个微服务的启动类,添加注解**@EnableDiscoveryClient**
启动服务后 我们可以在eureka管理界面中看到我们的客户端服务注册进去了

这里说明个情况
在这里插入图片描述

我们这些都只是将eureke服务端搭建起来并将客户端注册进去 他们之间还没有办法相互调用
我们可以用Feign实现服务间的调用

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

我们现在在问答微服务调用基础微服务的方法(根据ID查询标签)

在tensquare_qa模块添加依赖

<dependency>
		  <groupId>org.springframework.cloud</groupId>
		  <artifactId>spring-cloud-starter-openfeign</artifactId>
	  </dependency>

修改tensquare_qa模块的启动类,添加注解

@EnableFeignClients
@EnableDiscoveryClient

这里明确我们需要在qa模块调用base模块的方法
接下来我们只需要创建一个接口将base模块中需要用到的方法用抽象方法的形式放到这个接口下
在tensquare_qa模块创建 com.tensquare.qa.client包,包下创建接口

/**
 * Created by 周大侠
 * 2019-03-12 20:31
 */
@FeignClient("tensquare-base")
public interface LabelClient {
    @GetMapping("/label/{id}")
     Result findById(@PathVariable("id") String id);

}

这里说明2个情况
@FeignClient注解用于指定从哪个服务中调用功能 ,注意 里面的名称与被调用的服务 名保持一致,并且不能包含下划线

@RequestMapping注解用于对被调用的微服务进行地址映射。注意 @PathVariable注 解一定要指定参数名称,否则出错

接下来我们就只要在qa模块中定义controller在方法中用LabelClint调用即可

/**
     * 调用base模块的方法
     * @param id
     * @return
     */
    @GetMapping("/label/{id}")
    public Result findLabelById(@PathVariable String id) {
        return labelClient.findById(id);
    }

测试:http://localhost:9003/problem/label/1 能看到标签的信息

同时Feign也给我们提供了负载均衡功能
当有多个服务提供者时 可以采用各种负载均衡算法。

下面就是用这2个功能开发交友微服务 在这里就不进行讲述 可以看十次方微服务开发v1.1–第7章.pdf
交友微服务 添加好友,在交友微服务中调用用户微服务的更改粉丝数与关注数的方法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值