springcloud之ribbon小栗子

写在前面

本文在这篇博文基础上继续进行分析。这里我们需要增加一个新的maven模块my-service-ribbon,从my-enreka-server拉取服务注册信息,然后以负载均衡的方式调用myeureka-client的接口。源码在这里

1:创建my-service-ribbon

1.1:创建项目

new->module,选择Spring Inilializr以及java8,然后next,录入gav等信息,创建完成后如下图:
在这里插入图片描述

1.2:设置parent

<parent>
  <groupId>dongshi.daddy</groupId>
  <artifactId>my-eureka</artifactId>
  <version>1.0-SNAPSHOT</version>
  <relativePath/> <!-- lookup parent from repository -->
</parent>

1.3:引入依赖

<dependencies>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
  </dependency>
</dependencies>

1.4:完整pom

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>dongshi.daddy</groupId>
  <artifactId>my-service-ribbon</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>my-service-ribbon</name>
  <description>Demo project for Spring Boot</description>

  <parent>
    <groupId>dongshi.daddy</groupId>
    <artifactId>my-eureka</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <properties>
    <java.version>1.8</java.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>

1.5:配置文件

server:
  port: 8764

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

spring:
  application:
    name: dongshidaddy-first-ribbon

除了端口号外,使用eureka.client.serviceUrl.defaultZone设置eureka服务端的地址,从而将自己注册上去,使用spring.application.name设置自己的名称,该名称会显示在eureka的注册信息中。

1.6:启用相关注解

@EnableEurekaClient
@EnableDiscoveryClient

注解@EnableEurekaClient启用自己作为eureka的客户端,并向eureka的服务端注册。注解@EnableDiscoveryClient启用发现者客户端,从eureka服务端读取所有eureka客户端的注册信息。然后注册RestTemplate的bean到IOC容器中,并通过@LoadBanlanced注解赋予其使用ribbon进行负载均衡的能力,源码如下:

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

完整代码如下:

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class MyServiceRibbonApplication {
    
    

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

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

}

1.7:配置service

@Service
public class HelloService {
    
    

    @Autowired
    RestTemplate restTemplate;

    public String hiService(String name) {
    
    
        return restTemplate.getForObject("http://DONGSHIDADDY-FIRST-EUREKA-CLIENT/hi?name="+name,String.class);
    }
}

需要注意DONGSHIDADDY-FIRST-EUREKA-CLIENT是我的myeureka-client模块的服务名,要换成你自己的!!!。

1.8:配置controller

@RestController
public class HelloControler {
    
    

    @Autowired
    HelloService helloService;

    @GetMapping(value = "/hi")
    public String hi(@RequestParam String name) {
    
    
        return helloService.hiService( name );
    }
}

2:测试

2.1:启动my-enreka-server

该服务是eureka的服务端,作为服务的注册中心使用,端口号是8761

2.2:启动myeureka-client第1个实例

修改配置文件设置端口号为8762,然后启动。

2.3:启动myeureka-client第2个实例

修改端口号为8763。注意不能直接启动,需要在Edit Configurations下添加一个springboot的程序,然后设置名称和主函数,如下图:
在这里插入图片描述
启动成功后,查看http://localhost:8761/可以看到myeureka-client的实例注册了两个,端口号分别为8762,8763
在这里插入图片描述

2.4:启动my-service-ribbon

启动后可以在eureka服务端看到注册的信息,如下图:
在这里插入图片描述

2.5:访问接口

如下重复访问,可以在myeureka-client的两个实例中进行负载调用:

C:\Users\cj>curl http://localhost:8764/hi?name=dongshidaddy
hi dongshidaddy ,i am from port:8763
C:\Users\cj>curl http://localhost:8764/hi?name=dongshidaddy
hi dongshidaddy ,i am from port:8762
C:\Users\cj>curl http://localhost:8764/hi?name=dongshidaddy
hi dongshidaddy ,i am from port:8763
C:\Users\cj>curl http://localhost:8764/hi?name=dongshidaddy
hi dongshidaddy ,i am from port:8762

3:项目架构

此时系统中有1个eureka的服务端,端口号为8761,2个eureka客户端,分别是myeureka-client,my-service-ribbon,其中myeureka-client启动2个实例,端口号分别是87628763,my-service-ribbon调用myeureka-client提供的服务,最终结构如下图:
在这里插入图片描述
注意图中的菱形组件ribbon,因为内部负载实际使用的就是ribbon,所以这里换成ribbon来表示,另外其应该是在my-service-riibon内部的,这里为了强调单摘出来说明。

最后:都让开,我要喝瑞幸

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wang0907/article/details/109241299
今日推荐