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

远程调用 | 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.xdnf.cn/news/9771.html

相关文章:

  • LocalResolver使用
  • 2025年全国青少年信息素养大赛 scratch图形化编程挑战赛 小低组初赛 内部集训模拟题解析
  • Python使用MD5码加密手机号等敏感信息
  • UI自动化测试的革新,新一代AI工具MidScene.js实测!
  • leetcode450.删除二叉搜索树中的节点:迭代法巧用中间节点应对多场景删除
  • wechat-003-学习笔记
  • 服务器密码安全运维解决新思路:凭据管理SMS+双因素SLA认证结合的方案
  • 3d GIS数据来源与编辑工具
  • OpenAI o3安全危机:AI“抗命”背后的技术暗战与产业变局
  • 使用微软最近开源的WSL在Windows上优雅的运行Linux
  • 【笔记】Trae+Andrioid Studio+Kotlin开发安卓WebView应用
  • 位集合(STL bitset)简介
  • Starrocks 物化视图的实现以及在刷新期间能否读数据
  • 分布式不同数据的一致性模型
  • Java开发经验——阿里巴巴编码规范实践解析8
  • RK3568DAYU开发板-平台驱动开发--UART
  • 传输层协议TCP(上)
  • 【Linux】线程概念
  • 时序数据库IoTDB基于云原生的创新与实践
  • 20250529
  • Linux 开发工具
  • 第6讲、 Odoo 18 `tools` 模块深度分析
  • leetcode450.删除二叉搜索树中的节点:递归法利用有序性处理四种删除场景
  • 动态规划法在解决实际问题中的应用
  • RPG改进1.轻击与重击的搭配与连续释放
  • Java设计模式之中介者模式详解
  • 【科研绘图系列】R语言绘制森林图(forest plot)
  • json中对象转字符串和字符串转对象的方法
  • RISC-V PMA、PMP机制深入分析
  • Java -- 并发编程