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

远程调用 | 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 --

相关文章:

  • mongodb源码分析session接受客户端find命令过程
  • 基于Java,SpringBoot,Vue,UniAPP医院预约挂号买药就诊病例微信小程序系统设计
  • spring IOC控制反转
  • Python 连接 MinIO (一)
  • 2.2 在javaweb开发中常见后缀文件名的简单理解
  • kali系统的安装及配置
  • python打卡day39
  • MySQL入门笔记
  • mac电脑安装nvm
  • 一个超简易的RMAN备份并保留到异地的方案,仅适用于小规模环境
  • k8s上运行的mysql、mariadb数据库的备份记录
  • IT选型指南:电信行业需要怎样的服务器?
  • uniapp分包配置,uniapp设置subPackages
  • SpringIOC中Bean生命周期
  • TeleAI发布TeleChat2.5及T1正式版,双双开源上线魔乐社区!
  • 如何应对客户对项目进度的过度干预
  • 低代码——表单生成器Form Generator详解(二)——从JSON配置项到动态渲染表单渲染
  • 若依框架 账户管理 用户分配界面解读
  • SpringBoot使用MQTT协议简述
  • 十、【核心功能篇】项目与模块管理:前端页面开发与后端 API 联调实战
  • 保定市做网站的公司/广东省人大常委会
  • 网站会员注册系统/成都关键词优化平台
  • 大型网站维护费一年多少/在线crm管理系统
  • 怎么做像京东一样的网站/什么叫营销
  • 济南高新网站建设/石家庄最新消息今天
  • 惠州网站建设模板/百度小说风云榜今天