spring-cloud-ribbon负载均衡(二)
来源:互联网 发布:sql having count(*) 编辑:程序博客网 时间:2024/06/04 19:03
通过eureka+ribbon来实现负载均衡,ribbon是一个为客户端提供负载均衡功能的服务,它内部提供了一个叫做ILoadBalance的接口代表负载均衡器的操作。RestTemplate 构建RestTemplate对应的bean,在method上使用注解LoadBalanced表示restTemplate使用LoadBalancerClient执行请求。ribbonServerList会被DiscoveryEnabledNIWSServerList重写,扩展成从Eureka注册中心中获取服务端列表。同时它也会用NIWSDiscoveryPing来取代IPing,它将职责委托给Eureka来确定服务端是否已经启动。
1、注册发现服务
(1)application
package com.neo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication@EnableEurekaServerpublic class SpringCloudEurekaApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudEurekaApplication.class, args); }}
(2)properties
spring.application.name=spring-cloud-eurekaserver.port=8000eureka.client.register-with-eureka=falseeureka.client.fetch-registry=falseeureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
(3)pom.xml
注:eureka依赖了ribbon,所以不需引入ribbon的jar包
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.wei.qin</groupId> <artifactId>spring-cloud-eureka</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>spring-cloud-eureka</name> <description>Demo project for Spring cloud eureka</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.7</java.version> <spring-cloud.version>Dalston.RELEASE</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>
2、ribbon-service
(1)corsConfig
package com.wei.qin;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.CorsRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;/** * 配置跨域访问,开发环境使用,生产环境可取消 * * @author Davis * @date 2017年6月8日 下午5:28:59 */@Configuration public class CorsConfig extends WebMvcConfigurerAdapter { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowCredentials(true) .allowedMethods("GET", "POST", "DELETE", "PUT") .maxAge(3600); } }
(2)application
package com.wei.qin;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.context.annotation.Bean;import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.web.client.RestTemplate;/** * * * @auther dwx * * 2017年8月21日 */@SpringBootApplication@EnableDiscoveryClient public class ClientApplication { public static void main(String[] args) { SpringApplication.run(ClientApplication.class, args); } /** * LoadBalanced 注解表明restTemplate使用LoadBalancerClient执行请求 * * @return */ @Bean @LoadBalanced public RestTemplate restTemplate() { RestTemplate template = new RestTemplate(); SimpleClientHttpRequestFactory factory = (SimpleClientHttpRequestFactory) template.getRequestFactory(); factory.setConnectTimeout(3000); factory.setReadTimeout(3000); return template; } }
(3)ClientController
package com.wei.qin;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;@RestControllerpublic class ClientController { @Autowired RestTemplate client; @RequestMapping("/test") public String helloWorld() { return client.getForObject("http://spring-cloud-producer/hello?name=111", String.class); }}
注:spring-cloud-producer为其他服务的serviceid
(4)properties
默认情况下,ribbon负载均衡使用的是轮询策略,也可以自定义负载均衡策略。比如自定义随机策略:
1、在properties中加入下面代码:
ribbon-service.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
注: ribbon-service是spring.application.name
spring.application.name=ribbon-serviceserver.port=9000eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
(5)pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.wei.qin</groupId> <artifactId>springcloudribbon2</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>springcloudribbon2</name> <url>http://maven.apache.org</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.7</java.version> <spring-cloud.version>Dalston.RELEASE</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>
3、其他服务spring-cloud-producer
(1)properties
spring.application.name=spring-cloud-producerserver.port=8006eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
(2)controller
package com.neo.controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class HelloController { @RequestMapping("/hello") public String index(@RequestParam String name) { return "hello "+name+",this is first messge"; }}
(3)application
package com.neo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication@EnableDiscoveryClientpublic class ProducerApplication { public static void main(String[] args) { SpringApplication.run(ProducerApplication.class, args); }}
- spring-cloud-ribbon负载均衡(二)
- Spring Cloud -- Ribbon负载均衡
- Spring-Cloud 负载均衡 Ribbon
- 【Spring Cloud】Ribbon负载均衡
- spring cloud学习(二)使用Ribbon实现客户端负载均衡
- Spring Cloud系列二 之 Ribbon负载均衡
- Spring Cloud入门教程(二):客户端负载均衡(Ribbon)
- spring cloud ribbon自定义负载均衡策略
- Spring Cloud 客服端负载均衡 Ribbon
- Spring Cloud 客服端负载均衡 Ribbon
- Spring Cloud Ribbon(负载均衡)
- spring-cloud-ribbon负载均衡(一)
- 负载均衡之Spring Cloud Ribbon
- 三、Spring Cloud 的 Ribbon 负载均衡
- 客户端负载均衡 Spring Cloud Ribbon
- Spring Cloud学习--负载均衡(Ribbon)
- spring cloud Ribbon 2 (客户端负载均衡)
- spring cloud使用ribbon实现负载均衡
- Laravel使用php artisan migrate报错: [PDOException] SQLSTATE[42S02]: Base table or view not found: 114
- Java的log4J完美日志篇
- 开始装逼
- POJ 3061 Subsequence
- sklearn(四)----标准化数据,这里normalization就是scaling
- spring-cloud-ribbon负载均衡(二)
- [FUNC]星级评分函数
- 算数基本原理(唯一分解定理)
- 开通了csdn博客
- 踩坑日记--Integer没设默认值的教训
- D
- MFC的使用——在共享DLL中使用MFC、在静态库中使用
- 字符串左右旋
- RSA host key has changed 错误