springcloud的负载均衡数据客户端负载均衡,他需要自己维护自己要访问的服务端清单,这些服务端清单来自于注册中心(例如eureka-server),同服务端的负载均衡类似,客户端的负载均衡也需要通过心跳机制去维护自己的服务清单的健康性。只是这个步骤需要与服务注册中心配合完成。通过springcloud ribbon的封装,我们使用客户端的负载均衡非常简单,只需要两步。
1、服务提供者启动多个服务实例并注册到一个注册中心或是相互关联的服务注册中心
2、服务消费者创建的时候使用@LoadBalanced进行修饰。
代码1、
参考上一篇文章 springcloud服务治理Eureka,但是eureka-client中DemoController需要进行修改。
修改内容后,代码如下。
package com.springcloud.eurekaclient.controller;
import com.springcloud.eurekaclient.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.*;
import java.net.URI;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @Author:sgchen
* @Date:2019/8/2 16:38
* @Description:
*/
@RestController
public class DemoController {
@Autowired
private DiscoveryClient discoveryClient;
@Value("${spring.application.name}")
private String applicationName;
@Value("${server.port}")
private String port;
@RequestMapping("hello")
public String hello(){
List<String> services = discoveryClient.getServices();
String message = "应用名:"+applicationName+",端口号:"+port;
return message;
}
}
将eureka-client打包,使用命令 mvn package
启动eureka-server项目
运行服务项目时指定端口号。java -jar eureka-client-0.0.1-SNAPSHOT.jar --server.port=1114
项目正常启动后再次使用其他端口启动该项目。java -jar eureka-client-0.0.1-SNAPSHOT.jar --server.port=1115
访问eureka-server服务端,可看到如下图:
表示此服务有两个端点正常启动,端口号分别是1114和1115。
然后启动消费者,可以使用idea直接启动。端口使用1113。访问urlhttp://localhost:1113/ribbon-consummer。
分别返回如下接口。
应用名:hello-service,端口号:1115
应用名:hello-service,端口号:1114
则表示消费者分别调用了两个服务提供者。