springcloud-框架搭建(一)(基于Ribbon+RestTemplate,有源码下载)

6 篇文章 0 订阅
5 篇文章 0 订阅

前言

      Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。    spring-        cloud调用服务有两种方式,一种是Ribbon+RestTemplate, 另外一种是Feign。
本文是基于 Ribbon+RestTemplate

开始前首先解释下什么是ribbon、RestTemplate

   Ribbon是一个为客户端提供负载均衡功能的服务,它内部提供了一个叫做ILoadBalance的接口代表负载均衡器的操作,比如有添加服务器操作、选择服务器操作、获取所有的服务器列表、获取可用的服务器列表等等。

  RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率

一、新建三个工程

1、建立  eureka-server 工程,   这个工程用于服务注册用,

工程结构

配制文件application.yml
server:
  port: 8000
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
     defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

2、建立服务生产者,用于提供服务

工程结构

 生产者的controller

@RestController
public class ServiceController {
    @Value("${server.port}")
    String port;

    @RequestMapping("/service/hi")
    public String home(@RequestParam String name)
    {
        return "hi " + name + ",i am from port:" + port;
    }
}

配制文件application.yml

server:
  port: 8003
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8000/eureka/
spring:
  application:
    name: product-service


  3、建立服务消费者工程

 工程结构

service服务

package com.test.consumer.server;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class HelloService {
    @Autowired
    RestTemplate restTemplate;

    /**
     * @HystrixCommand 表示熔断器,一般服务生产者无法响应时,服务调用者会自调用 fallbackMethod
     * 中的方法并返回,如下方法 hiError
     * @param name
     * @return
     */
    @HystrixCommand(fallbackMethod="hiError")
    public String hiService(String name)
    {
        //参数里url中的"PRODUCT-SERVICE"就是服务生产者的应用名,配制在application.yml中,
        // 如 spring:application:name: product-service,这个名称与生产者的服务端口无关
        return restTemplate.getForObject("http://PRODUCT-SERVICE/service/hi?name=" + name, String.class);
    }

    public String hiError(String name){
        return "this is happend error==name :" + name;
    }
}

controller

@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class,args);
    }

    @Bean
    @LoadBalanced
    RestTemplate restTemplate()
    {
        return new RestTemplate();
    }
}

 

二、部署并启动

   1、启动eureka,接受服务注册

     访问 http://localhost:8000/ 效果如下,说明启动成功

 

2、启动三个服务生产者

   

server:
  port: 8001
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8000/eureka/  ## 注册服务到eureka里去
spring:
  application:
    name: product-service

上面是服务生产者的application.yml,修改server.port的值为,8001、8002、8003,并分别打三个jar包,结果保证有三个服务生产者,端口分别是8001、8002、8003,

我这里三个jar的分名字为 product-server-1-1.0.jar、product-server-2-1.0.jar、product-server-3-1.0.jar,然后分别启动三个包,

此刻刷新注册中心 eureka结果如下

说明三个服务生产者已经成功注册到eureka中

3、启动服务消费者,刷新下eureka应用结果如下,

consumer-service也成功注册了

 

4、访问消费者地址 http://localhost:8020/consumer/hi?name=2323 ,看是否成功返回且负载均衡也生效

   访问三次,结果分别如下

hi 2323,i am from port:8001

hi 2323,i am from port:8003

hi 2323,i am from port:8003

 

至此我们的一个简单的基于Ribbon+RestTemplate的springcloud框架已经搭建完成

 

 

总结下

我们总共三个应用,一个注册中心用来注册服务,一个服务生产者,一个服务消费者,服务消费者通过Ribbon+RestTemplate的方式访问生产者,

源码如下

https://gitee.com/xing_xin/springclouddemo-1.git

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值