经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring » 查看文章
SpringCloudAlibaba分布式组件详解
来源:jb51  时间:2021/8/26 12:38:16  对本文有异议

分布式组件-SpringCloud Alibaba

image-20210824212747220

简介

image-20210824212950389

  1. SpringCloudAlibaba的优势:
  2. 阿里使用过的组件经历了考验,性能强悍,设计合理,现在开源出来大家用成套的产品搭配完善的可视化界面给开发运维带来了极大的便利,搭建简单,学习曲线低。
  3. SpringCloud Alibaba-Nacos:注册中心(服务发现/注册)
  4. SpringCloud Alibaba-Nacos:配置中心(动态配置管理)
  5. SpringCloud-Ribbon:负载均衡
  6. SpringCloud-Feign:声明式HTTP客户端(调用远程服务)
  7. SpringCloud Alibaba-Sentinel:服务容错(限流、降级、熔断)
  8. SpringCloud-GatewayAPI网关
  9. SpringCloud-Sleuth:调用链监控
  10. SpringCloud Alibaba-Seata:原 Fescar,即分布式事务

gulimall-common的pom.xml

  1. <dependencyManagement>
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  5. <version>2.1.0.RELEASE</version>
  6. <type>pom</type>
  7. <scope>import</scope>
  8. </dependency>
  9. </dependencies>
  10. </dependencyManagement>

Nacos注册中心

  1. 第一步:gulimall-commonpom.xml加入依赖
  2. <!-- 服务注册/发现-->
  3. <dependency>
  4. <groupId>com.alibaba.cloud</groupId>
  5. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  6. </dependency>
  1. 第二步:下载nacos
  2. 地址:github.com/alibaba/nacos/releases
  3. 版本:1.1.3
  1. 第三步:修改你要将那个服务注册上去的application.yml
  2. spring:
  3. application:
  4. name: gulimall-coupon
  5. cloud:
  6. nacos:
  7. discovery:
  8. server-addr: localhost:8848
  1. 第四步:在启动类上标注注解
  2. @EnableDiscoveryClient
  1. 第五步:访问nacos
  2. 路径:127.0.0.1:8848/nacos/#/login

image-20210824220607484

OpenFeign远程调用

需求:gulimall-member会员服务调用gulimall-coupon优惠券服务

  1. 1.gulimall-common pom.xml文件加入
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-openfeign</artifactId>
  5. </dependency>
  1. 2.//gulimall-coupon
  2. @RestController
  3. @RequestMapping("coupon/coupon")
  4. public class CouponController {
  5. @RequestMapping("/member/list")
  6. public R membercoupons(){
  7. CouponEntity couponEntity = new CouponEntity();
  8. couponEntity.setCouponName("满100减10");
  9. return R.ok().put("coupon",Arrays.asList(couponEntity));
  10. }
  11. }
  1. 3.//gulimall-member
  2. @FeignClient("gulimall-coupon")
  3. public interface CouponFeignService {
  4. @RequestMapping("/coupon/coupon/member/list")
  5. public R membercoupons();
  6. }
  1. 4.//开启远程调用功能:EnableFeignClients
  2. @EnableRedisHttpSession
  3. @EnableFeignClients(basePackages = "com.xunqi.gulimall.member.feign")
  4. @EnableDiscoveryClient
  5. @SpringBootApplication
  6. public class GulimallMemberApplication {
  7. public static void main(String[] args) {
  8. SpringApplication.run(GulimallMemberApplication.class, args);
  9. }
  10. }
  1. 5.调用
  2. @RestController
  3. @RequestMapping("member/member")
  4. public class MemberController {
  5. @Autowired
  6. private MemberService memberService;
  7. @Autowired
  8. CouponFeignService couponFeignService;
  9. @RequestMapping("/coupons")
  10. public R test(){
  11. MemberEntity memberEntity = new MemberEntity();
  12. memberEntity.setNickname("张三");
  13. R membercoupons = couponFeignService.membercoupons();
  14. return R.ok().put("member",memberEntity).put("coupons",membercoupons.get("coupons"));
  15. }
  16. }

image-20210824222759686

配置中心-简单实例

  1. 1.gulimall-common pom.xml文件加入
  2. <!-- 配置中心来做配置管理-->
  3. <dependency>
  4. <groupId>com.alibaba.cloud</groupId>
  5. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  6. </dependency>
  1. 2.gulimall-coupon创建bootstrap.yml
  2. spring:
  3. application:
  4. name: gulimall-coupon
  5. cloud:
  6. nacos:
  7. config:
  8. server-addr: localhost:8848

3.在application.properties

  1. //此方法有了注册中心后,不再使用
  2. application.properties
  3. coupon.user.name=zhangsan
  4. coupon.user.age=18

image-20210824224404904

image-20210824224655230

image-20210824224805121

image-20210824224934241

配置中心-命名空间

  1. 了解几个概念
  2. 1.命名空间:配置隔离;默认是public
  3. 2.配置集:所有配置的集合
  4. 3.配置集id:类似于文件名
  5. 4.配置分组

image-20210824225506462

刚刚,我们创建的gulimall-coupon.properties是在public的命名空间,里面的内容是name=zhangsan,age=24

现在,我们在prop下也创建一个gulimall-coupon.properties

image-20210824225706715

image-20210824230011812

image-20210824230053911

以上,演示完了命名空间,里面命名空间做环境的隔离;其实是通过dev、prop、public(开发、生成、默认)等角度来命名
现在,我们要给每一个微服务创建自己的命名空间。

image-20210824230555714

配置分组的概念

image-20210824230907837

image-20210824230950909

最终版使用:每一个微服务创建自己的服务命名空间;使用配置分组来确定是dev、prop、test。

image-20210824231237000

image-20210824231342569

配置中心-加载多配置集

随着我们服务越来越多,一个yml文件里面需要配置mysql、redis、server.port等等的配置。现在,我们要将他们抽取出来。

image-20210824231604343

拆分后

image-20210824231721588

image-20210824233206200

Gateway网关核心

Gateway创建测试网关

1.创建网关服务gulimall-gateway

  1. 2.application.properties
  2. spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  3. spring.application.name=gulimall-gateway
  4. server.port=88
  1. 3.bootstrap.yml
  2. spring:
  3. application:
  4. name: gulimall-coupon
  5. cloud:
  6. nacos:
  7. discovery:
  8. server-addr: localhost:8848
  9. config:
  10. server-addr: localhost:8848
  11. # file-extension: yml
  12. namespace: ea65d118-135f-4928-bbc6-c8ec85b3fd78
  1. 4.application.yml
  2. spring:
  3. cloud:
  4. sentinel:
  5. transport:
  6. #配置sentinel dashboard地址
  7. dashboard: localhost:8080
  8. gateway:
  9. routes:
  10. # - id: test_route
  11. # uri: https://www.baidu.com
  12. # predicates:
  13. # - Query=uri,baidu
  14. #
  15. # - id: qq_route
  16. # uri: https://www.qq.com
  17. # predicates:
  18. # - Query=uri,qq

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注w3xue的更多内容!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号