SpringCloud微服务 之 Provider & Cosumer

本文介绍了SpringCloud微服务中服务提供者(Provider)和服务消费者(Consumer)的概念。通过一个简单的业务场景,展示了如何使用SpringBoot和RestTemplate构建服务提供者和消费者。在案例中,deal模块作为服务提供者,broker模块作为消费者,消费者通过RestTemplate调用提供者接口获取订单信息。案例源码可在作者的Gitee仓库找到。尽管案例简单,但已揭示了微服务间通讯的基本方式和存在的问题,如缺少服务注册与发现机制以及硬编码导致的可扩展性问题。
摘要由CSDN通过智能技术生成

前言

本小节我们将进入学习SpringCloud的预热阶段既学习与理解微服务中的服务提供者和消费者。

我们知道在微服务的架构体系中服务与服务间的通讯可以通过RestTamplate(Spring对RESTful API请求的一种简单封装)和Fegin(SpringCloug集成的声明式客户端,后面我们将学习到)。

此处我们对本节案例中涉及到的一些技术栈或知识点不做细数,学习的基础前提是大家对SpringBoot有比较好的了解并且对SpringCloud有一个整体认识。我们将模拟一个业务场景:微服务中有一个deal模块作为服务的提供者(Provider),有一个broker模块作为服务的消费者(Consumer)。broker通过RestTamplate消费deal即broker模块调用deal模块。

以上业务场景是一个在微服务中常见的服务调用场景。

案例

  • 准备工作
    本案包括以后的案例中我们都是使用的:使用STS IED开发。因为STS对Spring生态做了很好的扩展。

  • 服务提供者业务实现
    编写一个服务提供者的业务用于服务调用

    • 项目结构
      在这里插入图片描述

    • 代码解读

      • 使用STS 的Spring Starter Project构建Maven WEB项目(STS的SSP Plugin会将该项目构建成一个基于SpringBoot的web项目然后使用SpringCloud做一次封装)。

      • 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">
        	<modelVersion>4.0.0</modelVersion>
        
        	<groupId>com.example</groupId>
        	<artifactId>microservice.deal</artifactId>
        	<version>0.0.1-SNAPSHOT</version>
        	<packaging>jar</packaging>
        
        	<name>microservice-deal</name>
        	<description>Demo project
这段代码有一些问题,可能会导致程序出错: 1. 在这段代码中,对结构体数组进行了循环遍历,但是在遍历的过程中,如果找到了一个空闲的位置,就将当前位置的信息用下一个位置的信息覆盖,这样会导致最后一个位置的信息丢失。应该从最后一个位置开始往前遍历,将每个位置的信息用下一个位置的信息覆盖,最后将最后一个位置清空。 2. 在使用 scanf 函数获取字符串时,应该使用 %s,而不是 &s。 3. 在使用 strcpy 函数拷贝字符串时,应该将 "s[i+1].num" 和 "s[i+1].goods" 等改为 s[i+1].num 和 s[i+1].goods 等。 4. 在为新添加的物资信息赋值时,应该将 s[6].count=b 改为 s[i].count=b,否则会将新添加的物资信息的数量赋值给最后一个位置,而不是当前位置。 5. 在比较字符串时,应该使用 strcmp 函数,而不是直接使用 ==。 下面是修改后的代码: ``` for (i = 5; i >= 0; i--) { if (s[i].count == 0) { strcpy(s[i].num, s[i+1].num); strcpy(s[i].goods, s[i+1].goods); strcpy(s[i].cosumer, s[i+1].cosumer); s[i].price = s[i+1].price; s[i].count = s[i+1].count; } } s[5].num[0] = '\0'; s[5].goods[0] = '\0'; s[5].cosumer[0] = '\0'; s[5].price = 0; s[5].count = 0; printf("请输入您需要购买的物资名称:"); scanf("%s", v); printf("请输入您的姓名:"); scanf("%s", x); for (i = 0; i < 6; i++) { if (strcmp(v, s[i].goods) == 0) { if (strcmp(x, s[i].cosumer) == 0) { printf("请输入您需要购买入库物资的数量:"); scanf("%d", &b); s[i].count += b; } else { printf("请输入您需要购买入库物资的数量:"); scanf("%d", &b); s[i+1].count = b; strcpy(s[i+1].goods, s[i].goods); s[i+1].price = s[i].price; strcpy(s[i+1].num, "007"); strcpy(s[i+1].cosumer, x); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值