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,多次刷新該地址
紅框處,可以看到【服務消費者】成功調用了【服務提供者】提供的服務,並實現了負載均衡,輪詢請求不同的【服務提供者】。
至此,一個簡單的單點【服務消費者】搭建完成。