springcloud学习笔记二:服务提供、消费与ribbon
来源:互联网 发布:一对一辅导软件免费 编辑:程序博客网 时间:2024/05/18 05:42
在学习笔记一里,我们简单实现了一个注册中心,我们就可以在上面进行服务的注册与订阅消费。
编写服务,进行注册
同样,我们可以在STS中右键New->Spring Starter Project ,填写相应内容->点击next
选择需要的依赖包,我们这里由于是构建一个服务提供者,要发现注册中心,所以我们勾选Eureka Dicovery,然后点击finish
这样STS就帮我们创建了一个服务提供者应用,下面是完整的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.point</groupId><artifactId>point-provider</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>point-provider</name><description>test provider</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.6.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.SR2</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>我们还需要配置一些功能完成我们的服务注册。
在入口类添加注解@EnableDiscoveryClient,用于发现注册中心。
@EnableDiscoveryClient@SpringBootApplicationpublic class PointProviderApplication {public static void main(String[] args) {SpringApplication.run(PointProviderApplication.class, args);}}
在application.properties中添加相应配置
spring.application.name=point-providerserver.port=2000eureka.client.serviceUrl.defaultZone=http://localhost:1000/eureka/spring.application.name:服务名称,注册到注册中心中的名称,用于消费者使用。
server.port:服务端口
eureka.client.serviceUrl.defaultZone:注册中心注册地址
配置完以上后,我们启动该服务,然后访问我们的注册中心(注册中心的创建可以参考上一篇文章http://blog.csdn.net/u011890101/article/details/77116090)。
我们发现名称为point-provider的服务已经成功在注册中心完成注册,这样我们就可以编写消费端来消费我们已经注册的服务。
服务消费端
编写消费端不得不提到的一个技术就是Ribbon,它能帮我们实现负载均衡,即我们可以部署多个同样的服务提供者,通过ribbon,消费者可以根据多种负载策略去消费其中一个服务提供者。
我们先在服务提供者中编写一个服务方法
@RestController@RequestMapping("provider")public class ProviderController {@GetMapping("getName")public String getName(){ System.out.println("服务被调用2000"); return "meepoGuan";}}然后我们将服务提供者point-provider编译成jar部署下,同时修改端口为2001,启动,我们的2000同样也进行启动,这样就相当于我们启动了两个point-provider。
访问注册中心,可以看到名称为point-provider的服务,已经有2000、2001两个实例在运行。
下一步我们就可以编写我们的消费者,通过ribbon进行负载均衡来访问我们的point-provider服务。
还是通过STS进行创建
右键New->Spring Starter Project ,填写相应内容->点击next
选择需要的依赖包,我们这里选择Eureka Dicovery与Ribbon
点击finish创建完毕,完整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.point</groupId><artifactId>point-consumer</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>point-consumer</name><description>test consumer</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.6.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.SR2</spring-cloud.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-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>开始对消费端进行一些配置
与服务提供者一样,在入口类添加@EnableDiscoveryClient,用于发现注册中心。
由于我们服务提供者是提供rest服务,所以我们需要引入下RestTemplate类,进行远程访问,同时加入@LoadBalanced,用ribbon帮我们实现负载均衡,访问服务列表。
@EnableDiscoveryClient@SpringBootApplicationpublic class PointConsumerApplication {public static void main(String[] args) {SpringApplication.run(PointConsumerApplication.class, args);}@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}}配置application.properties
server.port=3000spring.application.name=point-consumereureka.client.serviceUrl.defaultZone=http://localhost:1000/eureka/eureka.client.register-with-eureka=falseserver.port:端口
spring.application.name:服务名称
eureka.client.serviceUrl.defaultZone:注册中心地址
eureka.client.register-with-eureka:是否注册到注册中心,因为我们这里是编写的消费端,所以不需要。
编写controller远程访问服务提供者提供的方法。
@RestController@RequestMapping("consumer")public class ConsumerController {@Autowiredprivate RestTemplate restTemplate;@GetMapping("getName")public String getName(){return restTemplate.getForObject("http://point-provider/provider/getName", String.class);}}
http://point-provider/provider/getName这里的point-provider即是我们的服务提供者的名称,因为我们部署了两个point-provider实例,所以我们可以依靠ribbon对两个实例进行轮询访问(ribbon默认提供的负载策略为轮询方式,当然也可以改为其它策略)。
访问消费端的方法http://localhost:3000/consumer/getName,访问两次。
可以看到两个实例分别都被调用到了一次,这样我们就实现了在消费者端用ribbon对服务调用的负载均衡。
- springcloud学习笔记二:服务提供、消费与ribbon
- springcloud学习二 Ribbon
- SpringCloud微服务系列(4): 服务发现与消费及客户端负载均衡Ribbon
- SpringCloud 笔记 (二)---- 简单搭建一个服务消费者,实现简单的ribbon负载均衡
- 服务消费(Ribbon)
- (3) Ribbon服务消费
- 《SpringCloud微服务实战》学习笔记之服务消费者Ribbon+RestTemplate
- SpringCloud教程二:服务消费者(rest+ribbon)
- springcloud(三):服务提供与调用
- springcloud(三):服务提供与调用
- springcloud(三):服务提供与调用
- springcloud-服务提供与注册Eureka
- springcloud(三):服务提供与调用
- springcloud(三):服务提供与调用
- springcloud(三):服务提供与调用
- SpringCloud之Ribbon(二)
- springcloud学习笔记一:eureka服务注册与发现
- 分布式SpringCloud服务消费集群
- mybatis数据库配置问题
- 常用的字符编码
- XML 简介
- 自己动手,难以足食
- Android 面试精华题目总结
- springcloud学习笔记二:服务提供、消费与ribbon
- windows下安装Python和在eclipse安装pydev插件以及配置eclipse
- Java入门-面向对象和面向过程
- Linux下网卡eth1如何修改为eth0
- iOS UITextField禁止键盘弹出,同时又实现代理方法的实现方式!
- Java学习笔记(九)
- socket编程(一),实现服务器与客户端简单通信
- 算法题目---不能被继承的类
- Count the string