• 微服务入门案例


    boot与cloud版本

    springboot:提供了快速开发微服务的能力
    springcloud提供了微服务治理的能力(服务注册与发现、服务降级、限流、熔断、网关、负载均衡、配置中心...),为微服务开发提供了全家桶服务

    springboot的版本查看地址:Spring Boot

    springcloud的版本查看地址:Spring Cloud

    详细版本对应信息查看:https://start.spring.io/actuator/info

     

    SpringCloud-alibaba

    Springcloud与springcloud-alibaba关系

    ◆ 我们通常说的SpringCloud,泛指Spring Cloud Netflix,也是springcloud第一代
    ◆ SpringCloud Alibaba是SpringCloud的子项目,是阿里巴巴结合自身微服务实践,
    ◆ SpringCloud Alibaba符合SpringCloud标准,依赖于springcloud

    确定版本

    确定方式:通过查看springcloud alibaba 官网确定

    https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明

     https://github.com/alibaba/spring-cloud-alibaba/wiki/

     

    这里使用:

    springcloud-alibaba: 2.2.5.RELEASE

    springcloud: Hoxton.SR8

    springboot: 2.3.2.RELEASE

    创建父工程

    父工程锁定springboot、springcloud、springcloud-alibaba版本

    下图为示例项目模块  父项目用maven项目就可以

      下图是父项目的pom.xml  cloud1的pom.xml

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0modelVersion>
    6. <groupId>com.qianfenggroupId>
    7. <artifactId>cloud1artifactId>
    8. <version>1.0-SNAPSHOTversion>
    9. <packaging>pompackaging>
    10. <modules>
    11. <module>goodsmodule>
    12. <module>ordersmodule>
    13. <module>commonsmodule>
    14. modules>
    15. <parent>
    16. <groupId>org.springframework.bootgroupId>
    17. <artifactId>spring-boot-starter-parentartifactId>
    18. <version>2.3.2.RELEASEversion>
    19. <relativePath/>
    20. parent>
    21. <properties>
    22. <maven.compiler.source>8maven.compiler.source>
    23. <maven.compiler.target>8maven.compiler.target>
    24. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    25. properties>
    26. <dependencyManagement>
    27. <dependencies>
    28. <dependency>
    29. <groupId>com.alibaba.cloudgroupId>
    30. <artifactId>spring-cloud-alibaba-dependenciesartifactId>
    31. <version>2.2.5.RELEASEversion>
    32. <type>pomtype>
    33. <scope>importscope>
    34. dependency>
    35. <dependency>
    36. <groupId>org.springframework.cloudgroupId>
    37. <artifactId>spring-cloud-dependenciesartifactId>
    38. <version>Hoxton.SR8version>
    39. <type>pomtype>
    40. <scope>importscope>
    41. dependency>
    42. dependencies>
    43. dependencyManagement>
    44. project>

    服务提供者

    项目的goods older相当于是一个nacos客户端

    goods的pom.xml

    描述父项目  父项目里面写上关联子项目才算关联成功

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0modelVersion>
    5. <parent>
    6. <groupId>com.qianfenggroupId>
    7. <artifactId>cloud1artifactId>
    8. <version>1.0-SNAPSHOTversion>
    9. parent>
    10. <groupId>com.qianfenggroupId>
    11. <artifactId>goodsartifactId>
    12. <version>0.0.1-SNAPSHOTversion>
    13. <name>goodsname>
    14. <description>goodsdescription>
    15. <properties>
    16. <java.version>1.8java.version>
    17. properties>
    18. <dependencies>
    19. <dependency>
    20. <groupId>org.springframework.bootgroupId>
    21. <artifactId>spring-boot-starter-webartifactId>
    22. dependency>
    23. <dependency>
    24. <groupId>org.springframework.bootgroupId>
    25. <artifactId>spring-boot-starter-actuatorartifactId>
    26. dependency>
    27. <dependency>
    28. <groupId>com.alibaba.cloudgroupId>
    29. <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
    30. dependency>
    31. <dependency>
    32. <groupId>org.projectlombokgroupId>
    33. <artifactId>lombokartifactId>
    34. dependency>
    35. <dependency>
    36. <groupId>org.springframework.bootgroupId>
    37. <artifactId>spring-boot-testartifactId>
    38. <scope>testscope>
    39. dependency>
    40. <dependency>
    41. <groupId>junitgroupId>
    42. <artifactId>junitartifactId>
    43. <scope>testscope>
    44. dependency>
    45. <dependency>
    46. <groupId>org.junit.jupitergroupId>
    47. <artifactId>junit-jupiterartifactId>
    48. <scope>testscope>
    49. dependency>
    50. dependencies>
    51. <build>
    52. <plugins>
    53. <plugin>
    54. <groupId>org.springframework.bootgroupId>
    55. <artifactId>spring-boot-maven-pluginartifactId>
    56. plugin>
    57. plugins>
    58. build>
    59. project>

    下图是goods的配置文件  这是一个springboot项目

    1. spring:
    2. application:
    3. name: goods
    4. cloud:
    5. nacos:
    6. discovery:
    7. server-addr: localhost:8848
    8. username: nacos
    9. password: nacos
    10. server:
    11. port: 9001

    下图是goods一个controller   controller的包要写在goods下面  访问时访问配置的9001

    1. @RestController
    2. @RequestMapping("/goods")
    3. public class GoodsController {
    4. @RequestMapping("/getOne")
    5. public Goods getOne(Integer gid){
    6. Goods goods = new Goods(gid, "小浣熊", 1);
    7. return goods;
    8. }
    9. }

    order的pom.xml跟goods的xml一样  导依赖描述父项目  只是配置文件端口改为9002

    commons是一个管理实体类的项目模块  pom文件如下  是一个maven项目

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <parent>
    6. <artifactId>cloud1artifactId>
    7. <groupId>com.qianfenggroupId>
    8. <version>1.0-SNAPSHOTversion>
    9. parent>
    10. <modelVersion>4.0.0modelVersion>
    11. <artifactId>commonsartifactId>
    12. <dependencies>
    13. <dependency>
    14. <groupId>org.projectlombokgroupId>
    15. <artifactId>lombokartifactId>
    16. dependency>
    17. dependencies>
    18. <properties>
    19. <maven.compiler.source>8maven.compiler.source>
    20. <maven.compiler.target>8maven.compiler.target>
    21. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    22. properties>
    23. project>

    例如order项目想引入goods实体类  导入commons的gva坐标就可以在order项目里使用实体类

    RestTemplate对象

    在order订单的启动类里面注入RestTemplate对象  注入

    在order的controller里面写如下代码   可以访问到goods的路径  并返回goods实体类

    下图的http://goods 这里的goods是服务名  如何根据服务名服务就带有ip跟端口  如何做如下操作

     在RestTemplate对象上加@LoadBalanced注解  就可以通过服务名访问

     微服务做集群

    复制一个goods改为goods_8001 端口改为8001

    复制过来只是一个文件夹不是项目,这时先进来改pom.xml,artifactID  name都改为goods_8001

     

    这时点击maven里的加号,选择goods_8001的pom.xml点ok  就成了一个项目

    这时看nacos服务   goods的实例数成了两个  就做了集群

    这时再访问下图链接

     集群的两个轮询访问

    RestTemplate介绍

    实现服务间远程调用

     

    ForObject

     

     示例:

    下图是goods里面的一个test

     下图是order的一个test

     

     

    ForEntity

    返回的是响应体

     示例

     返回的是一些响应体

     

     

  • 相关阅读:
    STM32H7 DMA阅读笔记
    03【MyBatis参数深入】
    MATLAB | 官方举办的动图绘制大赛 | 第二周赛情回顾
    DDR2 IP核调式记录2
    colab直接下载kaggle数据集
    带你入门HTML+CSS网页设计,编写网页代码的思路
    公共建筑节能大数据应用进展
    MySQL8的ONLY_FULL_GROUP_BY SQL模式兼容问题
    Gitlab用户信息批量导出,批量block,unblock
    vscode调教配置:快捷修复和格式化代码
  • 原文地址:https://blog.csdn.net/weixin_60934893/article/details/128180176