电商项目3、springcloudAlibaba


替代方案:
SpringCloud Alibaba - Nacos :注册中心(服务发现/ 注册)
SpringCloud Alibaba - Nacos :配置中心(动态配置管理)
SpringCloud - Ribbon :负载均衡
SpringCloud - Feign :声明式 HTTP 客户端(调用远程服务)
SpringCloud Alibaba - Sentinel :服务容错(限流、降级、熔断)
SpringCloud - Gateway :API 网关(webflux 编程模式)
SpringCloud - Sleuth :调用链监控
SpringCloud Alibaba - Seata原 :原 Fescar

springcloud、springboot版本对应的springcloudAlibaba版本
在这里插入图片描述

1、服务的注册与发现(nacos)

在 common 项目中引入如下。进行统一管理
1、

 <!--springcloudalibaba-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

2、nacos引入服务注册与发现

  <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

3、下载nacos
https://github.com/alibaba/nacos/releases?page=4
在这里插入图片描述
下载完毕点击启动
在这里插入图片描述
4、使用nacos:
每个微服务,配置注册中心地址
application.yml

 cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

5、 使用@EnableDiscoveryClient开启服务注册与发现
GulimallCouponApplication

package com.ljs.gulimall.coupon;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class GulimallCouponApplication {

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

}

6、启动服务。然后看服务有无注册到注册中心
http://localhost:8848/nacos

用户名密码:nacos

###微服务必须指定微服务名称,才可以注册到注册中心
在这里插入图片描述
在这里插入图片描述
说明已经注册进来

其他服务同理
在这里插入图片描述

2、服务间远程调用(openFeign)

场景:会员获取优惠券
会员服务远程调用优惠券服务

1、引入openFeign组件

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

2、在优惠券服务编写一个接口,告诉springcloud、member服务需要进行远程调用

/**
     * 获取优惠券信息
     *
     * @return R
     */
    @RequestMapping("/getCoupon")
    public R list(){
        CouponEntity couponEntity = new CouponEntity();
        couponEntity.setCouponName("满一万减一块");
        return R.ok().put("coupon",Arrays.asList(couponEntity));
    }

3、member服务建立feign包

CouponFeignService

package com.ljs.gulimall.member.feign;

import com.ljs.gulimall.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

@FeignClient("gulimall-coupon")
public interface CouponFeignService {
    @RequestMapping("/coupon/coupon/getCoupon")
    public R list();
}

调用哪个接口,完整复制过来
声明接口的每个方法都是调用哪个远程服务的哪个请求

4、开启远程调用

在member的启动类上增加
@EnableFeignClients(basePackages = “com.ljs.gulimall.member.feign”)

5、之后就可以在member的任意地方调用远程接口了
MemberController

 @Autowired
    private CouponFeignService couponFeignService;

    @RequestMapping("/getCoupons")
    public R getCoupons(){
        MemberEntity memberEntity = new MemberEntity();
        memberEntity.setNickname("张三");
        R list = couponFeignService.list();
        return R.ok().put("member",memberEntity).put("coupon",list.get("coupon"));
    }

6、重启member和coupon服务
访问接口
在这里插入图片描述

成功

7、如果coupon服务掉线
首先注册中心显示实例不健康
在这里插入图片描述
然后再次访问刚才的远程调用接口
在这里插入图片描述

3、配置中心

1、在common服务中引入配置中心

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2、在服务中新建bootstrap.properties

spring.application.name=gulimall-coupon

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

3、测试类在本地文件中读取
application.properties

coupon.user.name=ljs
coupon.user.age=30

CouponController

@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);
    }

在这里插入图片描述

4、这样的方式需要修改代码,不方便。可以实现nacos动态加载配置
在这里插入图片描述

点击发布
在这里插入图片描述
在这里插入图片描述

需要每次重启项目,才能读取最新配置比较麻烦。在需要的类上加@RefreshScope
就可以实现动态刷新了

##当配置中心和当前应用配置文件配置了相同项。会优先读取配置中心

3.2、命名空间

命名空间可以用做环境隔离。对test,prod或dev环境进行隔离

新建命名空间
在这里插入图片描述

比如要上线则需要:在prod里添加配置在这里插入图片描述

在这里插入图片描述

然后在配置里加上
在这里插入图片描述
bootstrap.properties

spring.cloud.nacos.config.namespace=f1ee59eb-4435-4e88-be78-67fad523122e

##重启项目访问,然后读取的就是prod的值,平时不指定命名空间,默认走public
在这里插入图片描述
命名空间也可以每一个微服务之间相互隔离,每一个微服务创建自己的一个命名空间。只加载自己命名空间下的所有配置

