SpringCould 服务提供者与消费者

服务调用方式

  • 第一种方式:ribbon+restTemplate
  • 第二种方式:feign(默认集成ribbon)

ribbon是一个负载均衡客户端,可以很好的控制htt和tcp的一些行为。

建立服务提供者

  1. eurekaclient添加一个HelloControl接口类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @RestController
    public class HelloControl {

    @Value("${server.port}")
    String port;

    @RequestMapping("/hi")
    public String home(@RequestParam String name) {
    return "hi "+name+",i am from port:" +port;
    }
    }
  2. 启动两个eurekaclient配置vm启动参数-Dserver.port=8098端口分布为8099和8098。

建立服务消费者

  1. 新建springboot项目勾选如下

    • web->web
    • Could discovery-> eureka server
    • Could routing->ribbon
  2. RibbonrestApplication启动类添加注解@EnableEurekaClient

  3. Application.yml配置文件添加内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    server:
    port: 8093
    spring:
    application:
    name: ribbon-client
    eureka:
    client:
    service-url:
    defaultZone: http://127.0.0.1:8091/eureka/ #注意要加eureka,不然找不到
  4. RibbonrestApplication启动类添加负载均衡

    1
    2
    3
    4
    5
    @Bean  //spring ioc bean 依赖注入知识点(待补充)
    @LoadBalanced //负载均衡
    RestTemplate restTemplate(){
    return new RestTemplate();
    }
  5. 新建HelloService类消费服务

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Service
    public class HelloService {
    @Autowired
    RestTemplate restTemplate;

    public String hiService(String name){
    //eureka-client为服务提供者的spring.application.name=eureka-client
    return restTemplate.getForObject("http://eureka-client/hi?name="+name,String.class); //该url为服务提供者提供的接口
    }
    }
  6. 调用HelloService的服务,新建一个HelloControler

    1
    2
    3
    4
    5
    6
    7
    8
    9
    @RestController
    public class HelloControler {
    @Autowired
    HelloService helloService;
    @RequestMapping(value = "/resthi") //访问入口
    public String hi(@RequestParam String name){
    return helloService.hiService(name); //调用消费服务
    }
    }
  7. 访问http://127.0.0.1:8093/resthi?name=32这个服务消费者提供的接口,不停刷新可以看到端口的变化,就说明了负载均衡起作用了。

总结图示

1
2
3
4
5
6
Note left of eurekaClient8099/8098: 服务提供者(n个)
Note left of eurekaService8091: 服务注册中心
Note left of ribbonClient8093: 服务消费者
eurekaClient8099/8098-->eurekaService8091: 注册
ribbonClient8093-->eurekaService8091: 注册
ribbonClient8093-->eurekaClient8099/8098: 通过ribbon负载均衡调用服务8099/8098

参考

史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)

使用Spring Cloud与Docker实战微服务