03_SpringCloud整合Ribbon实现负载均衡
  XHDrlE4yaUzu 2023年11月02日 77 0


采用随机负载均衡策略,四线服务之间的调用

03_SpringCloud整合Ribbon实现负载均衡_Spring Cloud Alibaba


2个用户中心,1个内容中心,内容中心调用用户中心服务

package com.itmuch.contentcenter.service.impl;

import com.itmuch.contentcenter.dao.content.ShareMapper;
import com.itmuch.contentcenter.domain.entity.content.Share;
import com.itmuch.contentcenter.dto.ShareDTO;
import com.itmuch.contentcenter.dto.UserDTO;
import com.itmuch.contentcenter.service.IShareService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Collectors;

/**
* @author gblfy
* @ClassNme ShareServiceImpl
* @Description TODO
* @Date 2019/7/6 17:58
* @version1.0
*/
@Slf4j
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ShareServiceImpl implements IShareService {

private final ShareMapper shareMapper;

private final RestTemplate restTemplate;

private final DiscoveryClient discoveryClient;


@Override
public ShareDTO findById(Integer id) {

//获取分享详情
Share share = this.shareMapper.selectByPrimaryKey(id);
//发布人id
Integer userId = share.getUserId();
//怎么调用用户微服务的/users/{userId}呢?
List<ServiceInstance> instances = discoveryClient.getInstances("user-center");
List<String> targetURLList = instances.stream()
//数据变换
.map(instance -> instance.getUri().toString() + "/users/{id}")
.collect(Collectors.toList());
int i = ThreadLocalRandom.current().nextInt(targetURLList.size());

log.info("请求的目标地址:{}", targetURLList.get(i));

UserDTO userDTO = this.restTemplate.getForObject(targetURLList.get(i), UserDTO.class, userId);

//消息的装配
ShareDTO shareDTO = new ShareDTO();
BeanUtils.copyProperties(share, shareDTO);
shareDTO.setWxNickname(userDTO.getWxNickname());
return shareDTO;
}
}

使用Ribbon实现负载均衡

Ribbon是什么?

引入Ribbon后的架构严谨

整合Ribbon实现负载均衡

添加依赖

此依赖中已包括

  <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

启动类加注解

   @Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}

写配置(无)

Ribbon重构后,负载均衡效果

package com.itmuch.contentcenter.service.impl;

import com.itmuch.contentcenter.dao.content.ShareMapper;
import com.itmuch.contentcenter.domain.entity.content.Share;
import com.itmuch.contentcenter.dto.ShareDTO;
import com.itmuch.contentcenter.dto.UserDTO;
import com.itmuch.contentcenter.service.IShareService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

/**
* @author gblfy
* @ClassNme ShareServiceImpl
* @Description TODO
* @Date 2019/7/6 17:58
* @version1.0
*/
@Slf4j
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ShareServiceImpl implements IShareService {

private final ShareMapper shareMapper;

private final RestTemplate restTemplate;

@Override
public ShareDTO findById(Integer id) {

//获取分享详情
Share share = this.shareMapper.selectByPrimaryKey(id);
//发布人id
Integer userId = share.getUserId();
//怎么调用用户微服务的/users/{userId}呢?
//Ribbo重构后
UserDTO userDTO = this.restTemplate.getForObject("http://user-center/users/{userId}", UserDTO.class, userId);

//消息的装配
ShareDTO shareDTO = new ShareDTO();
BeanUtils.copyProperties(share, shareDTO);
shareDTO.setWxNickname(userDTO.getWxNickname());
return shareDTO;
}
}

03_SpringCloud整合Ribbon实现负载均衡_java_02


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  ehrZuhofWJiC   2024年04月26日   42   0   0 日志Java
XHDrlE4yaUzu