3.3、配置集

配置集:所有配置的集合

3.4、配置集id

也是Data id
在这里插入图片描述
类似文件名

3.5、配置分组

在这里插入图片描述

配置文件中,可以指定读取1111这个配置文件

bootstrap.properties

spring.cloud.nacos.config.namespace=b65fc030-7e5e-4d43-96ce-da9e12bbfe7c

spring.cloud.nacos.config.group=1111

在这里插入图片描述

##综合起来。我们每个微服务创建自己的命名空间,再使用配置分组区分环境

在这里插入图片描述
在这里插入图片描述

每次只需改配置分组即可

spring.cloud.nacos.config.group=dev

在这里插入图片描述

spring.cloud.nacos.config.group=prod

在这里插入图片描述

3.6、nacos加载多个配置集

分为3部分:dataSource.yml mybatis.yml other.yml

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
bootstrap.properties

spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
spring.cloud.nacos.config.ext-config[0].group=dev
spring.cloud.nacos.config.ext-config[0].refresh=true

spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
spring.cloud.nacos.config.ext-config[1].group=dev
spring.cloud.nacos.config.ext-config[1].refresh=true

spring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true

application.yml注释

#spring:
  #datasource:
    #username: root
    #password: ljs
    #url: jdbc:mysql://175.178.76.109:3309/gulimall_sms?useUnicode=true&characterEncoding=utf-8
    #driver-class-name: com.mysql.jdbc.Driver
  #cloud:
    #nacos:
      #discovery:
        #server-addr: 127.0.0.1:8848
#mybatis-plus:
  #mapper-locations: classpath:/mapper/**/*.xml
  #global-config:
    #db-config:
      #id-type: auto
#server:
  #port: 7000


启动无报错,访问成功
在这里插入图片描述
测试数据库连接无报错
在这里插入图片描述
在这里插入图片描述

4、网关(gateway)

网关是所有请求的入口,常见功能:路由转发、限流、权限校验等
gateway作为springcloud第二代网关,是代替了zuul网关

在这里插入图片描述

#客户端请求到达网关,网关通过断言来判定此次请求是否符合路由规则。如何符合,就将这些请求指定到指定地方。在指定过程中需要一系列过滤

创建一个module,网关项目

在这里插入图片描述

在这里插入图片描述

 <dependency>
                <groupId>com.ljs.gulimall</groupId>
                <artifactId>gulimall-common</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>

GulimallGatewayApplication

@EnableDiscoveryClient

application.properties

# 应用名称
spring.application.name=gulimall-gateway

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

bootstrap.properties

spring.application.name=gulimall-coupon

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

4.2、创建名称空间

在这里插入图片描述

在这里插入图片描述
bootstrap.properties

spring.cloud.nacos.config.namespace=61000358-7806-44a3-a5df-ededef9ca7da

##直接启动会报错
在这里插入图片描述
由于网关引入common工程,且common工程引入了mybatis。网关不需要引入则排除

启动类

package com.ljs.gulimall.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableDiscoveryClient
public class GulimallGatewayApplication {

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

}

可以正常启动了
在这里插入图片描述

4.3、配置网关

新建application.yml文件

spring:
  cloud:
    gateway:
      routes:
        - id: baidu_route
          uri: https://www.csdn.net
          predicates:
            - Query=url,csdn

        - id: qq_route
          uri: https://www.qq.com
          predicates:
            - Query=url,qq

访问
http://localhost:88/aa?url=qq
在这里插入图片描述
访问

