首页 > 其他分享 >SpringCloud入门(二)服务间调用和案例

SpringCloud入门(二)服务间调用和案例

时间:2024-09-12 17:25:54浏览次数:11  
标签:调用 服务 入门 SpringCloud RestTemplate 服务提供者 http order

一、微服务拆分注意事项
微服务拆分注意事项:
1.单一职责:不同微服务,不要重复开发相同业务
2.数据独立:不要访问其它微服务的数据库
3.面向服务:将自己的业务暴露为接口,供其它微服务调用

1.微服务需要根据业务模块拆分,做到单一职责,不要重复开发相同业务
2.微服务可以将业务暴露为接口,供其它微服务使用
3.不同微服务都应该有自己独立的数据库

二、订单和用户服务调用案例
订单和用户两个独立服务;有两个单独的数据库,

 

 

-需求:根据订单id查询订单的同时,把订单所属的用户信息一起返回

不要重复开发业务,不能直接查数据库,服务是独立的看不见别人的数据库。
订单向用户发起远程调用;如何完成远程调用;远程调用方式分析: 发起http请求。如下图:

 

 

使用 spring提供的 RestTemplate http请求;通过bean注测为spring对象;

基于RestTemplate发起的http请求实现远程调用。http请求做远程调用是与语言无关的调用,只要知道对方的ip、端口、接口路径、请求参数即可。

因此,我们需要在order-service中 向user-service发起一个http的请求,调用http://localhost:8081/user/{userId}这个接口。

使用步骤:

步骤是这样的:

步骤一、注册一个RestTemplate的实例到Spring容器

注册RestTemplate,首先,我们在order-service服务中的OrderApplication启动类中,注册RestTemplate实例:

@MapperScan("cn.it.order.mapper")
@SpringBootApplication
public class OrderApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
 
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

 


步骤二、修改order-service服务中的OrderService类中的queryOrderById方法,根据Order对象中的userId查询User

修改order-service服务中的cn.it.order.service包下的OrderService类中的queryOrderById方法:

步骤三、将查询的User填充到Order对象,一起返回

 

@Service
public class OrderService {
 
    @Autowired
    private OrderMapper orderMapper;
 
 
    @Autowired
    private RestTemplate restTemplate;
 
    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.利用RestTemplate发起http请求,查询用户
        // 2.1.url路径
        String url = "http://userservice/user/" + order.getUserId();
        // 2.2.发送http请求,实现远程调用
        User user = restTemplate.getForObject(url, User.class);
        // 3.封装user到Order
        order.setUser(user);
        // 4.返回
        return order;
    }
    
   
}

 

三、服务的提供者和消费者概念
-提供者与消费者

服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)
服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)

-服务调用关系:

服务提供者:暴露接口给其它微服务调用
服务消费者:调用其它微服务提供的接口
提供者与消费者角色其实是相对的
一个服务可以同时是服务提供者和服务消费者

但是,服务提供者与服务消费者的角色并不是绝对的,而是相对于业务而言。

如果服务A调用了服务B,而服务B又调用了服务C,服务B的角色是什么?

- 对于A调用B的业务而言:A是服务消费者,B是服务提供者
- 对于B调用C的业务而言:B是服务消费者,C是服务提供者

因此,服务B既可以是服务提供者,也可以是服务消费者。

标签:调用,服务,入门,SpringCloud,RestTemplate,服务提供者,http,order
From: https://www.cnblogs.com/kongsq/p/18410673

相关文章

  • SpringCloud入门(一)SpringCloud简介
    一、为什么要学SpringCloud?企业开发都使用微服务,面试必问微服务要学会微服务开发的问题和解决方案。应对用户的增长和并发需求。要应对用户需求变化;单点式架构无法应对高并发;服务之间的错综复杂调用;二、认识微服务单体架构,订单模块,用户功能,商......
  • PbootCMS调用公司简介等单页内容的方法
    在PbootCMS中,调用公司简介或其他单页内容(如页面内容)的方法主要依赖于标签的使用。不过,需要注意的是,您提供的标签示例 {pboot:contentid=1} 实际上是用于调用内容列表中的某条内容,而不是直接用于调用单页(如关于我们、公司简介等)的内容。对于单页内容,PbootCMS使用的是 {pboot......
  • pbootcms基本调用标签大全
    PbootCMS是一个内容管理系统(CMS),它提供了丰富的标签系统来帮助开发者在模板文件中调用各种数据。下面是一些常用的PbootCMS调用标签的例子:基本标签公司信息标签:用于调用网站与公司相关的信息,如公司名称、地址、电话等。html {pboot:companyname="公司名称"}{pboot:......
  • pbootcms模板首页如何调用全站所有的文章
    在PbootCMS中,如果你想在模板首页调用全站所有的文章,你可以使用 {pboot:list} 标签,并通过设置 scode 属性为 * 来实现这一点。这表示不指定特定的栏目,而是调用整个站点的所有文章。下面是一个示例代码片段,展示了如何调用全站所有文章,并且限制每次只显示5篇文章:{pboot:......
  • PbootCMS标签大全,PbootCMS模版如何调用tag标签
    PBootCMS提供了丰富的模板标签来方便地调用各种功能。下面详细介绍PBootCMS的常用标签及其用法,并给出具体的示例。PBootCMS标签大全1.基础标签{pboot:site}用途:获取站点信息。示例:html {pboot:sitename="title"}网站标题{/pboot:site}{pboot:page}用途......
  • 零基础入门AI:一键本地运行各种开源大语言模型 - Ollama
    零基础入门AI:一键本地运行各种开源大语言模型-OllamaAI大模型全套学习资料“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了......
  • pbootcms列表页调用tag标签
    在PBootCMS中,调用标签(tag)可以在列表页中展示带有特定标签的文章或内容。PBootCMS提供了丰富的模板标签来实现这一功能。以下是如何在PBootCMS列表页中调用标签(tag)的具体步骤和示例代码。步骤确定标签位置:确定在列表页中展示标签的具体位置。修改模板文件:打开包含列表......
  • Java开发者无痛丝滑入门Python
    哈喽各位道友,经过两周的更新,凡人编程传的第一个“系列”学习笔记《Python基础》已经全部上线啦,现在免费分享给大家,学习路线在下面,点击链接即可跳转对应笔记。这套笔记有什么不一样的地方呢?这套笔记适合有一定Java编程基础的道友,因为笔记语言比较简练,大多只讲重点,避免了啰嗦......
  • Nginx入门实践(四)
    环境系统:Windows7Nginx版本:1.26.2Nginx负载均衡实现实现逻辑Nginx1:访问入口Nginx2、Nginx3、Nginx4:组成负载集群配置C:\Windows\System32\drivers\etc\hosts文件新增IP域名映射127.0.0.1backend1.com127.0.0.1backend2.comNginx1配置http{ upstreambacke......
  • SD入门教程一:Stable Diffusion 基础(技术篇)
    前言在开篇的时候就大致讲了SD和VAE,那么今天我们具象化地再来讲讲StableDiffusion(稳定扩散)。严格说来它是一个由几个组件(模型)构成的系统,而非单独的一个模型。我以最常见的文生图为例,解释下StableDiffusion的整体架构和工作原理。本次教程将使用AI绘画工具StableD......