栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

谷粒商城基础篇——Day03

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

谷粒商城基础篇——Day03

03、分布式组件 Spring Cloud

https://spring.io/projects/spring-cloud

一、SpringCloud Alibaba 1 SpringCloud Alibaba 简介 1.1 简介

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
https://github.com/alibaba/spring-cloud-alibaba

1.2 为什么要使用 ?

很多组件都停止服务

SpringClouid的几大痛点:

  • SpringCloud部分组件停止维护和更新,给开发带来不便;
  • SpringCloud部分环境搭建复杂,没有完善的可视化界面,我们需要大量的二次开发和定制;
  • SpringCloud配置复杂,难以上手,部分配置差别难以区分和合理应用

SpringCloud Alibaba的优势:

  • 阿里使用过的组件经历了考验,性能强悍,设计合理,现在开源出来大家用;
  • 成套的产品搭配完善的可视化界面给开发运维带来极大的便利;
  • 搭建简单,学习曲线低。

结合SpringCloud Alibaba我们最终的技术搭配方案:

  • SpringCloud Alibaba - Nacos : 注册中心 (服务发现/注册)
  • SpringCloud Alibaba- Nacos: 配置中心 (动态配置管理)
  • SpringCloud - Ribbon: 负载均衡
  • SpringCloud - Feign: 声明式HTTP客户端(调用远程服务)
  • SpringCloud Alibaba - Sentinel: 服务容错(限流、降级、熔断)
  • SpringCloud - Gateway: API 网关 (webflux 编程模式)
  • SpringCloud - Sleuth:调用链监控
  • SpringCloud Alibaba - Seata: 原Fescar, 即分布式事务解决方案
    
        
            
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2.2.1.RELEASE
                pom
                import
            
        
    
2 SpringCloud Alibaba - Nacos [作为注册中心]

Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现,配置管理和服务管理平台,他是使用 java 编写的,需要依赖 java 环境

Nacos 文档地址: https://nacos.io/zh-cn/docs/quick-start.html

2.1 下载 nacos-server

https://github.com/alibaba/nacos/releases

2.2 启动 nacos-server
  • cmd 运行startup.cmd 文件

  • 访问localhost:8848/nacos/

  • 使用默认的 nacos/nacos 登录

2.3 注册进入 nacos 中

1、首先,修改 pom.xml 文件,引入 Nacos Discovery Starter

 
     com.alibaba.cloud
     spring-cloud-starter-alibaba-nacos-discovery
 

2、在应用的 /resource /application.properties 中配置 Nacos Server地址

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

3、使用@EnableDiscoveryClient 开启服务注册发现功能

 @SpringBootApplication
 @EnableDiscoveryClient
 public class ProviderApplication {

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

4、启动应用、观察 nacos 服务列表是否已经注册上服务

注意每一个应用都应该有名字,这样才能往册上去。修改applicaion.propertes文件

spring.application.name= service provider
server.port=8000

5、注册更多的服务上去,测试使用 feign 远程

Nacos 使用三步
1、导包
2、写配置,指定 nacos 地址,指定应用的名字
3、开启服务注册发现功能 @EnableDiscoveryClient

3 SpringCloud Alibaba - Nacos [作为配置中心] 3.1 pom.xml 引入 Nacos Config Starter
  

   com.alibaba.cloud
   spring-cloud-starter-alibaba-nacos-config

3.2 在应用的 resource 下 bootstrap.properties
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
3.3 在 nacos 中添加配置

3.4 在应用中使用@Value 和 @RefreshScope
@RefreshScope // 刷新对应controller
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
    @Autowired
    private CouponService couponService;

    @Value("${coupon.user.name}")
    private String name;

    @Value("${coupon.user.age}")
    private Integer age;
    @RequestMapping("/test")
    public R test() {
        return R.ok().put("name",name).put("age",age);
    }

bootstrap.properties 配置

spring.application.name=gulimall-coupon # 服务的名称
spring.cloud.nacos.config.server-addr=127.0.0.1:8848  # 服务注册地址
spring.cloud.nacos.config.namespace=ae34901c-9215-4409-ae61-c6b8d6c8f9b0  # 命名空间地址
#spring.cloud.nacos.config.group=111 # 对应分组

spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml  # 配置集指定data_id
spring.cloud.nacos.config.ext-config[0].group=dev               # 配置集指定 group 分组
spring.cloud.nacos.config.ext-config[0].refresh=true            # 是否动态刷新 在配置中心修改后 微服务自动刷新
/ **
 * 1、使用 Nacos作为配置中心统一管理配置
 *   1) 引入依赖
 *           
 *             com.alibaba.cloud
 *             spring-cloud-starter-alibaba-nacos-config
 *         
 *  2)在resources下创建一个 bootstrap.properties 文件
 *      spring.application.name=gulimall-coupon
 *      spring.cloud.nacos.config.server-addr=127.0.0.1:8848
 *  3)给配置中心默认添加一个配置集(Data ID) gulimall-coupon(当前应用名).properties,并添加所有配置
 *  4)Controller上添加, @RefreshScope 动态获取配置 + @Value(${配置项名称}) 获取配置值
 *      如果配置中心和当前应用配置文件中都配置了相同的项,优先使用配置中心的配置
 *
 * 2、 细节
 *  1)命名空间:配置隔离
 *      默认:public(保留空间),默认新增的所有配置都在pulibc空间
 *       a. 开发、测试、生产:利用命名空间来做环境隔离
 *          注意: 在 bootstrap.properties 配置上需要使用哪个命名空间下的配置
 *          spring.cloud.nacos.config.namespace=71adbb8e-f606-4d5c-9c0d-ee175abd7c89
 *       b. 每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置
 *
 *  2)配置集:所有配置的集合
 *
 *  3)配置集ID:类似文件名
 *      Data ID:类似文件名
 *
 *  4)配置分组:
 *      默认所有的配置集都属于:DEFAULT_GROUP;
 *      1111,618,1212
 *      spring.cloud.nacos.config.group=1111
 *
 * 每个微服务创建自己的命名空间,使用配置分组区分环境,dev,test,prod
 *
 *  3、 同时加载多个配置集
 *   1)微服务任何配置信息,任何配置文件都可以放在配置中心中
 *   2)只需要在 bootstrap.properties 说明加载配置中心中哪些配置文件即可
 *   3) 以前SpringBoot任何方法从配置文件中获取值都能使用,如 @Value、@ConfigurationProperties
 *      注意:配置中心有的优先使用配置中心中的
 */