http://localhost:88/aa?url=csdn
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该项目是采用目前比较流行的SpringBoot/SpringCloud构建微服务电商项目,项目叫 《果然新鲜》,实现一套串联的微服务电商项目。完全符合一线城市微服务电商的需求,对学习微服务电商架构,有非常大的帮助,该项目涵盖从微服务电商需求讨论、数据库设计、技术选型、互联网安全架构、整合SpringCloud各自组件、分布式基础设施等实现一套完整的微服务解决方案。 项目使用分布式微服务框架,涉及后台管理员服务、地址服务、物流服务、广告服务、商品服务、商品类别服务、品牌服务、订单服务 、购物车服务、首页频道服务、公告服务、留言服务、搜索服务、会员服务等。  系统架构图   SpringBoot+SpringCloud+SSM构建微服务电商项目使用SpringCloud Eureka作为注册中心,实现服务治理使用Zuul网关框架管理服务请求入口使用Ribbon实现本地负载均衡器和Feign HTTP客户端调用工具使用Hystrix服务保护框架(服务降级、隔离、熔断、限流)使用消息总线Stream RabbitMQ和 Kafka微服务API接口安全控制和单点登录系统CAS+JWT+OAuth2.0分布式基础设施构建分布式任务调度平台XXL-JOB分布式日志采集系统ELK分布式事务解决方案LCN分布式锁解决方案Zookeeper、Redis分布式配置中心(携程Apollo)高并发分布式全局ID生成(雪花算法)分布式Session框架Spring-Session分布式服务追踪与调用链Zipkin项目运营与部署环境分布式设施环境,统一采用Docker安装使用jenkins+docker+k8s实现自动部署微服务API管理ApiSwagger使用GitLab代码管理(GitHub  GitEE)统一采用第三方云数据库使用七牛云服务器对静态资源实现加速 开发环境要求JDK统一要求:JDK1.8Maven统一管理依赖 统一采用Docker环境部署编码统一采用UTF-8开发工具IDEA 或者 Eclipse 
天猫商城是一个基于SSM框架的综合性B2C电商平台,需求设计主要参考天猫商城的购物流程:用户从注册开始,到完成登录,浏览商品,加入购物车,进行下单,确认收货,评价等一系列操作。 作为模拟天猫商城系统的核心组成部分之一,采用SSM框架的天猫数据管理后台包含商品管理,订单管理,类别管理,用户管理和交易额统计等模块,实现了对整个商城的一站式管理和维护。本课程是一门专业的Java微服架构开发实战课程,主要讲解了当下流行的SpringBoot框架、SpringCloud架构以及与第三方技术整合开发实战内容。通过本课程的学习,能够理解并掌握SpringBoot的基础知识,同时能够掌握SpringBoot与常用的第三方技术整合实现实际开发中的业务需求,包括实现Web开发、数据访问、缓存管理、安全管理、消息服务、任务管理等;了解并掌握SpringCloud微服务架构的基础知识及相关组件的应用,掌握微服务架构在企业级开发的实践,建立起微服架构思想。项目技术栈:采用SpringBoot简化商城系统的初始搭建以及开发过程采用SpringMVC+Spring+IBatis完成项目的整合采用Mysql作为数据库存储,Druid配置数据库连接池采用SpringCloud+Netflix 微服务技术栈的实战开发使用Redis完成缓存的数据存储,搭建Redis搭建主从、哨兵、集群应用,保证Redis的高可用使用ElasticSearch全文检索系统进行商品数据搜索,使用ElasticSearch搭建搜索服务的高可用使用Ngnix实现页面动静分离与负载均衡的配置采用FastDFS文件储存系统文件存储,完成广告图片、商品图片的上传和存储系统使用采用CAS+shiro单点登录系统实现用户认证使用ECharts根据后台查询数据生成图表使用POI实现了商城盈利状况的Excel表格导出。商品的详情页使用Thymeleaf完成页面静态化,减少页面数据展示延迟项目中使用SpringBoot下的Aop + 自定义注解完成用户行为记录,日志采集后台管理系统使用Shiro实现登录验证和权限管理(超级管理员、管理员、产品编辑员)项目整合微信完成订单的支付使用Redission完成分布式锁,生成订单的编号使用SpringCloud Alibaba Seat完成下订单模块的分布式事务(新增订单表,库存减少,库存超卖设计)使用RabbitMQ 做消息队列,完成订单未支付自动取消和模块直接的解耦合使用Quartz任务调度,完成缓存的定时刷新,保证缓存的一致性使用本地消息表机制完成消息然队列RabbitMQ消息可靠性传输订单支付模块使用微信扫码支付,并设置订单超时自动取消通过Jquery实现前端校验,通过基于Hibernate的Valida注解实现后端的校验功能使用Base64编码对Json数据传输进行编码和解码项目使用RESTful设计风格实现资源的访问,实现前后端分离项目使用聚合数据第三方短信平台完成用户的登陆功能项目使用SpringBoot整合JavaMail完成邮件的发送项目使用SpringBoot整合Swagger2生成接口文档使用PostMan完成接口的测试项目的测试:SpringTest、dbunit、EasyMock使用Docker 进行应用的自动化打包和发布、自动化测试和持续集成、部署和调整其他应用使用 PowerDesigner,完成数据库的建模项目使用禅道进行BUG管理环境采用Maven实施多模块项目构建,采用Git进行项目版本管理 架构解读:  项目部分截图:              讲义部分截图:          

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值