spring cloud 学习之-04-服务间调用

12 服务间调用

​ 微服务中,很多服务系统都在独立的进程中运行,通过各个服务系统之间的协作来实现一个大项目的所有业务功能。服务系统间 使用多种跨进程的方式进行通信协作,而RESTful风格的网络请求是最为常见的交互方式之一。

http。

​ 思考:如果让我们写服务调用如何写。

  1. 硬编码。不好。ip域名写在代码中。目的:找到服务。

  2. 根据服务名,找相应的ip。目的:这样ip切换或者随便变化,对调用方没有影响。

    Map<服务名,服务列表> map;

  3. 加上负载均衡。目的:高可用。

spring cloud提供的方式:

  1. RestTemplate
  2. Feign

我个人习惯用RestTemplate,因为自由,方便调用别的第三方的http服务。feign也可以,更面向对象一些,更优雅一些,就是需要配置。

12.1 REST ful

RESTful网络请求是指RESTful风格的网络请求,其中REST是Resource Representational State Transfer的缩写,直接翻译即“资源表现层状态转移”。
Resource代表互联网资源。所谓“资源”是网络上的一个实体,或者说网上的一个具体信息。它可以是一段文本、一首歌曲、一种服务,可以使用一个URI指向它,每种“资源”对应一个URI。
Representational是“表现层”意思。“资源”是一种消息实体,它可以有多种外在的表现形式,我们把“资源”具体呈现出来的形式叫作它的“表现层”。比如说文本可以用TXT格式进行表现,也可以使用XML格式、JSON格式和二进制格式;视频可以用MP4格式表现,也可以用AVI格式表现。URI只代表资源的实体,不代表它的形式。它的具体表现形式,应该由HTTP请求的头信息Accept和Content-Type字段指定,这两个字段是对“表现层”的描述。
State Transfer是指“状态转移”。客户端访问服务的过程中必然涉及数据和状态的转化。如果客户端想要操作服务端资源,必须通过某种手段,让服务器端资源发生“状态转移”。而这种转化是建立在表现层之上的,所以被称为“表现层状态转移”。客户端通过使用HTTP协议中的四个动词来实现上述操作,它们分别是:获取资源的GET、新建或更新资源的POST、更新资源的PUT和删除资源的DELETE。

RestTemplate是Spring提供的同步HTTP网络客户端接口,它可以简化客户端与HTTP服务器之间的交互,并且它强制使用RESTful风格。它会处理HTTP连接和关闭,只需要使用者提供服务器的地址(URL)和模板参数。

反例:不对的。
上面概念虽说简单,如果面试被问到答错了,减分很厉害。有一个人说rest是和http并列的协议。

还有docker,说是医生(doctor),做云服务治理的,嘴里一堆高大上的词。

哲学家气质。

基础概念理解了,让人在心中给自己打个折,如果被某个大boss 在心中给打折了,有可能在这公司晋升都难。

12.2 调用

讲一下发送验证码逻辑。

{
  "receivers": [
    "13412341234","手机号"
  ],
  "data": [
    {
      "id": "SMS_144145499",
      "templateMap": {
        "code": "9876"
      }
    }
  ]
}

为什么这么设计?

在当时业务初期用腾讯,后来换成了阿里,最后又加了华信。为了同时支持腾讯、阿里、华信等短信服务商。

例子:

  1. 启动eureka(为了方便用单节点:7900)。
  2. 启动service-sms,8002。
    • yapi验证是否启动成功,接口能否访问。
    • 验证是否注册到eureka。
  3. 用下面两种方式。

12.2 直接用RestTemplate调用

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

// 正常 ribbon调用
ResponseEntity<ResponseResult> resultEntity = restTemplate.postForEntity(url, smsSendRequest, ResponseResult.class);
ResponseResult result = resultEntity.getBody();


启动api-driver。执行:yapi->api-driver 司机获取验证码。

12.3 feign调用

接口加注解,方法加注解
@FeignClient(name = "service-sms")
public interface SmsClient {
	/**
	 * 按照短信模板发送验证码
	 * @param smsSendRequest
	 * @return
	 */
	@RequestMapping(value="/send/alisms-template", method = RequestMethod.POST)
	public ResponseResult sendSms(@RequestBody SmsSendRequest smsSendRequest);
}

开启feign。
pom中feign。

启动api-driver。执行:yapi->api-passenger 发送验证码。

Spring Cloud是一款基于Spring框架的微服务解决方案,它提供了一系列的基于云原生的组件和工具,用于简化微服务架构的开发和部署。 要实现Spring Cloud集成Python Web服务,首先需要在Spring Boot项目中集成Python解释器。可以使用Jython工具,它是一个Java实现的Python解释器。通过集成Jython,我们可以在Java代码中执行Python脚本。 首先,需要在项目的依赖中引入Jython相关的依赖项。然后,创建一个Python类或脚本,并通过编写适配器类,将Python脚本与Spring Boot应用进行交互。 适配器类可以使用PythonInterpreter类,它是Jython提供的一个用于执行Python脚本的类。在适配器类中,可以编写一些方法来调用Python脚本中的函数或方法,并将结果返回给Spring Boot应用。 使用Spring Cloud提供的服务发现和负载均衡功能,可以将Python Web服务注册到服务注册中心,并使用服务发现的特性进行服务的发现和调用。通过在Spring Cloud中定义Python Web服务的接口和Feign客户端,可以方便地调用Python Web服务。 最后,可以使用Spring Cloud的网关组件,如Spring Cloud Gateway或Zuul,来实现对Python Web服务的路由和负载均衡。这样,我们就可以在Spring Cloud服务框架中集成Python Web服务,并实现微服务架构的高可用和扩展性。 综上所述,通过集成Jython和使用Spring Cloud提供的组件和特性,可以实现Spring Cloud集成Python Web服务。这样的架构可以实现不同语言的微服务的互操作,并在实际项目中提供更灵活、高效和可扩展的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值