使用spring cloud搭建微服务框架

article/2025/8/27 9:55:21

   bubbo+zookeeper制作的基于dubbo的微服务框架,可以说算是有点过时了,我们先来了解一下什么是微服务。

 

  微服务就是对某个应用系统的每个API进行有效的拆分,然后通过某种连接方式,用以提供给其他应用系统调用的API的服务,在调用过程中实现和解决了一系列问题的综合就是微服务架构

 

  顾名思义,微服务得从两个方面去理解,什么是"微"、什么是"服务"。

  

  简单的讲就是体积小,随处运行,开发简单。传统的spring mvc框架配置繁杂,项目依赖杂乱,常常令开发和维护头疼不已。

  服务  

  所谓服务,一定要区别于系统,服务一个或者一组相对较小且独立的功能单元,是用户可以感知最小功能集。

  微服务最早由Martin Fowler与James Lewis于2014年共同提出,微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些服务使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。

  应用的拆分

  有程序员A,B,C,他们现在都需要开发一套订单管理系统。

  程序员A采用单系统架构,业务代码做mvc拆分,前端部分使用php做渲染层。 

  程序员B采用多应用架构,将产品、订单、物流、工单、客服等做应用级拆分,然后使用REST API或者tcp直接交互,每个应用都是一个mvc系统,独立开发。

  程序员C采用微服务,将产品、订单、物流、工单、客服等做应用级拆分,再使用微服务框架将他们打散拆分成一个个的服务,例如订单列表查询服务、产品列表查询服务、产品详情查询服务等。使用一个个服务组成应用系统然后整合为订单管理系统

  毫无疑问,程序员A的架构方式只能够在订单量小,吃了上顿没下顿的公司应用了。

  而程序员B的架构类似大部分电商平台前期的架构逻辑,这套架构适应能力不错,但是随着系统的不断扩大,维护变的极为复杂,版本的更替,应用之间的API调用随着各种各样的需求复杂多变。

  随着B架构的演变,诞生了程序员C的架构模式,微服务。微服务的理解就是将类似 订单列表查询服务、产品列表查询服务、产品详情查询服务进行细分,微分。使我们的代码能够通过统一的网关进行整合,能够让整个公司的系统开发力量彻底整合起来,并且微服务中的服务治理、熔断、负载均衡等等功能加强了对整个系统的治理能力。

  目前应对中大型站点的后台架构,微服务是最适合的一套模式。同时spring boot的出现让微服务的开发变得更简单,理解更容易,例如dubbo的开发方式其实比较简单、易懂,spring cloud更是深度整合spring boot的能力,借用网友的一张对比图:

图出处:https://blog.csdn.net/zhouyanqingbfq/article/details/79407285

另外有很多关于微服务的知识理念,博主整理了一些:

  https://blog.csdn.net/fly_zhyu/article/details/76408158

  https://www.cnblogs.com/wintersun/p/6219259.html

 

 

spring boot

   Spring Boot不是一门新技术,所以不用紧张。从本质上来说,Spring Boot就是Spring,它做了那些没有它你也会去做的Spring Bean配置。它使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速运行起来。使用Spring Boot很容易创建一个独立运行(运行jar,内嵌Servlet容器)、准生产级别的基于Spring框架的项目,使用Spring Boot你可以不用或者只需要很少的Spring配置。

  这一部分博主不再追述,提供一些资料大家看看就好,能点进这篇博文的人这里默认你会一些的吧。

    【转】Spring Boot干货系列:(一)优雅的入门篇

 

spring cloud

  Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer's own laptop, bare metal data centres, and managed platforms such as Cloud Foundry.

  spring cloud 提供一些工具迅速构建一些常用模式的分布式系统(例如 配置管理,服务发现,断路器,路由,微代理,控制总线,token,全局锁,分布式sessions,cluster state),使用Spring Cloud开发人员可以快速站出实现这些模式的服务和应用程序。 他们可以在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心和托管平台,如Cloud Foundry。

  来自spring cloud 官网的第一句介绍,spring cloud提供了一系列的工具去构建一套分布式系统,这些工具共同组成了一个微服务架构系统,注册中心、网关、provider、consumer、Rest、分布式锁、分布式session等等功能。

  spring cloud的学习资料整理:

   http://www.ityouknow.com/springcloud/2016/12/30/springcloud-collect.html     

  https://blog.csdn.net/forezp/article/details/70148833