二、SpringCloud 1 Feign 声明式远程调用 1.1 简介

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

Feign 整合了 Ribbon(负载均衡)和 Hystrix(服务熔断),可以让我们不再需要显示地使用这两个组件。

SpringCloud Feign,在 NetflixFeign 的基础上扩展了对 SpringMVC 注解的支持,在其实现下,我们只需创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定。简化了 SpringCloud Ribbon 自行封装服务调用客户端的开发量。

1.2 使用

1、引入依赖


            org.springframework.cloud
            spring-cloud-starter-openfeign

2、开启 feign 功能

@EnableFeignClients(basePackages = "com.xxx.gulimall.pms.feign") // 指定feign包位置

3、声明远程接口

@FeignClient("gulimall-ware")
public interface WareFeignService {
    
    @PostMapping("/ware/waresku/skus")
    public Resp> skuWareInfos(@RequestBody List skuIds)
}

总结

/ **
Feign 使用三步
1、导包 openfeign
2、开启 @EnableFeignClients 功能
3、编写接口,进行远程调用
 *      1) 引入 Openfeign
 *      2) 编写一个接口(放在feign包下),告诉 SpringCloud这个接口需要调用远程服务
 *          @FeignClient("gulimall-coupon")
 *        a. 声明接口的每一个方法都是调用哪个远程服务的哪个请求
            @RequestMapping("/coupon/coupon/member/list")
            public R memberCoupons();
        3) 开启远程调用功能
        @EnableFeignClients(basePackages = "com.wumiao.gulimall.member.feign")
2 Gateway 2.1 简介



网关作为流量的入口,常用功能包括路由转发,权限效验,限流控制等,而 SpringCloud GateWay作为 SpringCloud 官方推出的第二代网关框架,取代了 Zull 网关。

网关提供 API 全托管服务,丰富的 API 管理功能,辅助企业管理大规模的 API,以降低管理成本和安全风险、包括协议适配、协议转发、安全策略、防刷、流量、监控日志等功能。

Spring Cloud GateWay 旨在提供一种简单有效的方式来对 API 进行路由,并为他们提供切面,例如:安全性、监控/指标 和弹性等

官网文档地址:https://spring.io/projects/spring-cloud-gateway

术语机翻:

  • Route: The basic building block of the gateway. It is defined by an ID, a destination URI, a collection of predicates, and a collection of filters. A route is matched if the aggregate predicate is true.
    路由:网关的基本构建块。它由 ID、目标 URI、谓词集合和过滤器集合定义。如果聚合谓词为真,则匹配路由。
  • Predicate: This is a Java 8 Function Predicate. The input type is a Spring Framework ServerWebExchange. This lets you match on anything from the HTTP request, such as headers or parameters.
    断言:这是一个 Java 8 函数断言。输入类型是 Spring Framework ServerWebExchange。这使您可以匹配来自 HTTP 请求的任何内容,例如标头或参数。
  • Filter: These are instances of GatewayFilter that have been constructed with a specific factory. Here, you can modify requests and responses before or after sending the downstream request.
    过滤器:这些是使用特定工厂构建的 GatewayFilter实例。在这里,您可以在发送下游请求之前或之后修改请求和响应。

工作流程:

2.2 使用

(1) 建module(gulimall-getway,同gulimall-coupon)
(2) 改pom

        
            org.springframework.cloud
            spring-cloud-starter-gateway
        

(3)写yaml

  • application.yml
spring:
    cloud:
        gateway:
            routes:
                - id: test_route
                  uri: https://baidu.com
                  predicates:
                      - Query=url,baidu
                - id: qq_route
                  uri: https://qq.com
                  predicates:
                      - Query=url,qq
  • bootstrap.properties
spring.application.name=gulimall-gateway

spring.cloud.nacos.config.server-addr=127.0.0.1:8848

#每个微服务创建自己的命名空间,使用配置分组区分环境,dev,test,prod
spring.cloud.nacos.config.namespace=6257a9b4-1055-4f2d-adff-ccfab4d3d12d
#spring.cloud.nacos.config.group=dev
#spring.cloud.nacos.config.group=prod

(4)主启动

@EnableDiscoveryClient
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) // 排除跟数据源你有关的配置
public class GulimallGetwayApplication {

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

}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/852048.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号