微服务中基于Spring Boot的maven分布式项目框架的搭建(三)

简介: 微服务中基于Spring Boot的maven分布式项目框架的搭建

5. maven子工程microservice-order-consumer模块搭建


接下来我们搭建 maven 子工程中的订单服务消费模块 、microservice-order-consumer,新建子模块的方法和上面两个子 模块一模一样,在命名的时候命名为microservice-order-consumer即可。完成之后,来看一下该模块中的 pom 文件。


<?xml version="1.0" encoding="UTF-8"?>
<project ...>
   <parent>
       <artifactId>microservice</artifactId>
       <groupId>com.itcodai</groupId>
       <version>1.0-SNAPSHOT</version>
       <relativePath>../microservice/pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>microservice-order-consumer</artifactId>
   <packaging>jar</packaging>
   <!-- 当前Module需要用到的依赖,按自己需求添加,版本号在父类已经定义了,这里不需要再次定义 -->
   <dependencies>
       <!-- 引入自己定义的 microservice-common 通用包,可以使用common模块中的Order类 -->
       <dependency>
           <groupId>com.itcodai</groupId>
           <artifactId>microservice-common</artifactId>
           <version>${project.version}</version>
       </dependency>
       <!-- spring boot web 依赖 -->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-test</artifactId>
       </dependency>
   </dependencies>
</project>

因为microservice-order-consumer模块主要是用来调用microservice-order-provider模块提供的订单信息,所以在microservice-order-consumer模块中我们不需要引入 mybatis 和 mysql 相关的依赖,因为不用操作数据库。当然了,在实际项目中,根据具体需求,如果需要操作其他表,那么还是要引入持久层依赖的。


在微服务都是以 HTTP 接口的形式暴露自身服务的,因此在调用远程服务时就必须使用 HTTP 客户端。Spring Boot 中使用的是 RestTemplate,首先,我们写一个配置类,将 RestTemplate 作为一个 Bean 交给 Spring 来管理。


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTmplateConfig {
   @Bean
   public RestTemplate getRestTemplate() {
       return new RestTemplate();
   }
}

有了 RestTemplate,接下来我们可以在 Controller 中注入该 RestTemplate 来调用 microservice-order-provider提供的服务了,如下。


@RestController
@RequestMapping("/consumer/order")
public class OrderConsumerController {
   // 订单服务提供者模块的 url 前缀
   private static final String ORDER_PROVIDER_URL_PREFIX = "http://localhost:8001";
   @Resource
   private RestTemplate restTemplate;
   @GetMapping("/get/{id}")
   public TOrder getOrder(@PathVariable Long id) {
       return restTemplate.getForObject(ORDER_PROVIDER_URL_PREFIX + "/provider/order/get/" + id, TOrder.class);
   }
   @SuppressWarnings("unchecked")
   @GetMapping("/get/list")
   public List<TOrder> getAll() {
       return restTemplate.getForObject(ORDER_PROVIDER_URL_PREFIX + "/provider/order/get/list", List.class);
   }
}

我们来讲解一下 RestTemplate 的使用,在 Controller 中,我们定义了一个订单服务提供者的 url 前缀,这是microservice-order-provider的服务地址,因为我们等会要远程调用这个服务。restTemplate.getForObject方法是 GET 请求方法,它有两个参数


* url:请求地址。

* ResponseBean.class:HTTP 相应被转换成的对象类型。

对于实体类或者 List 均可以接收,同样地,还有处理 POST 请求的方法 restTemplate.postForObject,该方法有三个参数,如下。


* url:请求地址

* requestMap:请求参数,封装到map中。

* ResponseBean.class:HTTP响应被转换成的对象类型。

那么整个流程即:订单消费模块不直接请求数据库,而是通过 http 远程调用订单提供模块的服务来获取订单信息。也就是说,在微服务里,每个服务只关注自身的逻辑和实现,不用管其他服务的实现,需要获取某个服务的数据时,只要调用该服务提供的接口即可获取相应的数据。实现了每个服务专注于自身的逻辑,服务之间解耦合