注册中心

   eureka注册中心的搭建 博主使用IDEA搭建

  1首先创建一个空的maven项目

  

  填入参数:

    

  

  finish就ok

  

  finish后删除目录下src文件夹

  

  

  2.然后在cloud中新建module,右键根目录,选择new》module  

  

 

  新建一个spring boot项目,并添加上eureka依赖

  

 

 

注意content root的地址,在cloudDemo目录下的erueka

 

点击finish,就生成了一个springboot项目,等待maven初始化完毕,此时的项目结构,和eureka的pom文件如下:

  

 

 

 启动eureka注册中心的方式很简单,在springboot的启动类上加上注解

@EnableEurekaServer

 

  然后配置我们的spring boot启动:

  将resource下面的 application.properties文件改为application.yml文件并添加如下配置:

 

server:port: 8801eureka:instance:hostname: localhostclient:registerWithEureka: falsefetchRegistry: falseserviceUrl:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

 

然后启动项目访问localhost:8801,看到这个界面,Eureka注册中心就已经启动成功,接下来我们可以编写一个提供者,一个消费者。

 

 spring cloud的消费者也可以是提供者,二者只有逻辑上的区别,它是链式的存在。在spring boot中有两种消费方式:

 1.rest+ribbon

 2.Feign

接下来我们编写消费者

rest+ribbon消费

   首先保持Eureka的启动不变,然后在cloudDemo下新建一个module 叫做ribbon,它也是spring boot结构:

  

  

  

  注意我们要添加三个依赖,如上图红框依次选择即可。

  

  一样,要注意content root的目录。

  创建完成后,编写springboot的启动类,首先加上 @ComponentScan 注解,然后添加 @EnableDiscoveryClient 注册服务,然后注入RestTemplate对象,

 @LoadBalanced 表示开启负载均衡

  完整的代码如下:

 

@SpringBootApplication
@EnableDiscoveryClient //注册服务
@ComponentScan
public class RibbonApplication {public static void main(String[] args) {SpringApplication.run(RibbonApplication.class, args);}@Bean@Autowired@LoadBalancedRestTemplate restTemplate(){return new RestTemplate();}
}

 

  然后我们创建一个测试用的service文件:

  

  

  代码如下:

 

@Service
public class HelloService {public String sayHello(){return "helloWorld"; // 提供一个hello World}
}

 

然后我们再编写一个controller,提供一个hello的controller:

完整代码如下:

 

@RestController
public class HelloController {@Autowiredprivate HelloService helloService;@GetMapping("/hello")public String sayHello(String name){return helloService.sayHello() + " " + name;}
}

 

 

 然后我们再配置application.yml , 一样的 将配置文件改为yml格式,然后输入配置:

  

 

eureka:client:serviceUrl:defaultZone: http://localhost:8801/eureka/
server:port: 8802
spring:application:name: ribbon-provider

 

之后启动服务,启动后访问 localhost:8802/hello?name=zhangtaifeng :

  

测试完成,这个服务我们用他做服务提供者(provider),然后我们再重新建一个module,可以叫做 ribbon-consumer,整体配置一致,我们只需要修改service和controller部分(注意package):

 

然后修改配置文件为:

 

eureka:client:serviceUrl:defaultZone: http://localhost:8801/eureka/
server:port: 8803
spring:application:name: ribbon-consumer

 

改了端口和应用名称。

 

 

 然后复制上面的spring boot入口文件代码,复制service和controller文件,依然 注意包名和路径,然后修改HelloService:

我们启动应用看看:

  

RestTemplate成功调用了8802端口上的provider。

到了这里,相信大家对spring cloud调用服务有了一定的了解,cloud通过rest调用服务进行服务间的通信,每一个controller的方法对外提供对应的服务接口。相比较dubbo的rpc调用有一些不一样的优势,同时它的开发方式更简单,配合zuul网关的使用能够达到更好的效果。

Feign消费

