LoadBalance服务调用
创建两个provider01 和 provider02 ,, spring.application.name 配置相同名字

spring:
  application:
    name: UserProvider
server:
  port: 3000
eureka:
  client:
    service-url:
      defaultZone: http://localhost:1111/eureka,http://localhost:1112/eureka
spring:
  application:
    name: UserProvider
server:
  port: 3001
eureka:
  client:
    service-url:
      defaultZone: http://localhost:1111/eureka,http://localhost:1112/eureka

在消费者中使用 LoadBalanceClient 对象,实现负载均衡:

  • 注入一个普通的 RestTemplate 对象
  • 使用 LoadBalanceClient 和 RestTemplate 实现负载均衡
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    RestTemplate restTemplate;

    // 支持负载均衡的调用客户端
    @Autowired
    LoadBalancerClient loadBalancerClient;

    @Override
    public Map<String, Object> findAllUser() {
//        通过客户端调用服务均衡器查找服务
        ServiceInstance inst = loadBalancerClient.choose("UserProvider");

        String url ="http://"+ inst.getHost()+":"+inst.getPort();
        System.out.println(url);
        Map<String,Object> map = restTemplate.getForObject(url, Map.class);
        return map;

    }
}

Ribbon
给RestTemplate bean添加 @LoadBalanced 注解,变成可以负载均衡的RestTemplate

   @Bean
    @LoadBalanced  // 开启ribbon
    RestTemplate restTemplate(){
        return new RestTemplate();
    }
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    RestTemplate restTemplate;

    @Override
    public Map<String, Object> findAllUser() {
        Map<String, Object>  map = restTemplate.getForObject("http://UserProvider", Map.class);
        return map;
    }
}

openfeign

和Ribbon 一个性质的东西,Ribbon.需要手动调用目标服务
OpenFeign是 spring cloud 在 feign 的基础上支持了 SpringMVc注解,如@RequestMapping等

引用:https://blog.csdn.net/zimou5581/article/details/89949852

feign简化负载均衡书写,使用@FeignClient(服务名字) 声明一个接口,在接口中使用 RequestMapping 来匹配服务端的每一个接口,与之对应,,,在Controller层调用这个接口,就相当于远程调用了服务端的接口。。

导入包:

  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

配置文件:

server:
  port: 3200
spring:
  application:
    name: userweb02


eureka:
  client:
    service-url:
      defaultZone: http://localhost:1111/eureka,http://localhost:1112/eureka

定义一个接口引用远程服务

@FeignClient(value = "UserProvider")
public interface UserService {
    @GetMapping("/")
    public Map<String,Object> findAll();
}

启动类要开启openfeign 使用 @EnableFeignClients

openFeign配置日志:

这里指定的Level级别是FULL,Feign支持4种级别:
NONE:不记录任何日志信息,这是默认值。
BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。

配置一个日志的Bean


@Configuration
public class FeignConfig {
    @Bean
    public Logger.Level getFeignLogger(){
        return Logger.Level.FULL;
    }
}

设置指定包的日志打印:

# 设置消费者指定包日志级别
logging:
  level:
    com:
      cj: debug
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