微服务:整合 Spring cloud Eureka - 服务消费以及Ribbon简单使用

时间:2020-03-24
本文章向大家介绍微服务:整合 Spring cloud Eureka - 服务消费以及Ribbon简单使用,主要包括微服务:整合 Spring cloud Eureka - 服务消费以及Ribbon简单使用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、前言

  前面三篇文章已经介绍如何搭建Eureka注册中心以及服务注册、服务发现。本篇文章将会介绍如何使用Ribbon调用服务,并演示在客户端如何使用负载均衡。

二、Ribbon中RestTemplate的使用

1、代码结构

2、pom.xml

<?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">
    <parent>
        <artifactId>spring-cloud-register</artifactId>
        <groupId>com.demo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>demo-service-consumer</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- eureka-client 服务注册与发现 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!-- eureka-client 服务注册与发现 -->

        <!-- ribbon 负载均衡 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>
        <!-- ribbon 负载均衡 --> 
    </dependencies>
</project>

3、RibbonConfig:

package com.demo.service.consumer.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RibbonConfig {

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

RibbonConfig 类中很简单,只是配置了一个 Ribbon中的RestTemplate,并声明是一个Bean。

4、ConsumerHelloController

package com.demo.service.consumer.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class ConsumerHelloController {

    @Autowired
    RestTemplate restTemplate;

    @RequestMapping("/hello/{name}")
    public String hello(@PathVariable("name")String name){
        String ribbon_url = "http://demo-service-provider/hello/sayhello/" + name;
        String msg =restTemplate.getForEntity(ribbon_url,String.class).getBody();
        System.out.println("服务返回信息为:" + msg);
        return "服务返回信息为:" + msg;
    }
}

三、运行分析 

1、第一步启动Eureka注册中心 - demo-register,可以参考微服务:整合 Spring Cloud Eureka - 注册中心 Eureka Server

2、第二步启动服务提供者 - demo-service-provider,可以参考 《微服务:整合 Spring cloud Eureka - 服务注册 Eureka Client 》 。

3、第三步启动服务消费者  - demo-service-consumer。

4、在浏览器中打开:http://localhost:8201/hello/tom

 服务消费者使用Ribbon-restTemplete调用服务已经成功。

四、总结

    @RequestMapping("/hello/{name}")
    public String hello(@PathVariable("name")String name){
        String ribbon_url = "http://demo-service-provider/hello/sayhello/" + name;
        String msg =restTemplate.getForEntity(ribbon_url,String.class).getBody();
        System.out.println("服务返回信息为:" + msg);
        return "服务返回信息为:" + msg;
    }

  从以上代码可以看出来:

    1、restTemplete调用的url地址为:"http://demo-service-provider/hello/sayhello/" + name。

    2、Ribbon拿到这个地址后,会解析出路由中的ServiceId:demo-service-provider

    3、通过demo-service-provider找到服务提供者的ip:port 列表。

    4、通过ip:port 列表按照负载均衡策略选出一个url地址。

    5、重新拼接url地址,此时才开始真正的调用远程服务:demo-service-provider

原文地址:https://www.cnblogs.com/yansg/p/12535671.html