行业资讯 2025年08月6日
0 收藏 0 点赞 759 浏览 4566 个字
摘要 :

文章目录 第1步:创建Module 第2步:修改pom 第3步:写yml 第4步:主启动类 第5步:业务类 第6步:测试 本小节同上一小节类似,我们需要实现微服务消费者订单模块,该……




  • 第1步:创建Module
  • 第2步:修改pom
  • 第3步:写yml
  • 第4步:主启动类
  • 第5步:业务类
  • 第6步:测试

本小节同上一小节类似,我们需要实现服务消费者订单模块,该模块可以调用微服务提供者支付模块上面的接口,其实现过程与支付模块也类似,都是6个步骤,在此不再赘述,其中有些细节也做简略处理,如果有不清楚的,可以参考上一节内容。

微服务提供者支付模块实现—SpringCloud(H版)微服务学习教程(4)

文章目录 第1步:创建Module 第2步:修改pom.xml 第3步:写yml 第4步:主启动类 第5步:业 […]

下面是该模块的项目结构,接着使用以上几步来实现该模块的创建。

第1步:创建Module

我们这里在mscloud父工程下创建一个名为cloud-consumer-order80的子Module,该模块占用端口80

第2步:修改pom

我们修改该子模块pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>mscloud</artifactId>
        <groupId>com.panziye.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-consumer-order80</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- 热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>
</project>

第3步:写yml

我们在resources下新建application.yml如下:

server:
  port: 80

spring:
  application:
    name: cloud-order-service

第4步:主启动类

java目录下新建名为OrderMain80的主启动类,如下:

package com.panziye.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

}

第5步:业务类

1)实体类
直接复制上一个支付模块(即cloud-provider-payment8001子模块)中entities包及其中的两个类(Payment和CommonResult)过来。

注意:这里我们会发现有冗余代码,下一节我们会进行项目重构

2)RestTemplate使用

补充说明:

a)传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐。spring提供了一种简单便捷的模板类来进行操作,这就是RestTemplate。因此我们使用RestTemplate类来实现restful风格的http远程调用。
RestTemplate给我们提供了许多访问模板,这里列出常用几个如下:
微服务消费者订单模块实现—SpringCloud(H版)微服务学习教程(5)

b)更多RestTemplate用法请参考官网:参考RestTemplate API

在此使用:

com.panziye.springcloud包下新建config包,在config包新建ApplicationContextCofig类,将RestTemplate交给Spring管理,代码如下:

package com.panziye.springcloud.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ApplicationContextCofig {
    /**
     * 配置RestTemplate
     * @return
     */
    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

3)我们在com.panziye.springcloud.controller包中新建OrderController如下:

package com.panziye.springcloud.controller;

import com.panziye.springcloud.entities.CommonResult;
import com.panziye.springcloud.entities.Payment;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@RestController
@Slf4j
public class OrderController {

    public static final String PAYMENT_URL = "http://localhost:8001";

    @Resource
    private RestTemplate restTemplate;

    @GetMapping("/consumer/payment/create")
    public CommonResult<Payment> create(Payment payment){
        return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment,CommonResult.class);
    }

    @GetMapping("/consumer/payment/get/{id}")
    public CommonResult<Payment> getPayment(@PathVariable("id") Long id){
        return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);
    }

}

注意:这里不需要dao和service,因为直接远程请求支付模块服务了
测试前的补充:

注意我们需要修改cloud-provider-payment8001子模块,在PaymentController中的create方法参数前添加@RequestBody注解,修改后如下:

@PostMapping(value = "/payment/create")
public CommonResult create(@RequestBody Payment payment){
    int result = paymentService.create(payment);
    log.info("插入数据库结果==="+result);
    if(result>0){
        return new CommonResult(200,"插入数据库成功",result);
    }else{
        return new CommonResult(444,"插入数据库失败");
    }
}

提示:如果不添加此注解,当由消费模块发请求过来时,无法获取请求参数,存入值会为null@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交,我们使用的是RestTemplate的postForObject方法是post请求

第6步:测试

启动cloud-consumer-order80的子Module和cloud-provider-payment8001子模块。

提示:当IDEA检测到有多个模块服务时,会在右下角提示是否在services(老版本可能叫Dashboard)中运行,我们选择要show in services,这样我们IDEA左下角就会有如下窗体,方便我们统一管理(如果你没出先克自行百度解决):

微服务消费者订单模块实现—SpringCloud(H版)微服务学习教程(5)
1)测试create
微服务消费者订单模块实现—SpringCloud(H版)微服务学习教程(5)
2)测试get
微服务消费者订单模块实现—SpringCloud(H版)微服务学习教程(5)

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/7774.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号