返回顶部
首页 > 资讯 > 后端开发 > Python >SpringCloud如何解决服务之间的通信问题
  • 146
分享到

SpringCloud如何解决服务之间的通信问题

2024-04-02 19:04:59 146人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1、如何解决服务之间的通信问题?2、如何在java代码中发起Http方式请求?3、实现服务间通信的小案例4、现有RestTemplate方式通信存在的问题?5、解决RestTem

1、如何解决服务之间的通信问题?

[1]HTTP REST方式 使用http协议进行数据传递 JSON格式数据
[2]RPC方式 远程过程调用 二进制数据

OSI七层结构来讲,即物理层、数据链路层、网络层、运输层、会话层、表示层、应用层http属于应用层协议,而RPC属于传输层,所以RPC方式的传输效率比http高SpringCloud使用的是HTTP协议传递数据

2、如何在java代码中发起http方式请求?

spring框架提供HttpClient对象 使用RestTemplate发起一个http请求。

3、实现服务间通信的小案例

 3.1 使用两个测试服务 用户服务users和订单服务orders

3.2 用户服务和订单服务都是两个独立的SpringBoot应用

在这里插入图片描述

3.3 两个服务都引入consul client依赖和健康检查依赖


		 <!--WEB-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--consul client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>

3.4 配置两个服务的application.properties

用户服务:(默认的服务名称就是Spring.application.name,所以可以不用指定)


server.port=8888
spring.application.name=USERS

#consul server
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500

在这里插入图片描述

订单服务:


server.port=9999
spring.application.name=ORDERS

#consul server
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500

在这里插入图片描述

3.5 在两个服务的入口类中加入服务注册client注解

用户服务

在这里插入图片描述

订单服务

在这里插入图片描述

3.6 控制器开发(这里进行服务提供者和服务消费者开发) 3.6.1 服务提供者(订单服务)

OrderController.java


package com.baizhi.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
public class OrderController {

    @GetMapping("order")
    public String demo(){
       log.info("order demo...");
        return "order demo OK!!!";
    }
}

3.6.2 服务消费者(用户服务)

UserController.java


package com.baizhi.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@Slf4j
public class UserController {

    @GetMapping("user")
    public String invokeDemo(){
         log.info("user demo...");
        //1、调用订单服务 服务地址:http://localhost:9999/order  必须是get方式 接收返回值String
        RestTemplate restTemplate = new RestTemplate();
        String orderResult = restTemplate.getForObject("http://localhost:9999/order", String.class);

        log.info("调用订单服务成功:{}",orderResult);

        return "调用order服务成功,结果为:"+orderResult;
    }
}

3.7 测试服务调用

在服务启动之后查看consul服务注册中心,可以看到用户服务和订单服务都注册成功了。关于consul服务注册与发现请看这篇文章:https://www.jb51.net/article/141790.htm

在这里插入图片描述

访问http://localhost:9999/order测试订单服务:

在这里插入图片描述

访问用户服务(用户服务中会调用订单服务)

在这里插入图片描述
订单服务日志:(这里的第二次输出是因为被用户服务调用)
在这里插入图片描述

用户服务日志:
在这里插入图片描述

4、现有RestTemplate方式通信存在的问题?

  • 调用服务的路径主机和服务端口直接写死在url中无法实现服务集群时请求负载均衡
  • 调用服务的请求路径写死在代码中,日后提供服务路径发生变化时不利于后续维护工作。

5、解决RestTemplate负载均衡问题

  • 自定义负载均衡解决策略,但是这样无法实现服务健康检查切负载均衡策略过于单一
  • 使用SpringCloud提供的组件 推荐使用Ribbon来解决负载均衡的调用问题

到此这篇关于SprinGCloud如何解决服务之间的通信问题的文章就介绍到这了,更多相关SpringCloud 服务间通信内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringCloud如何解决服务之间的通信问题