 feign消费是通过注解的方式进行的消费模式,它默认打开了负载均衡,还是在cloudDemo下创建一个module,名字叫feign:

  

 

 

注意引用的包。

创建完成,首先编写入口文件,主要是加上

@EnableDiscoveryClient
@EnableFeignClients

  这两个注解,用于注册和发现服务。

  

然后我们在目录下新建一个service,controller,或者从前面的工程复制,另外需要新建一个rpc文件夹,然后在rpc下新建一个GetHello接口:

  

 

编写访问rpc的方法,使用feign调用更加简便,添加@FeignClient注解即可,value的意思就是目标服务器,可以直接用yml中配置的application名称,完整代码如下:

@FeignClient(value = "ribbon-consumer")
public interface GetHello {@RequestMapping(value = "/hello?name=feign",method = RequestMethod.GET)public String sayHello();
}

然后再改造下service代码:

 

@Service
public class HelloService {@Autowiredprivate GetHello getHello; //注入rpcpublic String sayHello(){return getHello.sayHello(); // 提供一个hello World}
}

 

最后还是修改application.yml文件,配置大致相同,修改应用名和端口,代码如下:

 

eureka:client:serviceUrl:defaultZone: http://localhost:8801/eureka/
server:port: 8804
spring:application:name: feign-consumer

 

然后我们启动这个工程看看有什么效果,注意,这所有的步骤,前面的服务都没有关闭噢:

 

启动后效果如图。

 

 

小结

  下载文件地址 

