7天学会使用springcloud(二)

7天学会使用springcloud(二)

app-service

由于app-client端是调用服务消费者的门面,那就是说它只是个做转发的一个代理,那真正提供服务的是service,那client的调用怎么调用消费者的接口呢?

Spring cloud两种服务调用方式

在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。

Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign。在这一篇文章首先讲解下基于ribbon+rest。

ribbon简介

Ribbon is a Inter Process Communication (remote procedure calls) library with built in software load balancers. The primary usage model involves REST calls with various serialization scheme support.

以上是来自官方的摘录介绍,我们来大致翻译一下:

ribboin是网络进程间通讯调用的库,它内置软件负载平衡器。主使用Rest模型调用,包括使用各种序列化方案支持的REST调用。

官网也罗列了以下几大功能:

paste image

负载均衡

容错

支持多协议异步和模型传输

缓存和批量执行(不知道这样翻译准不准确)

ribbon是一个负载均衡客户端,可以很好的控制http和tcp的一些行为。Feign默认集成了ribbon。

ribbon 已经默认实现了这些配置bean:

IClientConfig ribbonClientConfig: DefaultClientConfigImpl

IRule ribbonRule: ZoneAvoidanceRule

IPing ribbonPing: NoOpPing

ServerList ribbonServerList: ConfigurationBasedServerList

ServerListFilter ribbonServerListFilter: ZonePreferenceServerListFilter

ILoadBalancer ribbonLoadBalancer: ZoneAwareLoadBalancer

建立服务消费者

重新新建一个spring-boot工程,取名为:app-service;

在它的pom.xml文件分别引入起步依赖spring-cloud-starter-eureka、spring-cloud-starter-ribbon、spring-boot-starter-web

pom.xml:

application.yml:

支持loadBalance

在service端的Application启动类上加上restTemplate注入:

在配置robbion的负载均衡的时候,发现一个很诡异的事情,通过service就是无法通过service id 去访问client端:

调用的时候一直报连接拒绝:

paste image

经过我反复实验,发现是因为app-client端没有设置访问根目录,则需要在配置文件里server后面加上子项servlet.contextPath = /

bootstrap.xml:

加上后重启app-client,然后通过server id 访问,就通了。。。。

注:有时候app-client重启了还不行,可能还需要重启sever注册中心

再访问就可以了:

paste image

我们来看看他的负载均衡,再新增一台client实例

application.yml:

将service的端口号改成9000

paste image

发现负载均衡起效了。。。。。

下一章节讲下robbin和zull的结合使用。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180502G064FZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券