springcloud-远程调用

微服务的远程调用

image-20231214100814710

RestTemplate

在项目中,当我们需要远程调用一个 HTTP 接口时,我们经常会用到 RestTemplate 这个类。这个类是 Spring 框架提供的一个工具类。

image-20231214101837749

实例化RestTemplate

创建配置类,实例化RestTemplate

@Configuration
public class RibbonConfig {@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}
}

使用RestTemplate

没有负载功能远程调用时,使用要调用方的完整UIL。

private final String URL = "http://localhost:11000/api/type/";
@GetMapping("/findAllTypes")
public HttpResp findAllTypes() {HttpResp body = restTemplate.getForEntity(URL + "findAllTypes",HttpResp.class).getBody();body.setMsg("服务id: " + applicationName + ", 服务port: " + port);return body;
}

Ribbon

Ribbon是一个部署在调用端并在生产的云服务项目中经过考验的进程间通信库。Ribbon主要提供

  • 客户端负载均衡
  • 容错处理
  • 支持多协议的异步通信。支持HTTP、TCP、UDP协议。
  • 支持缓存和批量处理

Ribbon的负载均衡策略

随机策略(RandomRule)

从微服务客户端中随机选择一个微服务实例作为RPC请求的目标微服务。

线性轮询策略(RoundRobinRule)

每次都取下一个服务器,假设有n个节点服务器,第一次取1,第二个取第2个服务器,…第n个取第n个服务器,以此类推。

响应时间权重策略(WeightedResponseTimeRule)

为每一个微服务提供者维护一个权重值,规则简单理解为服务器响应时间越长,其权重就越小。

在进行服务器选择时,权重值越小,被选择的机会就越少。

最少连接策略(BestAvailableRule)

选取连接数最少的微服务提供者。

重试策略

在一定时间限制内对服务提供者进行循环重试。

定义Ribbon负载均衡
@LoadBalanced
@Bean(name = "restTemplateWithLB")
public RestTemplate restTemplateWithLB(){return new RestTemplate();
}
使用Ribbon

使用Nacos中注册的serverId替代之前的完整url。moviex-type是nacos中注册的微服务名称唯一ID。

@GetMapping("/findAllTypesx")
public HttpResp findAllTypesx() {HttpResp body = restTemplateNoLB.getForEntity("http://moviex-type/api/type/findAllTypes",       HttpResp.class).getBody();body.setMsg("服务id: " + applicationName + ", 服务port: " + port);return body;
}
测试Ribbon

启动两个服务,测试调用这两个微服务是否是负载均衡的,即两个微服务会被轮训的调用。

java -jar -Dserver.port 新端口号 xxxx-1.0-SNAPSHOT.ja
Dockerfile
FROM anapsix/alpine-java:latest
EXPOSE 11000
ADD target/movie-type-1.0-SNAPSHOT.jar /movie-type.jar
ENTRYPOINT ["java","-jar","-Dspring.cloud.nacos.discovery.ip=192.168.198.128","-Dspring.cloud.nacos.discovery.port=11000"]
CMD ["/movie-type.jar"]

image-20230814003335605

image-20230814003358319

OpenFeign

Spring Cloud OpenFeign是一种基于Spring Cloud的声明式REST客户端,它简化了与HTTP服务交互的过程。它将REST客户端的定义转化为Java接口,并且可以通过注解的方式来声明请求参数、请求方式、请求头等信息,从而使得客户端的使用更加方便和简洁。同时,它还提供了负载均衡和服务发现等功能,可以与Eureka、Consul等注册中心集成使用。Spring Cloud OpenFeign能够提高应用程序的可靠性、可扩展性和可维护性,是构建微服务架构的重要工具之一。

使用OpenFeign

引入依赖

openfeign要依赖loadbalance模块。

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
定义接口

定义用来被远程调用的接口。

@FeignClient(value = "ssc-cloud-paycenter")
public interface IPaycenterFeign {@GetMapping("/api/paycenter/getByNum")HttpResp<Account> getByNum(@RequestParam("num") long num);
}
调用方

调用方的main启动类添加@EnableFeignClients,注意标注要调用方的openfeign接口包位置(basePackages)。

