Spring Cloud构建微服务架构(二)服务消费者(rest+ribbon)
来源:互联网 发布:网络保密监测分析系统 编辑:程序博客网 时间:2024/05/16 00:33
在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。Spring Cloud有两种微服务调用方式:①ribbon+restTemplate ②feign
本篇主要是将ribbon+restTemplate
ribben这个东西比较复杂,我们先简单说一下:
Spring Cloud Ribbon 是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的。它不像服务注册中心、配置中心、API网关那样独立部署,但是它几乎存在于每个微服务的基础设施中。包括前面的提供的声明式服务调用也是基于该Ribbon实现的。
RestTemplate是Spring自己提供的对象,不是新的内容。读者不知道RestTemplate可以查看相关的文档。
1.新建MAVEN项目,加入依赖
<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>test</groupId> <artifactId>java-maven-user</artifactId> <version>0.0.1-SNAPSHOT</version> <name>service-ribbon</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.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> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</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>Dalston.RC1</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> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories></project>2.配置文件
eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/server: port: 8764spring: application: name: service-ribbon在工程的启动类中,通过@EnableDiscoveryClient向服务中心注册;并且向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。
package test;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.web.client.RestTemplate;@SpringBootApplication@EnableDiscoveryClientpublic class ServiceRibbonApplication { public static void main(String[] args) { SpringApplication.run(ServiceRibbonApplication.class, args); } @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); }}3.测试类
写一个测试类HelloService,通过之前注入ioc容器的restTemplate来消费service-hi服务的“/hi”接口,在这里我们直接用的程序名替代了具体的url地址,在ribbon中它会根据服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的url替换掉服务名,代码如下:
package test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.web.client.RestTemplate;@Servicepublic class HelloService { @Autowired RestTemplate restTemplate; public String hiService(String name) { return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class); }}写一个controller,在controller中用调用HelloService 的方法,代码如下:
package test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class HelloControler { @Autowired HelloService helloService; @RequestMapping(value = "/hi") public String hi(@RequestParam String name){ return helloService.hiService(name); }}4.发送请求
http://localhost:8764/hi?name=heidou,可以看到页面:
hi heidou,i am from port:8763
hi heidou,i am from port:8762 交替出现
阅读全文
0 0
- Spring Cloud构建微服务架构(二)服务消费者(rest+ribbon)
- Spring Cloud构建微服务架构(二)服务消费者
- Spring Cloud构建微服务架构(二)服务消费者
- Spring Cloud构建微服务架构(二)服务消费者
- Spring Cloud构建微服务架构(二)服务消费者
- Spring Cloud构建微服务架构(二)服务消费者
- Spring Cloud构建微服务架构(二)服务消费者
- Spring Cloud构建微服务架构(二)服务消费者
- Spring Cloud构建微服务架构(二)服务消费者
- Spring Cloud构建微服务架构(二)服务消费者
- Spring Cloud构建微服务架构(二)服务消费者
- Spring Cloud构建微服务架构(二)服务消费者
- Spring Cloud构建微服务架构:服务消费(Ribbon)
- Spring Cloud构建微服务架构-服务消费(Ribbon)
- Spring Cloud构建微服务架构:服务消费(Ribbon)【Dalston版】
- Spring Cloud构建微服务架构:服务消费(Ribbon)【Dalston版】
- Spring Cloud构建微服务架构—服务消费(Ribbon)
- Spring Cloud构建微服务架构—服务消费Ribbon
- 程序设计与算法(一)C语言程序设计CAP 第三周编程作业
- Radmax,真正的五轴激光切割高效编程
- AutoCAD .Net 创建圆弧Arc
- 客户关系管理系统5
- android端富文本编辑器HRichEditor
- Spring Cloud构建微服务架构(二)服务消费者(rest+ribbon)
- CentOS7使用docker安装Mysql
- SR记录(个人)
- AutoCAD .Net 创建椭圆Ellipse
- 考题篇(5.4) NSE4 09. 反病毒 ❀ 飞塔 (Fortinet) 网络安全专家
- boostrap网格系统
- Linux下添加shell脚本使得nginx日志每天定时切割压缩
- 软件工程:软件过程模型实例
- Java并发编程的艺术(十一)——线程池(2)