谷粒商城——微服务(alibaba)

谷粒商城——微服务(alibaba)

微服务应该具备哪些功能?摘自微服务–微服务应该具备的功能

"服务"是一个独立运行的组件,每个单元组件运行在独立的进程中,组件与组件之间通常使用HTTP这种轻量级的通信机制进行通信,微服务应该具备以下特点:

  1. 按照业务来划分服务,单个服务代码量小,业务单一,易于维护
  2. 每个微服务都有自己独立的基础组件,例如数据库、缓存等,且运行在独立的进程中
  3. 微服务之间的通信是通过HTTP协议或者消息组件,且具有容错能力
  4. 微服务有一套服务治理的解决方案,服务之间相互独立,可以随时加入和剔除
  5. 单个微服务可以集群化部署,并且有负载均衡的能力
  6. 整个微服务系统应该有一个完整的安全机制,包括用户验证,权限验证,资源保护等
  7. 整个微服务系统有链路追踪的能力
  8. 有一套完整的实时日志系统

由上总结微服务应该具备以下功能

  • 服务的注册与发现
  • 服务的负载均衡
  • 服务的容错(熔断器)
  • 服务网关(API 网关)
  • 服务配置的统一管理
  • 链路追踪
  • 实时日志

借助SpringCloudAlibaba我们能实现哪些功能?

组件名称实现功能简述
Nacos服务的注册与发现一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Sentinel服务的负载均衡
服务的容错
服务配置的统一管理
把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
Seata阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。

剩余功能我们借助SpringCloud为我们提供的组件解决.

为什么我们不采用SpringCloud提供的一整套解决方案?

因为有些组件停止更新和维护,会给开发带来不便且整体配置麻烦

项目的最终技术搭配方案

技术(组件)功能
SpringCloud Alibaba - Nacos注册中心(服务注册与发现)
SpringCloud Alibaba - Nacos配置中心(动态配置管理)
SpringCloud - Ribbon负载均衡
SpringCloud - Feign声明式HTTP客户端(调用远程服务)
SpringCloud Alibaba - Sentinel服务容错(限流.降级,熔断)
SpringCloud - GetWayAPI网关
SpringCloud -Sleuth调用链监控
SpringCloud Alibaba - Seata分布式事务解决方案

如何在项目中使用SpringCloudAlibaba

请参考官方文档

在项目的公共组件common中引入父依赖

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.4.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

然后在各个微服务中引入需要使用的具体的子依赖(如nacos)

Nacos
Nacos的安装

这里我使用的是采用docker的方式部署Nacos,如果采用本机安装请参考视频

  1. 首先使用docker下载Nacos
docker pull nacos/nacos-server
  1. 创建需要挂载的文件
mkdir -p /home/nacos/logs                  
mkdir -p /home/nacos/init.d          
touch /home/nacos/init.d/custom.properties 
  1. 为custom.properties中添加必要的参数
server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848

#需要数据持久化时在数据库中创建nacos对应的表并连接数据库
#这里使用nacos内置的数据库
#spring.datasource.platform=mysql

#db.num=1
#db.url.0=jdbc:mysql://xx.xx.xx.x:3306/nacos_devtest_prod?#characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
#db.user=user
#db.password=password


nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false

management.metrics.export.elastic.enabled=false

management.metrics.export.influx.enabled=false


server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i


nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
nacos.naming.distro.taskDispatchThreadCount=1
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
nacos.naming.expireInstance=true
  1. 启动nacos镜像
docker run --name nacos -d \
> -p 8848:8848 \ 
> --privileged=true \
> --restart=always \
> -e JVM_XMS=256m \
> -e JVM_XMX=256m \
> -e MODE=standalone \
> -e PREFER_HOST_MODE=hostname \
> -v /home/nacos/logs:/home/nacos/logs \
> -v /home/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \
> nacos/nacos-server
  1. 在阿里云镜像开发8848端口

  2. 访问8848端口
    在这里插入图片描述

到这里部署就完成了

项目中Nacos的配置
作为注册中心
  1. 在需要使用Nacos的微服务模块引入jar包
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. 在yml中配置Nacos Server的地址(注意必须为微服务模块起一个名称)
spring:
    cloud:
        nacos:
          discovery:
            server-addr: 123.56.74.35:8848
  1. 通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能:

  2. 启动项目之后,在nacos中查找是否部署成功(可以使用feign来进行测试)

在这里插入图片描述

作为配置中心
  1. 引入依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  1. 编写bootstrap.properties 并配置 Nacos server 的地址和应用名
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=example
  1. 在需要进行公共配置的微服务编写一个properties抽取所有公共配置
  2. 在Nacos中创建一个备份并设置DataId与spring.application.name相同
  3. 在需要实时改变获取公共配置的类上添加@RefreshScope注解即可实现动态配置
    1. 如果配置中心和当前应用的配置文件中都配置了相同的项,优先使用配置中心的配置
Nacos中的几个名词概念

命名空间: 用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的Group或DataID的配置。

(应用场景: 不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置,服务)隔离等)

  • 默认为public(保留空间); 默认新增的所有配置都在public空间。

类似springboot提供的application-dev.yml,只需要在bootstrap.propties中配置命名空间就能使用不同的配置

配置集: 所有的配置的集合

配置集ID: 类似文件名

配置分组: 默认所有的配置集都属于: DEFAULT_GROUP;

​ 一般项目中配置分组用于区分环境,命名空间用于区分每一个微服务

Feign声明式远程调用

简介: Feign是一个声明式的HTTP客户端,用于简化远程调用。Feign提供了HTTP请求模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数,格式,地址等信息。

/**
 * 1. 想要远程调用别的服务
 * 1). 引入OpenFeign
 * 2). 编写一个接口,告诉SpringCloud这个接口需要远程调用(注意接口中必须使用@FeignClient("gulimail-coupon")注解表明调用哪个微服务模块,注解中的名称为微服务在nacos中注册时的id)
 * 		1. 声明接口的每一个方法都是调用哪个远程服务的哪个请求(参数,返回值,方法名相同)
 * 3). 开启远程调用功能(@EnableFeignClients(basePackages = "com.czp.gulimail.member.feign"))标注在启动类上
 */
gCloud这个接口需要远程调用(注意接口中必须使用@FeignClient("gulimail-coupon")注解表明调用哪个微服务模块,注解中的名称为微服务在nacos中注册时的id)
 * 		1. 声明接口的每一个方法都是调用哪个远程服务的哪个请求(参数,返回值,方法名相同)
 * 3). 开启远程调用功能(@EnableFeignClients(basePackages = "com.czp.gulimail.member.feign"))标注在启动类上
 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值