@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients(basePackages = "com.wnhz.ssc.cloud.paycenter.feign")
public class OlderApp {public static void main(String[] args) {SpringApplication.run(OlderApp.class);}
}
调用openfeign接口

image-20231214110326065

@Feign注解

public @interface FeignClient {@AliasFor("name")String value() default "";String contextId() default "";@AliasFor("value")String name() default "";String[] qualifiers() default {};String url() default "";boolean decode404() default false;Class<?>[] configuration() default {};Class<?> fallback() default void.class;Class<?> fallbackFactory() default void.class;String path() default "";boolean primary() default true;
}
序号方法名称作用
1name/value注册到nacos上的微服务名称id
2url
3decode404当发生http 404错误时,如果该字段位true,会调用decoder进行解码,否则抛出FeignException
4configurationFeign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract
5fallback定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口
6fallbackFactory工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码
7path定义当前FeignClient的统一前缀,当我们项目中配置了server.context-path,server.servlet-path时使用
8contextId当微服务名冲突时,解决它的唯一名称

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/691966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【递归】:原理、应用与案例解析 ,助你深入理解递归核心思想

递归 1.基础简介 递归在计算机科学中&#xff0c;递归是一种解决计算问题的方法&#xff0c;其中解决方案取决于同一类问题的更小子集 例如 递归遍历环形链表 基本情况&#xff08;Base Case&#xff09;&#xff1a;基本情况是递归函数中最简单的情况&#xff0c;它们通常是递…

揭示端侧大语言模型的无限潜力:多种量化模型,可以在个人电脑或者手机上安装部署使用,几行代码进行调研可以离线使用

揭示端侧大语言模型的无限潜力:多种量化模型,可以在个人电脑或者手机上安装部署使用,几行代码进行调研可以离线使用。 MiniCPM 是面壁智能与清华大学自然语言处理实验室共同开源的系列端侧大模型,主体语言模型 MiniCPM-2B 仅有 24亿(2.4B)的非词嵌入参数量, 总计2.7B参数…

频段划分学习射频知识的意义

一、射频电路设计与低频电路设计的不同点 随着频率提高&#xff0c;相应电磁波的波长与变得可与分立电路元件的尺寸相比拟时&#xff0c;电阻、电容和电感这些元件的电响应&#xff0c;将偏离他们的理想频率特性。以 WIFI 2.4G 频段为例&#xff0c;当频率为 2437MHz&#xff0…

Ubuntu安装wireguard服务端,windows连接

需求&#xff1a;想要随时随地远程到ubuntu电脑的内网中&#xff0c;ping通所有的内网ip&#xff0c;方便通过内网ip进行远程 一、ubuntu上安装配置wireguard服务 1&#xff0c;更新软件包并安装wireguard服务端软件 sudo apt update sudo apt install wireguard 2&#xff0…

Flutter学习1 - Android开发者快速上手

1、对应关系 概念对应关系 AndroidFlutter页面Activity和FragmentWidget视图ViewWidget页面跳转IntentNavigater网络库okHttphttp数据存储SharedPreference和SQLiteshared_preferences和sqflite 布局对应关系 AndroidFlutter布局文件xmlWidget线性布局LinearLayoutRow和Col…

C# 字典(Dictionary)基本操作

一、定义一个字典&#xff1a; // 定义一个存储字符串键和整数值的字典 Dictionary<string, int> numbers new Dictionary<string, int>(); 二、添加元素&#xff1a; // 添加键值对 numbers.Add("One", 1); numbers.Add("Two", 2); 三、通…

在线图片生成工具:定制化占位图片的利器

title: 在线图片生成工具&#xff1a;定制化占位图片的利器 date: 2024/2/20 14:08:16 updated: 2024/2/20 14:08:16 tags: 占位图片网页布局样式展示性能测试响应式设计在线生成开发工具 在现代的网页设计和开发中&#xff0c;占位图片扮演着重要的角色。占位图片是指在开发过…

力扣日记2.20-【回溯算法篇】491. 非递减子序列

