实例分布式架构——服务调用

步骤一创建父项目的pom

  1. <?xml version="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.0</modelVersion>
  5. <groupId>com.example</groupId>
  6. <artifactId>springcloudalibaba</artifactId>
  7. <packaging>pom</packaging>
  8. <version>0.0.1-SNAPSHOT</version>
  9. <modules>
  10. <module>order</module>
  11. <module>stock</module>
  12. </modules>
  13. <!--springboot的版本管理启动器-->
  14. <parent>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-parent</artifactId>
  17. <version>2.1.3.RELEASE</version>
  18. </parent>
  19. <name>springcloudalibaba</name>
  20. <description>springcloudalibaba</description>
  21. <properties>
  22. <java.version>1.8</java.version>
  23. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  24. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  25. <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
  26. </properties>
  27. <dependencies>
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter</artifactId>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-starter-test</artifactId>
  35. <scope>test</scope>
  36. <exclusions>
  37. <exclusion>
  38. <groupId>org.junit.vintage</groupId>
  39. <artifactId>junit-vintage-engine</artifactId>
  40. </exclusion>
  41. </exclusions>
  42. </dependency>
  43. </dependencies>
  44. <dependencyManagement>
  45. <dependencies>
  46. <dependency>
  47. <groupId>org.springframework.boot</groupId>
  48. <artifactId>spring-boot-dependencies</artifactId>
  49. <version>${spring-boot.version}</version>
  50. <type>pom</type>
  51. <scope>import</scope>
  52. </dependency>
  53. </dependencies>
  54. </dependencyManagement>
  55. <build>
  56. <plugins>
  57. <plugin>
  58. <groupId>org.apache.maven.plugins</groupId>
  59. <artifactId>maven-compiler-plugin</artifactId>
  60. <version>3.8.1</version>
  61. <configuration>
  62. <source>1.8</source>
  63. <target>1.8</target>
  64. <encoding>UTF-8</encoding>
  65. </configuration>
  66. </plugin>
  67. <plugin>
  68. <groupId>org.springframework.boot</groupId>
  69. <artifactId>spring-boot-maven-plugin</artifactId>
  70. <version>2.3.7.RELEASE</version>
  71. <configuration>
  72. <mainClass>com.example.springcloudalibaba.SpringcloudalibabaApplication</mainClass>
  73. </configuration>
  74. <executions>
  75. <execution>
  76. <id>repackage</id>
  77. <goals>
  78. <goal>repackage</goal>
  79. </goals>
  80. </execution>
  81. </executions>
  82. </plugin>
  83. </plugins>
  84. </build>
  85. </project>

创建一个order项目,创建一个 stock项目
image.png
image.png
order调用stock模块
在启动类springbootApplication添加restTemplate的Bean

 @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder){
        RestTemplate restTemplate = builder.build();
        return restTemplate;
  }
@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;


    @GetMapping("/add")
    public String add(){
        System.out.println("下单成功");
        String msg = restTemplate.getForObject("http://localhost:8002/stock/reduct", String.class);
        return "ok"+msg;
    }
}
@RestController
@RequestMapping("/stock")
public class StockController {

    @GetMapping("reduct")
    public String reduct(){
        System.out.println("扣减库存");
     return "扣减库存";
    }
}

测试
image.png

这种架构的缺陷:服务很多之后很难维护