spring cloud 入门实践系列
来源:互联网 发布:windows ce应用小游戏 编辑:程序博客网 时间:2024/06/05 15:25
Ribbon is a client side IPC library that is battle-tested in cloud. It provides the following features
Load balancing
Fault tolerance
Multiple protocol (HTTP, TCP, UDP) support in an asynchronous and reactive model
Caching and batching
创建ribbon测试项目
项目结构如图
pom文件
<?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.zhang</groupId> <artifactId>ribbontest</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>ribbontest</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.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.8</java.version> <spring-cloud.version>Dalston.SR1</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</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>
属性配置文件application.properties
server.port=7071代表RibbontestApplication暴露在7071端口
spring.application.name=ribbonserver.port=7071eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/servicehello.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
暴露服务调用接口
package com.zhang.web;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;/** * Created by zhangxiaolong on 17/7/20. */@RestControllerpublic class ConsumerClass { @Autowired private RestTemplate restTemplate; @Autowired private LoadBalancerClient loadBalancerClient; @RequestMapping(value = "/hello", method = RequestMethod.GET) public String hello(@RequestParam String name) { this.loadBalancerClient.choose("service-hello");//随机访问策略 return restTemplate.getForEntity("http://service-hello/hello?name="+name, String.class).getBody(); }}
应用程序运行入口
package com.zhang;import com.netflix.loadbalancer.IRule;import com.netflix.loadbalancer.RandomRule;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.loadbalancer.LoadBalanced;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;import org.springframework.context.annotation.Bean;import org.springframework.web.client.RestTemplate;@EnableEurekaClient@SpringBootApplicationpublic class RibbontestApplication { @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } @Bean public IRule ribbonRule() { return new RandomRule(); } public static void main(String[] args) { SpringApplication.run(RibbontestApplication.class, args); }}
创建service-hello服务
使用eureka作为注册中心,暴露在端口8761
启动两个service-hello服务,分别暴露在8762和8763端口
可以看到service-hello服务,Availability Zones数量是2,也就是有两个实例在提供服务。
8762提供服务代码
@RequestMapping("hello") public String hello(@RequestParam String name){ return "hello "+name+",from service provider 1"; }
8763提供服务代码
@RequestMapping("hello") public String hello(@RequestParam String name){ return "hello "+name+",from service provider 2"; }
测试和验证
1 启动RibbontestApplication中的main函数
2 浏览器中输入
http://172.16.153.1:7071/hello?name=%E5%BC%A0%E5%B0%8F%E9%BE%99
结论
1 ribbon可以作为eureka服务的客户端,可以调通注册在eureka服务器上的服务
2 ribbon天生带着负载均衡的支持,负载策略可配置。
RibbontestApplication中ribbonRule方法返回的RandomRule即是随机策略。
其他负载策略
阅读全文
1 0
- spring cloud 入门实践系列
- spring cloud 入门实践系列
- spring cloud 入门实践系列
- spring cloud 入门实践系列
- spring cloud 入门实践系列
- spring cloud 入门实践系列
- Spring Cloud 入门系列总结
- SpringBoot系列—Spring Cloud快速入门
- Spring Cloud Security系列教程一:入门
- Spring Cloud Config 实践
- spring cloud系列
- spring cloud 系列文章
- spring-cloud系列-Eureka
- spring cloud入门基础
- Spring cloud入门
- spring cloud入门学习
- Spring Cloud 入门
- Spring Cloud Eureka 入门 (一)服务注册中心详解 「Spring Cloud Eureka 入门系列」 Spring Cloud Eureka 入门 (一)服务注册中心详解 Spr
- 顺序表的创建,插入,修改,删除,查询代码
- ArcGIS JS 实现前端添加shape并保存到服务器
- pc端防止百度转码
- 7-表格显示案例
- 代码检测工具 joern 安装
- spring cloud 入门实践系列
- java设计模式之---备忘录模式
- 菜鸟先飞之JAVA_抽象类和接口
- 算法系列—— Remove Element
- FFmpeg的Android平台移植—编译篇
- Metron安装方式的一种,基于Ambari集群安装
- 静态文本控件自绘
- day 1
- 【怎样写代码】工厂三兄弟之工厂方法模式(五):工厂方法模式扩展