力扣日记&#xff1a;【回溯算法篇】491. 非递减子序列 日期&#xff1a;2023.2.20 参考&#xff1a;代码随想录、力扣 ps&#xff1a;放了个寒假&#xff0c;日记又搁置了三星期……&#xff08;下跪忏悔&#xff09; 491. 非递减子序列 题目描述 难度&#xff1a;中等 给你一…

奇门遁甲 API接口

接口数据api 接口平台&#xff1a;https://api.yuanfenju.com/ 开发文档&#xff1a;缘份居国学研究开发者API 支持格式&#xff1a;JSON 请求方式&#xff1a;HTTP POST <?php//您的密钥 $api_secret "wD******XhOUW******pvr"; //请求择日择时接口 $gate…

django rest framework 学习笔记2

注意&#xff1a;该文章部分摘抄之百度&#xff0c;仅当做学习笔记供小白使用&#xff0c;若侵权请联系删除&#xff01; 显示关联表的数据&#xff0c;本示例会显示所有的关联的数据信息 from rest_framework import serializers from .models import Student class StudentM…

各种手型都合适,功能高度可定制,雷柏VT9PRO mini和VT9PRO游戏鼠标上手

去年雷柏推出了一系列支持4KHz回报率的鼠标&#xff0c;有着非常敏捷的反应速度&#xff0c;在游戏中操作体验十分出色。尤其是这系列4K鼠标不仅型号丰富&#xff0c;而且对玩家的操作习惯、手型适应也很好&#xff0c;像是VT9系列就主打轻巧&#xff0c;还有专门针对小手用户的…

二维红外流程

x.1 开激光器 先将TDG&#xff0c;TCU&#xff0c;Empower打开&#xff0c;等一分钟后将TDG和Empower的钥匙打到On上&#xff1b; 按顺序先后开MaiTai&#xff1b;ACE&#xff1b;TOPAS&#xff1b;AOM&#xff1b; 测量ACE出光口处功率&#xff08;3.8w&#xff09;&#x…

MybatisPlus多表联查-分页关联查询+根据id获取多表联查后的单行数据

分页关联查询 需求分析 有两张表w以及d&#xff0c;需要w的一些字段以及d的一些字段在前端显示 此时就需要用到关联查询&#xff0c;查询到的数据放入视图类&#xff0c;显示在前端 项目结构 视图类 package com.wedu.modules.tain.entity.vo;import lombok.Data;import ja…

【算法】约瑟夫环问题解析与实现

一、导言 约瑟夫环&#xff08;Josephus Problem&#xff09;是一个经典的数学问题&#xff0c;涉及一个编号为 1 到 n 的人围成一圈&#xff0c;从第一个人开始报数&#xff0c;报到某个数字 m 的人出列&#xff0c;然后再从下一个人开始报数&#xff0c;如此循环&#xff0c…

挑战杯 基于RSSI的室内wifi定位系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; wifi室内定位系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;…

从零学算法300

300.给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1&…

2月20日,每日信息差

第一、中国联通 1 月智慧客服客户问题解决率为 97.9%&#xff0c;大联接用户达 10.02 亿户&#xff0c;5G 套餐用户约 2.64 亿户&#xff0c;物联网终端连接约 5.06 亿户。5G 行业虚拟专网服务客户数为 9185 个&#xff0c;智慧客服问题解决率 97.9%&#xff0c;智能服务占比 8…

仿照elementUI写个步骤条

效果图如下&#xff1a; 直接上代码&#xff1a; <template><div class""><div class"steps"><div class"step" v-for"(step, index) in steps" :key"index"><divclass"icon"click&…

深度学习发展的艺术

将人类直觉和相关数学见解结合后&#xff0c;经过大量研究试错后的结晶&#xff0c;产生了一些成功的深度学习模型。 深度学习模型的进展是理论研究与实践经验相结合的产物。科学家和工程师们借鉴了人类大脑神经元工作原理的基本直觉&#xff0c;并将这种生物学灵感转化为数学模…

微信小程序如何配置服务器域名

要在微信小程序中配置服务器域名&#xff0c;您需要按照以下步骤进行操作&#xff1a; 登录微信公众平台&#xff08;https://mp.weixin.qq.com/&#xff09;。进入小程序管理后台。在左侧菜单中选择"开发"&#xff0c;然后选择"开发设置"。在"服务器…