个人网站设计 优帮云,互联网保险发展历程,百度网址ip,泰安房产网新楼盘在上一篇《Spring Cloud构建微服务架构#xff08;一#xff09;服务注册与发现》中#xff0c;我们已经成功创建了“服务注册中心”#xff0c;实现并注册了一个“服务提供者#xff1a;COMPUTE-SERVICE”。那么我们要如何去消费服务提供者的接口内容呢#xff1f; 
Rib…在上一篇《Spring Cloud构建微服务架构一服务注册与发现》中我们已经成功创建了“服务注册中心”实现并注册了一个“服务提供者COMPUTE-SERVICE”。那么我们要如何去消费服务提供者的接口内容呢 
Ribbon 
Ribbon是一个基于HTTP和TCP客户端的负载均衡器。Feign中也使用Ribbon后续会介绍Feign的使用。 
Ribbon可以在通过客户端中配置的ribbonServerList服务端列表去轮询访问以达到均衡负载的作用。 
当Ribbon与Eureka联合使用时ribbonServerList会被DiscoveryEnabledNIWSServerList重写扩展成从Eureka注册中心中获取服务端列表。同时它也会用NIWSDiscoveryPing来取代IPing它将职责委托给Eureka来确定服务端是否已经启动。 
下面我们通过实例看看如何使用Ribbon来调用服务并实现客户端的均衡负载。 
准备工作 
启动Chapter-9-1-1中的服务注册中心eureka-server启动Chapter-9-1-1中的服务提供方compute-service修改compute-service中的server-port为2223再启动一个服务提供方compute-service
此时访问http://localhost:1111/ 可以看到COMPUTE-SERVICE服务有两个单元正在运行 
192.168.21.101:compute-service:2222 192.168.21.101:compute-service:2223
使用Ribbon实现客户端负载均衡的消费者 
构建一个基本Spring Boot项目并在pom.xml中加入如下内容 
parent    groupIdorg.springframework.boot/groupId    artifactIdspring-boot-starter-parent/artifactId    version1.3.5.RELEASE/version    relativePath/ !-- lookup parent from repository --/parentdependencies    dependency        groupIdorg.springframework.cloud/groupId        artifactIdspring-cloud-starter-ribbon/artifactId    /dependency    dependency        groupIdorg.springframework.cloud/groupId        artifactIdspring-cloud-starter-eureka/artifactId    /dependency    dependency        groupIdorg.springframework.boot/groupId        artifactIdspring-boot-starter-web/artifactId    /dependency    dependency        groupIdorg.springframework.boot/groupId        artifactIdspring-boot-starter-test/artifactId        scopetest/scope    /dependency/dependenciesdependencyManagement    dependencies        dependency	    groupIdorg.springframework.cloud/groupId	    artifactIdspring-cloud-dependencies/artifactId	    versionBrixton.RELEASE/version	    typepom/type	    scopeimport/scope	/dependency    /dependencies/dependencyManagement在应用主类中通过EnableDiscoveryClient注解来添加发现服务能力。创建RestTemplate实例并通过LoadBalanced注解开启均衡负载能力。 
SpringBootApplicationEnableDiscoveryClientpublic class RibbonApplication {	Bean	LoadBalanced	RestTemplate restTemplate() {		return new RestTemplate();	}	public static void main(String[] args) {		SpringApplication.run(RibbonApplication.class, args);	}}创建ConsumerController来消费COMPUTE-SERVICE的add服务。通过直接RestTemplate来调用服务计算10  20的值。 
RestControllerpublic class ConsumerController {    Autowired    RestTemplate restTemplate;    RequestMapping(value  /add, method  RequestMethod.GET)    public String add() {        return restTemplate.getForEntity(http://COMPUTE-SERVICE/add?a10b20, String.class).getBody();    }}application.properties中配置eureka服务注册中心 
spring.application.nameribbon-consumerserver.port3333eureka.client.serviceUrl.defaultZonehttp://localhost:1111/eureka/启动该应用并访问两次http://localhost:3333/add 
然后打开compute-service的两个服务提供方分别输出了类似下面的日志内容 
端口为2222服务提供端的日志
2016-06-02 11:16:26.787  INFO 90014 --- [io-2222-exec-10] com.didispace.web.ComputeController      : /add, host:192.168.21.101, service_id:compute-service, result:30端口为2223服务提供端的日志
2016-06-02 11:19:41.241  INFO 90122 --- [nio-2223-exec-1] com.didispace.web.ComputeController      : /add, host:192.168.21.101, service_id:compute-service, result:30可以看到之前启动的两个compute-service服务端分别被调用了一次。到这里我们已经通过Ribbon在客户端已经实现了对服务调用的均衡负载。 
完整示例可参考Chapter9-1-2/eureka-ribbon 
Feign 
Feign是一个声明式的Web Service客户端它使得编写Web Serivce客户端变得更加简单。我们只需要使用Feign来创建一个接口并用注解来配置它既可完成。它具备可插拔的注解支持包括Feign注解和JAX-RS注解。Feign也支持可插拔的编码器和解码器。Spring Cloud为Feign增加了对Spring MVC注解的支持还整合了Ribbon和Eureka来提供均衡负载的HTTP客户端实现。 
下面通过一个例子来展现Feign如何方便的声明对上述computer-service服务的定义和调用。 
创建一个Spring Boot工程配置pom.xml将上述的配置中的ribbon依赖替换成feign的依赖即可具体如下 
parent    groupIdorg.springframework.boot/groupId    artifactIdspring-boot-starter-parent/artifactId    version1.3.5.RELEASE/version    relativePath/ !-- lookup parent from repository --/parentdependencies    dependency        groupIdorg.springframework.cloud/groupId        artifactIdspring-cloud-starter-feign/artifactId    /dependency    dependency        groupIdorg.springframework.cloud/groupId        artifactIdspring-cloud-starter-eureka/artifactId    /dependency    dependency        groupIdorg.springframework.boot/groupId        artifactIdspring-boot-starter-web/artifactId    /dependency    dependency        groupIdorg.springframework.boot/groupId        artifactIdspring-boot-starter-test/artifactId        scopetest/scope    /dependency/dependenciesdependencyManagement    dependencies        dependency	    groupIdorg.springframework.cloud/groupId	    artifactIdspring-cloud-dependencies/artifactId	    versionBrixton.RELEASE/version	    typepom/type	    scopeimport/scope	/dependency    /dependencies/dependencyManagement在应用主类中通过EnableFeignClients注解开启Feign功能具体如下 
SpringBootApplicationEnableDiscoveryClientEnableFeignClientspublic class FeignApplication {	public static void main(String[] args) {		SpringApplication.run(FeignApplication.class, args);	}}定义compute-service服务的接口具体如下 
FeignClient(compute-service)public interface ComputeClient {    RequestMapping(method  RequestMethod.GET, value  /add)    Integer add(RequestParam(value  a) Integer a, RequestParam(value  b) Integer b);}使用FeignClient(compute-service)注解来绑定该接口对应compute-service服务通过Spring MVC的注解来配置compute-service服务下的具体实现。
在web层中调用上面定义的ComputeClient具体如下 
RestControllerpublic class ConsumerController {    Autowired    ComputeClient computeClient;    RequestMapping(value  /add, method  RequestMethod.GET)    public Integer add() {        return computeClient.add(10, 20);    }}application.properties中不用变指定eureka服务注册中心即可如 
spring.application.namefeign-consumerserver.port3333eureka.client.serviceUrl.defaultZonehttp://localhost:1111/eureka/启动该应用访问几次http://localhost:3333/add 
再观察日志可以得到之前使用Ribbon时一样的结果对服务提供方实现了均衡负载。 
这一节我们通过Feign以接口和注解配置的方式轻松实现了对compute-service服务的绑定这样我们就可以在本地应用中像本地服务一下的调用它并且做到了客户端均衡负载。 
完整示例可参考Chapter9-1-2/eureka-feign 
【转载请注明出处】http://blog.didispace.com/springcloud2/