  从这里看,spring cloud将我们的几个应用串联起来,各个服务之间互相通过restAPI调用,我觉得Feign要优于ribbon,另外Eureka注册中心也可以换成zookeeper或者consul.

 

本文转自:https://www.cnblogs.com/ztfjs/p/9230374.html


http://chatgpt.dhexx.cn/article/WTh9V2Tt.shtml

相关文章

开源微服务框架 汇总

诞生于 2014 年的“微服务架构”,其思想经由 Martin Fowler 阐述后,在近几年持续受到重视,理论与相关实践都不断发展,目前它已经成为了主流软件架构模式。 关于微服务架构是什么,没有一个明确的定义,每个实…

微服务框架支持

事务上下文 目录概述需求: 设计思路实现思路分析1.Seata 的事务上下文由 RootContext 来管理。2.应用可以通过 RootContext 的 API 接口来获取当前运行时的全局事务 XID。3.应用是否运行在一个全局事务的上下文中,就是通过 RootContext 是否绑定 XID 来判…

开源微服务框架

诞生于 2014 年的“微服务架构”,其思想经由 Martin Fowler 阐述后,在近几年持续受到重视,理论与相关实践都不断发展,目前它已经成为了主流软件架构模式。 关于微服务架构是什么,没有一个明确的定义,每个实…

微服务框架入门(springcloud)

在学习微服务之前我们先理解一下什么是微服务? 微服务是springcloud吗? 微服务是分布式架构的一种,分布式架构就是要把服务拆分,拆分的过程中存在着许多的问题,springcloud仅仅是解决了拆分过程中的服务治理问题,至于其他的复制的问题并没有给出方案 传统的架构把业务写在…

golang 微服务框架

rpcx是一个类似阿里巴巴 Dubbo 和微博 Motan 的分布式的RPC服务框架,基于Golang net/rpc实现。 谈起分布式的RPC框架,比较出名的是阿里巴巴的dubbo,包括由当当网维护的dubbox。 不知道dubbo在阿里的内部竞争中败给了HSF,还是阿里有意将其闭源…

微服务框架-SpringCloud

3 总结 拜托!面试请不要再问我Spring Cloud底层原理_云深i不知处的博客-CSDN博客 最后再来总结一下,上述几个Spring Cloud核心组件,在微服务架构中,分别扮演的角色: Eureka:各个服务启动时,E…

SpringCloud微服务框架(通俗易懂,一秒上手)

🎁🎁资源:https://pan.baidu.com/s/1zRmwSvSvoDkWh0-MynwERA&pwd1234 SpringCloud微服务框架 (一)认识微服务服务架构演变SpringCloud (二)微服务拆分案例服务拆分服务间调用 (三…

微服务学习——微服务框架

Nacos配置管理 统一配置管理 配置更改热更新 将配置交给Nacos管理的步骤: 在Nacos中添加配置文件在微服务中引入nacos的config依赖在微服务中添加bootstrap.yml,配置nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时去nacos读取哪个…

SpringCloud 微服务框架

单体架构:将业务全部功能集中到一个项目中,打成一个war包存储,部署在一台服务器中,只有一个数据库 优点 :架构简单,部署成本低。适合小型项目 问题:高并发性能问题,开发时代码耦合问题&#x…

零基础秒懂:手把手教你搭建一套微服务框架!

个人博客请访问 http://www.x0100.top 这套微服务框架能干啥? 这套系统搭建完之后,可以实现: 微服务架构,你的整个应用程序将会被拆分成一个个功能独立的子系统,独立运行,系统与系统之间通过 RPC 接口通…

微服务架构 — 微服务框架

目录 文章目录 目录微服务框架第一代微服务框架Spring CloudDubbo下一代微服务框架 — Service MeshIstioEnvoyKubernetes + Service Mesh = 完整的微服务框架微服务框架 微服务架构首先要面对分布式架构的内生复杂性,即:服务通信和服务治理的复杂性,例如:服务发现、熔断、…

微服务架构与开源框架

微服务架构介绍及实践 微服务现在是一个很火的概念,尤其是搞IT的大多数都对其有所了解。 到底火到什么程度呢?2016年有一个统计说,两千家企业里,30%在使用微服务,15%在实验开发和测试微服务架构,24%在学习…

微服务框架

这里写自定义目录标题 微服务框架功能Spring Cloud简介Eureka简介Eureka⼊⻔源码解析Eureka的⼀些概念 Register 服务注册 微服务框架功能 微服务具有以上的这些特点,那么作为⼀个微服务框架,⽐如Spring Cloud,应该具备⼀些什么功能 呢&…

微服务框架springcloud

基础 单体架构:将业务全部功能集中到一个项目中,打成一个war包存储,部署在一台服务器中,只有一个数据库 优点 :架构简单,部署成本低。适合小型项目 问题:高并发性能问题,开发时代码耦合问题&…

微服务框架的介绍

一、什么是微服务 微服务并没有一个官方的定义,可以理解为一种架构风格,将一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在…

第六篇:微服务框架(SpringBoot、SpringCloud)

目录 一. 微服务框架 1. 微服务架构概念 2. 微服务的利与弊(为什么要用微服务) 二. SpringBoot 1. SpringBoot是什么? 2. SpringBoot核心注解是什么? 3. 什么是SpringBoot的自动配置?原理是什么? 4…

DLL文件的创建和调用

文章目录 前言一、DLL的优势二、使用步骤1.创建DLL文件2.调用DLL文件 总结 前言 动态数据库 (DLL) 是作为共享函数库的可执行文件。动态数据库提供了一种方法,使进程可以调用不属于其可执行代码的函数。本文将对DLL的创建和调用步骤进行保姆级讲解。 一、DLL的优势…

C# 调用 dll 文件

一、先使用C来创建一个 .dll 文件 1、创建新项目:CreateDll01 2、选择 “动态链接库(.dll)” 文件 3、在 CreateDll01.cpp 源文件中添加如下代码 // CreateDll01.cpp : 定义 DLL 应用程序的导出函数。 //#include "stdafx.h"extern "C" __decl…

dll是什么呢?dll丢失如何解决?

DLL的概念 DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件&#xff0…

C++ 制作动态链接库.dll及.dll使用

声明:IDE是Visual studio -version 2022 其制作的动态链接库dll里面实现简单的加减法,提供给其他项目调用。 一、动态链接库(DLL)创建 1、创建DLL工程 流程:文件 -> 新建 -> 项目 -> 动态链接库&#xf…