分布式项目搭建

目录

环境要求

新建工程

new project

next 项目初始化

next 依赖启动项

创建完成

​编辑 

父pom文件

​编辑

创建服务

添加依赖 

创建controller

订单controller 

库存controller

远程调用

配置启动类

restTemplate配置

注入以及请求

端口号配置

测试

问题


环境要求

1. jdk 1.8以上

2. maven 3.6以上

新建工程

new project

这里面选择spring initializr和maven都是一样的,选择前者会快速创建springboot项目,帮你配好application文件,还可以选择需要的启动器,启动类也会建好,如果创建maven的话就需要手动去建上述东西

next 项目初始化

一般父maven项目都是用来管理子maven项目的,或者子maven项目继承父maven项目的依赖,所以父maven项目只需要pom文件就够了,选择maven pom就不会创建svc等等的一些文件,其实packaging打包方式,父maven不会用来打包的,应该选择pom会在代码里面改

next 依赖启动项

版本后面在代码里面改,直接next和finish 

创建完成

可以看到没有其他文件

父pom文件

配置打包方式为pom,当我们运行mvn package的时候就不会打包成jar包 

依赖

创建服务

创建服务的时候建议选择maven,你选择spring initializr的话就会自动选择上述配置,因为我们选择服务是在父pom文件下的,可以继承fupom文件的依赖,所以里面不需要写这些配置,选择maven的话就可以选择要继承哪个maven项目

创建订单服务

创建完成,直接配置了父maven项目 

同样的方式创建库存服务,创建完成 

添加依赖 

我们需要创建controller方便调用,所以需要使用到spring MVC,所以呢是需要添加web依赖的,同样也要添加到库存服务中去

创建controller

订单controller 

@RestController
@RequestMapping("/order")
public class OrderController {
    @PostMapping("/add")
    public String add(){
        System.out.println("下单成功");
        return "hello world";
    }
}

库存controller

@RestController
@RequestMapping("/stock")
public class StockController {
    @PostMapping("/reduce")
    public String reduce(){
        System.out.println("库存扣减");
        return "库存扣减";
    }
}

远程调用

一般是通过http进行调用,但是现在用springboot,里面就有restTemplate,用这个的话还需要进行配置,我们这里就配置在启动类里面,因为启动类也是配置类

配置启动类

@SpringBootApplication
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}
@SpringBootApplication
public class StockApplication {
    public static void main(String[] args) {
        SpringApplication.run(StockApplication.class, args);
    }
}

restTemplate配置

通常写在配置类里面,这里面图方便

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

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder){
        return builder.build();
    }
}

注入以及请求

@RestController
@RequestMapping("/order")
public class OrderController {
    @Autowired
    private RestTemplate restTemplate;

    @PostMapping("/add")
    public String add(){
        System.out.println("下单成功");

        /**
         * 1. 请求地址
         * 2. 响应的数据类型
         * 3. 入参
         */
        String url = "http://localhost:8011/stock/reduce";
        String response = restTemplate.getForObject(url, String.class);
        return "hello world" + response;
    }
}

端口号配置

订单服务端口号

server:
  port: 8010

库存服务端口号

server:
  port: 8011

测试

同时启动两个启动类,演示的时候,拿浏览器测试的,浏览器只支持get请求,所以我把之前代码改成了get请求的了

远程调用成功

问题

如果服务很多的话,我们需要一个服务一个服务去维护,通过注册中心可以很方便的管理起来,而且通过上述代码我们可以看到如果远程机器的地址或者端口改变,我们也需要不停的去修改代码,维护起来很不方便,通过地址我们很难判断这个地址是属于哪个服务的

这么写也可以让子pom文件继承父pom文件的依赖,而且统一写到dependencyManagement里面,方便管理

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值