远程调用 | OpenFeign+LoadBalanced的使用

article/2025/9/6 15:13:04

目录

RestTemplate 注入

OpenFeign 服务

LoadBalanced 服务

LoadBalanced 注解



RestTemplate 注入

创建 配置类,这里配置后 就不用再重新new一个了,而是直接调用即可

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class UserConfig {@LoadBalanced@Beanpublic  RestTemplate restTemplate() {return new RestTemplate();}
}

OpenFeign 服务


import com.jkglxt.healthRecodr.entity.HealthRecord;
import com.jkglxt.users.entity.User;
import com.jkglxt.users.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;import java.util.Arrays;
import java.util.List;@Slf4j
@Service
public class UserServiceImpl implements UserService {@AutowiredDiscoveryClient discoveryClient;@AutowiredRestTemplate restTemplate;@Overridepublic User createUser(int userId, int healthRecordId) {HealthRecord remoteHealthRecord = getRemoteHealthRecordWithLoadBalancerAnnotation(healthRecordId);if (userId == 0 || healthRecordId == 0){return null;}// 保存用户信息User user = new User();user.setUserId(userId);user.setHealthRecordId(healthRecordId);user.setPassword("password");user.setUsername("username");// TODO: 远程查询用户健康信息user.setUserHealthRecord(Arrays.asList(remoteHealthRecord));System.out.println("保存用户信息:" + user.toString());return user;}// 获取远程健康信息private HealthRecord getRemoteHealthRecord(int healthRecordId) {// 1. 获取健康信息服务的所有机器IP地址+端口号List<ServiceInstance> instances = discoveryClient.getInstances("service-health-record");ServiceInstance serviceInstance = instances.get(0);// 2.编辑调用健康信息服务UrlString url = "http://" + serviceInstance.getHost()+":"+serviceInstance.getPort()+"/health/"+healthRecordId;log.info("远程健康信息服务Url:{}", url);// 3.给远程发送请求,获取健康信息
//        RestTemplate restTemplate = new RestTemplate();HealthRecord healthRecord = restTemplate.getForObject(url, HealthRecord.class);return healthRecord;}}

LoadBalanced 服务


import com.jkglxt.healthRecodr.entity.HealthRecord;
import com.jkglxt.users.entity.User;
import com.jkglxt.users.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;import java.util.Arrays;
import java.util.List;@Slf4j
@Service
public class UserServiceImpl implements UserService {@AutowiredRestTemplate restTemplate;@AutowiredLoadBalancerClient loadBalancerClient;@Overridepublic User createUser(int userId, int healthRecordId) {HealthRecord remoteHealthRecord = getRemoteHealthRecordWithLoadBalancerAnnotation(healthRecordId);if (userId == 0 || healthRecordId == 0){return null;}// 保存用户信息User user = new User();user.setUserId(userId);user.setHealthRecordId(healthRecordId);user.setPassword("password");user.setUsername("username");// TODO: 远程查询用户健康信息user.setUserHealthRecord(Arrays.asList(remoteHealthRecord));System.out.println("保存用户信息:" + user.toString());return user;}// 获取远程健康信息 负载均衡private HealthRecord getRemoteHealthRecordWithLoadBalancer(int healthRecordId) {// 1. 获取健康信息服务的所有机器IP地址+端口号ServiceInstance choose = loadBalancerClient.choose("service-health-record");// 2.编辑调用健康信息服务UrlString url = "http://" + choose.getHost()+":"+choose.getPort()+"/health/"+healthRecordId;log.info("远程健康信息服务Url:{}", url);// 3.给远程发送请求,获取健康信息HealthRecord healthRecord = restTemplate.getForObject(url, HealthRecord.class);return healthRecord;}}

LoadBalanced 注解


import com.jkglxt.healthRecodr.entity.HealthRecord;
import com.jkglxt.users.entity.User;
import com.jkglxt.users.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;import java.util.Arrays;
import java.util.List;@Slf4j
@Service
public class UserServiceImpl implements UserService {@AutowiredRestTemplate restTemplate;@AutowiredLoadBalancerClient loadBalancerClient;@Overridepublic User createUser(int userId, int healthRecordId) {HealthRecord remoteHealthRecord = getRemoteHealthRecordWithLoadBalancerAnnotation(healthRecordId);if (userId == 0 || healthRecordId == 0){return null;}// 保存用户信息User user = new User();user.setUserId(userId);user.setHealthRecordId(healthRecordId);user.setPassword("password");user.setUsername("username");// TODO: 远程查询用户健康信息user.setUserHealthRecord(Arrays.asList(remoteHealthRecord));System.out.println("保存用户信息:" + user.toString());return user;}// 获取远程健康信息 负载均衡 注释private HealthRecord getRemoteHealthRecordWithLoadBalancerAnnotation(int healthRecordId) {// 1. 获取健康信息服务的所有机器IP地址+端口号String url = "http://service-health-record/health/"+healthRecordId;log.info("远程健康信息服务Url:{}", url);// 3.给远程发送请求,获取健康信息HealthRecord healthRecord = restTemplate.getForObject(url, HealthRecord.class);return healthRecord;}
}

-- Thank you --


http://www.hkcw.cn/article/jutvOWLBQK.shtml

相关文章

Ansys Zemax | 手机镜头设计 - 第 2 部分:光机械封装

本文该系列文章将讨论智能手机镜头模组设计的挑战&#xff0c;涵盖了从概念、设计到制造和结构变形的分析。本文是四部分系列的第二部分&#xff0c;介绍了在 Ansys Speos 环境中编辑光学元件以及在整合机械组件后分析系统。案例研究对象是一家全球运营制造商的智能手机镜头系统…

ubuntu 22.04安装k8s高可用集群

文章目录 1.环境准备&#xff08;所有节点&#xff09;1.1 关闭无用服务1.2 环境和网络1.3 apt源1.4 系统优化1.5 安装nfs客户端 2. 装containerd&#xff08;所有节点&#xff09;3. master的高可用方案&#xff08;master上操作&#xff09;3.1 安装以及配置haproxy&#xff…

k8s中kubeSphere的安装使用+阿里云私有镜像仓库配置完整步骤

一、实验目的 1、掌握kubeSphere 的安装部署 2、掌握kubesphere 使用外部镜像仓库&#xff1b; 2、熟悉图像化部署任务&#xff1a;产生pod---定义服务--验证访问 本次实验旨在通过 KubeSphere 平台部署基于自定义镜像&#xff08;nginx:1.26.0 &#xff09;的有状态副本集…

innovus: write_lef_abstract如何写入stripe信息

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 block level需要把pg 信息写到lef里&#xff0c;方便top level查看&#xff0c;这里提供一种简单方法: write_lef_abstract -5.8 -PGPinLayers {ME5 ME6 ME7 ME8 AL_RDL} -str…

MySQL索引与事物

目录 一&#xff1a;MySQL索引介绍 1.索引概述 2.索引作用 3.索引的分类 关键区别 &#xff08;1&#xff09;普通索引 &#xff08;2&#xff09;唯一索引 &#xff08;3&#xff09;主键索引 &#xff08;4&#xff09;组合索引&#xff08;最左前缀) 4.全文索引&am…

光年号,国外云手机号的创新应用与发展趋势

光年号&#xff0c;国外云手机号的创新应用与发展趋势 光年号作为新兴通信技术代表&#xff0c;与国外云手机号结合&#xff0c;推动通信变革。光年号的灵活性提升了国外云手机号的使用效率&#xff0c;光年号服务正在全球扩展&#xff0c;光年号和国外云手机号的融合创新&…

Java开发经验——阿里巴巴编码规范实践解析7

摘要 本文主要解析了阿里巴巴 Java 开发中的 SQL 编码规范&#xff0c;涉及 SQL 查询优化、索引建立、字符集选择、分页查询处理、外键与存储过程的使用等多个方面&#xff0c;旨在帮助开发者提高代码质量和数据库操作性能&#xff0c;避免常见错误和性能陷阱。 1. 【强制】业…

【经验】Ubuntu中设置terminator的滚动行数、从Virtualbox复制到Windows时每行后多一空行

1、设置terminator的滚动行数 1.1 问题描述 在终端 terminator 中&#xff0c;调试程序时&#xff0c;只能查看有限行数的打印日志&#xff0c;大约是500行&#xff0c;怎么能增加行数 1.2 解决方法 1&#xff09;安装terminator sudo apt install terminator和 terminato…

Photoshop2025(PS2025)软件及安装教程

在数字图像编辑领域&#xff0c;Adobe Photoshop 一直是无可争议的王者。如今&#xff0c;Photoshop 2025 重磅登场&#xff0c;再次为我们带来了惊喜与变革&#xff0c;进一步巩固了它在行业中的领先地位。 Photoshop 2025 在人工智能方面的升级令人瞩目。其全新的 “Magic Se…

NHANES指标推荐:UAR

文章题目&#xff1a;The Uric Acid to Albumin Ratio Predicts All-cause and Cardiovascular Mortality Among U.S. Adults Results from the National Health and Nutrition Examination Survey in 2003-2018 中文标题&#xff1a;尿酸与白蛋白比值可预测美国成年人的全因死…

C++23 std::fstreams基础回顾

文章目录 引言1.1 std::fstreams概述1.2 std::fstreams的主要功能和常用操作 2. 独占模式 (P2467R1) 的详细介绍2.1 独占模式的定义和背景2.2 独占模式的作用和优势 3. C23 std::fstreams支持独占模式 (P2467R1) 的具体实现方式3.1 代码示例3.2 实现步骤解释 4. 使用该特性可能…

Unity3D仿星露谷物语开发55之保存游戏到文件

1、目标 将游戏保存到文件&#xff0c;并从文件中加载游戏。 Player在游戏中种植的Crop&#xff0c;我们希望保存到文件中&#xff0c;当游戏重新加载时Crop的GridProperty数据仍然存在。这次主要实现保存地面属性&#xff08;GridProperties&#xff09;信息。 我们要做的是…

Windows 中禁止在桌面放置文件以保持桌面整洁

假设用户名为xxx&#xff0c;进入文件夹C:\Users\xxx&#xff0c;选中该文件夹下桌面文件夹并单击右键选择属性。 点击编辑。 选中用户xxx并将其写入权限设置为拒绝。随后桌面在无法主动授权情况下无法新建文件或者文件夹&#xff08;设置权限之前可以先将桌面文件移动到别处&…

STM32开发全解析:从环境搭建到项目实战的技术文档撰写指南

在嵌入式开发领域&#xff0c;STM32系列微控制器凭借高性能、低功耗及丰富外设等特性&#xff0c;成为工程师的首选平台。本文以STM32F103C8T6为例&#xff0c;结合技术文档撰写规范&#xff0c;系统拆解从基础知识、开发环境到实战项目的全流程&#xff0c;为STM32技术传播提供…

AI数字人系统开发——引领未来交互革命

随着人工智能技术的不断发展&#xff0c;AI数字人系统开发正引领着一场前所未有的交互革命。它将打破传统的人机交互方式&#xff0c;为我们带来更加自然、智能、高效的交互体验。 我们的AI数字人系统开发&#xff0c;融合了多种先进的技术&#xff0c;如计算机视觉、语音识别…

tryhackme——Data Exfiltration

文章目录 一、网络拓扑二、数据泄露分类2.1 传统数据泄露2.2 C2通信2.3 隧道 三、隧道3.1 Exfiltration using TCP socket3.2 Exfiltration using SSH3.3 Exfiltrate using HTTP(S)HTTP隧道 3.4 Exfiltration using ICMP3.4.1 ICMP数据包结构3.4.2 MSF实现ICMP数据泄露3.4.3 IC…

计算机毕业设计酒店后台管理系统(vue+springboot+mysql+开题+论文)

摘要&#xff1a; 本文将介绍一个基于Vue.js、Spring Boot和MySQL的酒店后台管理系统毕业设计项目。该项目旨在为酒店提供高效、便捷、安全的管理平台&#xff0c;实现客房管理、订单管理、客户管理、员工管理等功能。本文将涵盖项目背景、技术选型、系统架构、功能模块、数据库…

华为OD机试真题——告警抑制(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

LabVIEW旋转机械智能监测诊断系统

采用 LabVIEW 开发旋转机械智能监测与故障诊断系统&#xff0c;通过集品牌硬件与先进信号处理技术&#xff0c;实现旋转机械振动信号的实时采集、分析及故障预警。系统突破传统监测手段的局限性&#xff0c;解决了复杂工业环境下信号干扰强、故障特征提取难等问题&#xff0c;为…

学习路之PHP--easyswoole简易增删改查入门

这里写目录标题 0、安装orm插件一、创建数据库二、创建模型三、 0、安装orm插件 composer require easyswoole/orm一、创建数据库 表&#xff1a; CREATE TABLE cases (id int(11) NOT NULL AUTO_INCREMENT COMMENT 主键,title varchar(200) CHARACTER SET utf8 COLLATE utf…