我们来测试一下,启动microservice-order-providermicroservice-order-consumer两个服务,在浏览器中输入 localhost:8080/consumer/order/get/list,如果浏览器中能查到数据库中的两条记录,说明服务调用成功。


[{"id":1,"name":"跟武哥一起学 Spring Boot","price":39.99,"dbSource":"microservice01"},{"id":2,"name":"跟武哥一起学 Spring cloud","price":39.99,"dbSource":"microservice01"}]

到此为止,基于 maven 分布式的微服务架构就搭建好了,实际项目中可以直接拿这个来扩展。


相关文章
|
2月前
|
存储 监控 数据可视化
常见的分布式定时任务调度框架
分布式定时任务调度框架用于在分布式系统中管理和调度定时任务,确保任务按预定时间和频率执行。其核心概念包括Job(任务)、Trigger(触发器)、Executor(执行器)和Scheduler(调度器)。这类框架应具备任务管理、任务监控、良好的可扩展性和高可用性等功能。常用的Java生态中的分布式任务调度框架有Quartz Scheduler、ElasticJob和XXL-JOB。
520 66
|
1月前
|
数据采集 人工智能 分布式计算
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
阿里云推出的MaxFrame是链接大数据与AI的分布式Python计算框架,提供类似Pandas的操作接口和分布式处理能力。本文从部署、功能验证到实际场景全面评测MaxFrame,涵盖分布式Pandas操作、大语言模型数据预处理及企业级应用。结果显示,MaxFrame在处理大规模数据时性能显著提升,代码兼容性强,适合从数据清洗到训练数据生成的全链路场景...
84 5
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
|
3月前
|
数据库
如何在Seata框架中配置分布式事务的隔离级别?
总的来说,配置分布式事务的隔离级别是实现分布式事务管理的重要环节之一,需要认真对待和仔细调整,以满足业务的需求和性能要求。你还可以进一步深入研究和实践 Seata 框架的配置和使用,以更好地应对各种分布式事务场景的挑战。
144 63
|
27天前
|
人工智能 分布式计算 大数据
MaxFrame 产品评测:大数据与AI融合的Python分布式计算框架
MaxFrame是阿里云MaxCompute推出的自研Python分布式计算框架,支持大规模数据处理与AI应用。它提供类似Pandas的API,简化开发流程,并兼容多种机器学习库,加速模型训练前的数据准备。MaxFrame融合大数据和AI,提升效率、促进协作、增强创新能力。尽管初次配置稍显复杂,但其强大的功能集、性能优化及开放性使其成为现代企业与研究机构的理想选择。未来有望进一步简化使用门槛并加强社区建设。
63 7
|
3月前
|
存储 Java 关系型数据库
在Spring Boot中整合Seata框架实现分布式事务
可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
204 53
|
2月前
|
存储 JSON 前端开发
【Spring项目】表白墙,留言板项目的实现
本文主要介绍了表白墙项目的实现,包含前端和后端代码,以及测试
|
2月前
|
JSON 前端开发 Java
|
2月前
|
缓存 前端开发 Java
【Spring】——SpringBoot项目创建
SpringBoot项目创建,SpringBootApplication启动类,target文件,web服务器,tomcat,访问服务器
|
2月前
|
运维 监控 Java
为何内存不够用?微服务改造启动多个Spring Boot的陷阱与解决方案
本文记录并复盘了生产环境中Spring Boot应用内存占用过高的问题及解决过程。系统上线初期运行正常,但随着业务量上升,多个Spring Boot应用共占用了64G内存中的大部分,导致应用假死。通过jps和jmap工具排查发现,原因是运维人员未设置JVM参数,导致默认配置下每个应用占用近12G内存。最终通过调整JVM参数、优化堆内存大小等措施解决了问题。建议在生产环境中合理设置JVM参数,避免资源浪费和性能问题。
120 3
|
2月前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
102 2