springcloud Ribbon学习笔记二

之前介绍了如何搭建eureka服务并开发了一个用户服务成功注册到了eureka中,接下来介绍如何通过ribbon来从eureka中获取用户服务;

springcloud ribbon提供客户端的负载均衡算法,首先会从eureka中获取服务列表然后通过负载均衡的算法去调用指定的服务;接下来将开发一个登录的微服务通过整合ribbon来调用用户服务

关键代码如下:

pom.xml:

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- 导入Eureka服务的依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.9.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>

        <!--<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>-->
    </dependencies>
    <!-- 导入Spring Cloud的依赖管理 -->
    <dependencyManagement>

        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Edgware.SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>

    </dependencyManagement>

 application.properties:

server.port=8080
#应用名称
spring.application.name=loginServer

# 是否需要将自己注册到注册中心中,默认值true
eureka.client.registerWithEureka=false

# 是否从注册中心中获取注册信息,默认值true
eureka.client.fetchRegistry=true

# 客户端和服务端进行交互的地址
eureka.client.serviceUrl.defaultZone= http://127.0.0.1:7070/eureka/, http://127.0.0.1:7071/eureka/

#将自己的ip地址注册到Eureka服务中
eureka.instance.prefer-ip-address=true

启动类:

package com.darling.login;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.context.annotation.Bean;
import org.springframework.http.client.OkHttp3ClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
//@EnableFeignClients
//@EnableHystrix
@EnableDiscoveryClient
@SpringBootApplication
public class LoginApplication {

    @Bean
    @LoadBalanced  // 表示使用负载均衡算法
    public RestTemplate getRestTemplate(){
        return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
    }

    public static void main(String[] args) {
        SpringApplication.run(LoginApplication.class, args);
    }
}

下面列举下上述代码的关键:

  1、pom中引入okhttp的依赖,当然也可以引入别的Http-client的依赖

  2、application中eureka.client.fetchRegistry=true表示从eureka中获取注册信息;eureka.client.serviceUrl.defaultZone的值填入我们之前开发好的两个eureka服务的地址

  3、启动类加@EnableDiscoveryClient注解表示自己是eureka的客户端

  4、最关键的,启动类中记得配置restTemplate,当然也可以通过@Configuration注解重新开发一个类进行配置

上面的都实现了基本算是成功整合了ribbon了,下面看看如何进行调用,贴上调用用户服务的关键代码:

  @Autowired
    private RestTemplate restTemplate;

    public User checkUser(String name,String pwd){
        String serviceId = "USERSERVER"; // 关键,通过服务名调用而不是ip,因为我们有两个eureka服务
        User user = restTemplate.getForObject("http://"+serviceId+"/user/"+name,User.class);
        if(user != null) {
            if(pwd.equals(user.getPwd())) {
                return user;
            }
        }
        return null;
    }

至此,springcloud的eureka、ribbon的入门级demo算是学习完毕了,希望日后工作中能够用到!

原文地址:https://www.cnblogs.com/darling2047/p/9528020.html