二、ribbon 实现客户端侧负载均衡 实例

1、    工具及软件版本

JDK: 1.8

Spring Boot: 2.3.0.RELEASE

Spring Cloud: Hoxton.SR6

Maven: 3.5.3

2、实现客户端侧负载均衡

2.1、创建Maven项目,artifactId是ribbon-server,pom.xml内容如下:

        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.baiyilanjian.cloud

ribbon-server

1.0.0

jar

 

org.springframework.boot

spring-boot-starter-parent

2.3.0.RELEASE

UTF-8

UTF-8

1.8

org.springframework.boot

spring-boot-starter-web

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

 

org.springframework.cloud

spring-cloud-dependencies

Hoxton.SR6

pom

import

 

org.springframework.boot

spring-boot-maven-plugin

2.2、spring boot的启动类,添加注解,@LoadBalanced 实例化RestTemplete,代码如下:

package com.baiyilanjian.cloud;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;

import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Primary;

import org.springframework.web.client.RestTemplate;

/**

* Ribbon 实现客户端侧负载均衡

* @author

*/

@SpringBootApplication

@EnableEurekaClient

public class RibbonServerApplication {

@LoadBalanced

@Bean

  RestTemplate loadBalanced() {

return new RestTemplate();

}

@Primary

@Bean

  RestTemplate restTemplate() {

return new RestTemplate();

}

public static void main(String[] args) {

SpringApplication.run(RibbonServerApplication.class, args);

}

}

2.3,修改application.yml配置文件,代码如下:

spring:

application:

name: ribbon-server#服务名称

server:

# 指定该Eureka实例的端口

  port:8086

logging:

level:

com.netflix: warn

eureka:

client:

serviceUrl:

defaultZone: http://localhost:8081/eureka/

2.4、编写测试Controller  TestController.java
package com.baiyilanjian.cloud.controller;

import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.ObjectMapper;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.http.HttpEntity;

import org.springframework.http.HttpHeaders;

import org.springframework.http.MediaType;

import org.springframework.http.ResponseEntity;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.client.RestTemplate;

import java.util.HashMap;

import java.util.Map;

@RestController

@RequestMapping("/test")

public class TestController {

private static final Loggerlogger = LoggerFactory.getLogger(TestController.class);

@Autowired

    private RestTemplaterestTemplate;

@RequestMapping("test")

public String helloRibbon()throws JsonProcessingException {

ObjectMapper objectMapper =new ObjectMapper();

RestTemplate restTemplate =new RestTemplate();

String url ="http://xxxx";

HttpHeaders headers =new HttpHeaders();

headers.setContentType(MediaType.APPLICATION_JSON);

Map map =new HashMap<>();

map.put("name","");

map.put("password","");

String str = objectMapper.writeValueAsString(map);

HttpEntity request =new HttpEntity(str, headers);

ResponseEntity response = restTemplate.postForEntity( url, request , String.class );

System.out.println(response.getBody());

return response.getBody();

}

}

你可能感兴趣的:(二、ribbon 实现客户端侧负载均衡 实例)