当前位置: 首页 > article >正文

远程调用 | OpenFeign+LoadBalanced的使用

目录

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.lryc.cn/news/2392963.html

相关文章:

  • NSSCTF [NISACTF 2022]ezheap
  • ADB推送文件到指定路径解析
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(二十七) -> 开发云函数
  • ansible中的inventory.ini 文件详解
  • 基于AOD-Net与GAN的深度学习去雾算法开发
  • Rust 学习笔记:闭包
  • c# 获取电脑 分辨率 及 DPI 设置
  • 基于频分复用导频的MMSE信道估计方法设计与仿真
  • 低代码开发模式下的应用交付效率优化:拖拽式交互机制研究
  • STP配置
  • Linux操作系统 使用共享内存实现进程通信和同步
  • 如何优化微信小程序中渲染带有图片的列表(二进制流存储方式的图片存在本地数据库)
  • 尝鲜纯血鸿蒙,华为国际版本暂时不支持升级。如mateX6 国际版?为什么不支持?什么时候支持?
  • 《 PyTorch 2.3革新:torch.compile自动生成CUDA优化内核全解》
  • OpenCV中的分水岭算法 (C/C++)
  • Kafka 客户端连接机制的一个典型陷阱
  • 相机--RGB相机
  • 足球数据全解析:实时数据到高阶数据
  • [科研实践] VS Code (Copilot) + Overleaf (使用 Overleaf Workshop 插件)
  • 人工智能100问☞第36问:什么是BERT?
  • 从0开始学习R语言--Day12--泊松分布
  • 工控机安装lubuntu系统
  • 视频监控汇聚平台EasyCVR安防小知识:如何通过视频融合平台解决信息孤岛问题?
  • 在大型中实施访问控制 语言模型
  • Haption在危险、挑战性或受限环境中操作的情况提供了一种创新的遥操作解决方案
  • html中使用nginx ssi插入html
  • 行为型:状态模式
  • 优雅草最新实战项目技术Discuz X3.5电子签约插件开发项目实施方案优雅草·卓伊凡
  • 人工智能在智能金融中的创新应用与未来趋势
  • LeetCode:贪心算法