本文链接: https://lsjlt.com/news/133250.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringCloud如何解决服务之间的通信问题
    目录1、如何解决服务之间的通信问题?2、如何在java代码中发起http方式请求?3、实现服务间通信的小案例4、现有RestTemplate方式通信存在的问题?5、解决RestTem...
    99+
    2024-04-02
  • springcloud 如何解决微服务之间token传递问题
    目录微服务之间token传递问题服务A中FeginInterceptor 服务A添加配置文件微服务服务间调用传递tokenRequestInterceptor是feign提...
    99+
    2024-04-02
  • springcloud之Feign超时问题的解决
    问题背景 最近公司项目有个功能需进行三层Feign调用,且还要调外部接口,延迟挺大,造成Feign一直提示Read timed out executing POST。 feign...
    99+
    2024-04-02
  • 如何解决SpringCloud服务注册IP错误的问题
    这篇文章主要介绍“如何解决SpringCloud服务注册IP错误的问题”,在日常操作中,相信很多人在如何解决SpringCloud服务注册IP错误的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何解决S...
    99+
    2023-06-20
  • 如何解决img标签之间的间距问题
    小编给大家分享一下如何解决img标签之间的间距问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!img标签基础解析在HTML5中...
    99+
    2024-04-02
  • laravel内部服务器间接口通信问题怎么解决
    本篇内容介绍了“laravel内部服务器间接口通信问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在实际业务中,常有内部服务器间接...
    99+
    2023-07-04
  • 如何解决React中组件通信问题
    这篇文章将为大家详细讲解有关如何解决React中组件通信问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。父子组件父 → 子parent组件传给child组件,符合rea...
    99+
    2024-04-02
  • SpringCloud启动失败问题如何解决
    本篇内容主要讲解“SpringCloud启动失败问题如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringCloud启动失败问题如何解决”吧!SpringCloud启动失败问题Nac...
    99+
    2023-07-05
  • SpringCloud Feign实现微服务之间相互请求问题
    目录Feign简介Spring Cloud 组件依赖版本Feign实现服务之间访问☘创建nacos-consumer-feign微服务创建feign client☘nacos-pro...
    99+
    2024-04-02
  • 微服务架构中如何处理服务间的异步通信问题?
    随着互联网技术的发展,各种应用系统的规模和复杂度也在不断增加。传统的单体应用架构难以应对快速增长的访问量和日益复杂的业务逻辑。因此,微服务架构成为了许多企业和开发者的选择。微服务架构将单一的应用拆分成多个独立的服务,通过各自的API接口实现...
    99+
    2023-05-18
    微服务架构 异步通信 服务间处理
  • 如何解决springcloud-gateway限流遇到的问题
    本篇内容主要讲解“如何解决springcloud-gateway限流遇到的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决springcloud-gateway限流遇到的问题”吧!场景...
    99+
    2023-06-20
  • SpringCloud zuul 网关如何解决跨域问题
    跨域 在SpringCloud中 zuul 和springboot 要同时配置才能实现网关处理跨域 解决Access to XMLHttpRequest at ‘http://19...
    99+
    2024-04-02
  • 如何解决springcloud gateway连接保活问题
    这篇文章主要介绍“如何解决springcloud gateway连接保活问题”,在日常操作中,相信很多人在如何解决springcloud gateway连接保活问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-06-20
  • 如何解决vue跨域axios异步通信问题
    小编给大家分享一下如何解决vue跨域axios异步通信问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在项目中,常常需要从后端获取数据内容。特别是在前后端分离的时候,前端进行了工程化部署...
    99+
    2024-04-02
  • springcloud feign服务之间调用,date类型转换错误的问题
    目录feign服务之间调用,date类型转换错误自定义feign请求头通过判断是否为feign请求openfeign服务间调用时日期格式异常异常为原因解决方法feign服务之间调用,...
    99+
    2024-04-02
  • 关于go-micro与其它gRPC框架之间的通信问题及解决方法
    目录客户端改造服务端改造运行效果 在之前的文章中分别介绍了使用gRPC官方插件和go-micro插件开发gRPC应用程序的方式,都能正常走通。不过当两者混合使用的时候,互相访问就成了...
    99+
    2024-04-02
  • 如何解决HTML5中图片之间缝隙的问题
    这篇文章给大家分享的是有关如何解决HTML5中图片之间缝隙的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在做h6的项目,碰到了一个百思不得其解的问题,几个img标签中间有大...
    99+
    2024-04-02
  • 如何解决微信小程序中视图控件与bindtap之间的问题
    这篇文章将为大家详细讲解有关如何解决微信小程序中视图控件与bindtap之间的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在微信小程序中 最常用的<view&...
    99+
    2024-04-02
  • 如何解决SYSAUX空间问题
    In this Document Purpose Troubleshooting Steps Basic Diagnostics Space Usage Purge Issues Maintenance and Se...
    99+
    2021-08-19
    如何解决SYSAUX空间问题
  • 缓存问题:Java路径和Apache服务器之间的冲突如何解决?
    在开发过程中,我们常常需要使用缓存来提高系统的性能。在Java中,我们可以使用Java缓存API来实现缓存功能。但是,在使用缓存时,我们也会遇到一些问题,例如Java路径和Apache服务器之间的冲突。 Java路径和Apache服务器之...
    99+
    2023-07-29
    path 缓存 apache
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作