目录
[RestTemplate 注入](#RestTemplate 注入)
[OpenFeign 服务](#OpenFeign 服务)
[LoadBalanced 服务](#LoadBalanced 服务)
[LoadBalanced 注解](#LoadBalanced 注解)

RestTemplate 注入
创建 配置类,这里配置后 就不用再重新new一个了,而是直接调用即可
java
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
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
OpenFeign 服务
java
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 {
@Autowired
DiscoveryClient discoveryClient;
@Autowired
RestTemplate restTemplate;
@Override
public 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.编辑调用健康信息服务Url
String 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 服务
java
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 {
@Autowired
RestTemplate restTemplate;
@Autowired
LoadBalancerClient loadBalancerClient;
@Override
public 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.编辑调用健康信息服务Url
String url = "http://" + choose.getHost()+":"+choose.getPort()+"/health/"+healthRecordId;
log.info("远程健康信息服务Url:{}", url);
// 3.给远程发送请求,获取健康信息
HealthRecord healthRecord = restTemplate.getForObject(url, HealthRecord.class);
return healthRecord;
}
}
LoadBalanced 注解
java
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 {
@Autowired
RestTemplate restTemplate;
@Autowired
LoadBalancerClient loadBalancerClient;
@Override
public 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 --