springcloud-消费者订单模块

  1.创建订单模块

  2.引入依赖到pom.xml

   <dependencies>
        <!-- 包含了sleuth zipkin 数据链路追踪-->
<!--        <dependency>-->
<!--            <groupId>org.springframework.cloud</groupId>-->
<!--            <artifactId>spring-cloud-starter-zipkin</artifactId>-->
<!--        </dependency>-->
        <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>
        <!--eureka client-->
<!--        <dependency>-->
<!--            <groupId>org.springframework.cloud</groupId>-->
<!--            <artifactId>spring-cloud-starter-netflix-eureka-client</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>

  3.改application.yml

server:
  port: 80

spring:
  application:
    name: cloud-consumer-orders

  4.写主程序类

  5.写业务

    1)设计表和创建表(本次不用)

    2)创建实体类(负责支付模块的即可,但是后面我们还得把这里公用的实体类抽取到一个模块中)

    3)dao(本次不用)

    4)service(本次不用)

    这里解释下这里为社么不写dao和service。首先我们的微服务是分为业务服务和非业务服务,这里的订单服务是一个消费者,业务和对数据库的操作不需要他来做,他去调用即可。并且这里演示是作为客户端角色的80端口的订单服务去调服务端的8001端口的支付服务,这只是为了演示服务之间的调用,真正开放80端口的应该是前端的项目,用户访问前端,然后前端来调用我们后端。

    5)controller

@RestController
@CrossOrigin
@Slf4j
public class OrdersController {

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

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/consumer/payment/create")
    public CommonResult create(Payment payment){

        return restTemplate.postForObject(PAYMENT_URL+"/payment/create", payment, CommonResult.class);
    }
    @GetMapping("/consumer/payment/get/{id}")
    public CommonResult selectPayment(@PathVariable("id") Long id){

        return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);
    }

}

  在以前我们服务之间的调用使用的有httpclient或webservice等,而这里的RestTemplate的底层实际就是httpclient,使用该模板对象就能模仿发送请求,不过得记住一点的是:他post请求发送的参数是以json格式发给其他服务的,因此在其他服务模块得使用@RequestBody,不然接收会出错。

 

 

  对了,这个RestTemplate得加入到IOC中,记得写给配置类,如下:

@Configuration
public class ApplicationContextConfig {

    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

}

  6.测试

posted @ 2021-01-01 21:21  爱编程DE文兄  阅读(186)  评论(0编辑  收藏  举报