1、啟動【服務中心】集群,即 Eureka Server
2、啟動【服務提供者】集群,即 Eureka Client
3、創建【服務消費者】,即 Eureka Discovery Client
3.1、新建 Spring Boot 工程 springcloud-eureka-ribbon
3.2、工程pom.xml文件添加如下依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>
3.3、在工程啟動類中,添加注解 @EnableDiscoveryClient
package com.miniooc.eurekaribbon;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* EurekaRibbonApplication
* 應用程序啟動類,程序入口
*
* @author 宋陸
* @version 1.0.0
*/
@EnableDiscoveryClient // 啟用 Eureka 服務發現 相關配置
@SpringBootApplication
public class EurekaRibbonApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaRibbonApplication.class, args);
}
}
3.4、創建應用配置類 EurekaRibbonConfig
package com.miniooc.eurekaribbon.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;
/**
* EurekaRibbonConfig
* 應用配置類,初始化 Bean和配置信息
*
* @author 宋陸
* @version 1.0.0
*/
@Configuration
public class EurekaRibbonConfig {
@Bean // 初始化 Bean
@LoadBalanced // 實現負載均衡
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
3.5、創建【服務消費者】服務類 EurekaRibbonService
package com.miniooc.eurekaribbon.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
/**
* EurekaRibbonService
* 服務消費者服務類,調用服務提供者提供的服務,實現業務
*
* @author 宋陸
* @version 1.0.0
*/
@Service
public class EurekaRibbonService {
@Autowired
RestTemplate restTemplate;
public String getInfo() {
String message;
try {
System.out.println("調用 服務 EUREKA-CLIENT/info");
message = restTemplate.getForObject("http://EUREKA-CLIENT/info", String.class);
System.out.println("服務 EUREKA-CLIENT/info 返回信息 : " + message);
System.out.println("調用 服務 EUREKA-CLIENT/info 成功!");
} catch (Exception ex) {
message = ex.getMessage();
}
return message;
}
}
3.6、創建【服務消費者】控制器類 EurekaRibbonController
package com.miniooc.eurekaribbon.controller;
import com.miniooc.eurekaribbon.service.EurekaRibbonService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* EurekaRibbonController
* 服務消費者控制器類,對用戶提供服務
*
* @author 宋陸
* @version 1.0.0
*/
@RestController
public class EurekaRibbonController {
@Resource
private EurekaRibbonService eurekaRibbonService;
@RequestMapping("/ribbonInfo")
public String ribbonInfo() {
String message = eurekaRibbonService.getInfo();
return "獲取的信息:" + message;
}
}
3.7、創建工程配置文件application.yml,配置內容:
server:
port: 52610
spring:
application:
name: eureka-discovery-ribbon
eureka:
instance:
hostname: localhost
# 表示eureka client間隔多久去拉取服務注冊信息,默認為30秒,如果要迅速獲取服務注冊狀態,可以縮小該值
lease-renewal-interval-in-seconds: 5
# 表示eureka server至上一次收到client的心跳之后,等待下一次心跳的超時時間,在這個時間內若沒收到下一次心跳,則將移除該instance。
# 默認為90秒
# 如果該值太大,則很可能將流量轉發過去的時候,該instance已經不存活了。
# 如果該值設置太小了,則instance則很可能因為臨時的網絡抖動而被摘除掉。
# 該值至少應該大於 leaseRenewalIntervalInSeconds
lease-expiration-duration-in-seconds: 10
client:
serviceUrl:
defaultZone: http://localhost:9527/eureka/,http://localhost:9528/eureka/,http://localhost:9529/eureka/
3.8、啟動【服務消費者】工程
3.9、打開瀏覽器,訪問【服務中心】前台界面 http://localhost:9527,http://localhost:9528,http://localhost:9529

紅框處,可以看到【服務消費者】已經注冊到了【服務中心】,服務名 EUREKA-DISCOVERY-RIBBON
3.10、開瀏覽器窗口,訪問 http://localhost:52610/ribbonInfo,多次刷新該地址



紅框處,可以看到【服務消費者】成功調用了【服務提供者】提供的服務,並實現了負載均衡,輪詢請求不同的【服務提供者】。
至此,一個簡單的單點【服務消費者】搭建完成。
