2019獨角獸企業重金招聘Python工程師標準>>>
摘要: 原創出處:www.bysocket.com 泥瓦匠BYSocket 希望轉載,保留摘要,謝謝!
“真正的進步,不在于學習,而在于反思”
?「Spring Cloud Eureka 入門系列」
Spring Cloud Eureka 入門 (一)服務注冊中心詳解 Spring Cloud Eureka 入門 (二)服務提供者詳解 Spring Cloud Eureka 入門 (三)服務消費者詳解 本文提綱 1. ?springcloud-eureka-sample 工程介紹 2. 運行 springcloud-eureka-client-customer 服務消費者工程 3. 詳解?springcloud-eureka-client-customer 服務消費者工程 一、springcloud-eureka-sample 工程介紹 ? 還是回到Eureka 集群簡單架構圖: ?
第一小節《Spring Cloud Eureka 入門 (一)服務注冊中心詳解》實現了 Eureka Server 作為注冊中心, 第二小節《Spring Cloud Eureka 入門 (二)服務提供者詳解》是 Provider Service B 的案例,實現了 Eureka Cleint 作為服務提供者,包括其服務的注冊和心跳的功能。 本小節,是 Provider Service A 的案例,實現了 Eureka Cleint 作為服務消費者,包括其服務的注冊和心跳的功能,還有其服務發現和通過 Ribbon 進行服務調用的功能。 springcloud-eureka-client-customer? 服務消費者工程,他本身也是一個服務提供者。即具有服務提供功能和服務消費功能。下面去運行該工程二、運行?springcloud-eureka-client-customer 服務消費者工程 運行環境:JDK 7 或 8,Maven 3.0+ 技術棧:Spring Cloud?Dalston.SR1、?spring-cloud-netflix 1.3.1、Spring Boot 1.5.4 自然,我們先得去上一小節《Spring Cloud Eureka 入門 (一)服務注冊中心詳解》 ,把注冊中心工程啟動完畢。 1.?git clone 下載工程?springcloud-learning-example 項目地址見 GitHub -?https://github.com/JeffLi1993/springcloud-learning-example:? ?
git clone https://github.com/JeffLi1993/ ... e.git
?2. Maven 編譯安裝這個工程:
cd springcloud-learning-example
mvn clean install
3. 運行 Eureka 工程?springcloud-eureka-client-customer 啟動?springcloud-eureka-client-customer 工程啟動類 CustomerApplication,啟動服務注冊中心工程。 EurekaServerApplication 類路徑:/springcloud-learning-example/springcloud-eureka-sample/springcloud-eureka-client-customer/src/main/java/org/spring/springcloud/CustomerApplication.java ? 控制臺 Console 看到這類信息,代表啟動成功:
2017-07-12 18:19:21.725 INFO 11314 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_CUSTOMER-SERVICE/10.18.29.64:customer-service:8081: registering service...
2017-07-12 18:19:21.814 INFO 11314 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_CUSTOMER-SERVICE/10.18.29.64:customer-service:8081 - registration status: 204
2017-07-12 18:19:21.916 INFO 11314 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8081 (http)
2017-07-12 18:19:21.918 INFO 11314 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8081
2017-07-12 18:19:21.925 INFO 11314 --- [ main] o.s.springcloud.CustomerApplication : Started CustomerApplication in 17.075 seconds (JVM running for 18.141)
可以看出,注冊了應用名為?CUSTOMER-SERVICE 的應用,該服務提供者的工程端口為 80814. 訪問?Eureka 注冊中心可視化界面 打開瀏覽器,訪問?http://localhost:8888/?,如圖所示: ?
可以看到,服務提供者向服務注冊中心注冊自己的實例,展示了應用名和端口信息等。5.訪問服務消費者案例 打開瀏覽器,訪問?http://localhost:8081/customer,如圖所示:? ? ?
可以看出,下面一句消息 Hello,Provider! ,是服務消費者調用服務提供者獲取的信息。 ?三、詳解?springcloud-eureka-client-customer 服務消費者工程 1.springcloud-eureka-client-customer 工程目錄結構
├── pom.xml
└── src└── main├── java│ └── org│ └── spring│ ├── springcloud│ │ └── CustomerApplication.java│ └── web│ └── CustomerController.java└── resources└── application.yml
ProviderApplication.java?Eureka Discovery Client 啟動類,啟動服務消費者工程,本身也會注冊到注冊中心,也能發現其他服務。 CustomerController.java?服務消費者 HelloWorld 案例 application.yml 配置文件 ?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/ma ... gt%3B<modelVersion>4.0.0</modelVersion><groupId>springcloud</groupId><artifactId>springcloud-eureka-client-customer</artifactId><version>0.0.1-SNAPSHOT</version><name>springcloud-eureka-client-customer :: 服務消費者</name><!-- Spring Boot 啟動父依賴 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.4.RELEASE</version></parent><dependencies><!-- Spring Cloud Netflix Eureka 依賴 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><!-- Spring Boot Test 依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><!-- Spring Cloud Netflix 依賴 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-netflix</artifactId><version>1.3.1.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>
</project>
使用的依賴是 - spring-cloud-netflix 1.3.1 是 Spring Cloud?Dalston.SR1 版本。 -?spring-cloud-starter-eureka Eureka Client 模塊依賴,包含了客戶端 client 的依賴,還有 Ribbon 的依賴,如:org.springframework.cloud:spring-cloud-netflix-eureka-client:1.3.1.RELEASE org.springframework.cloud:spring-cloud-starter-ribbon:1.3.1.RELEASE ?3. application.yml 配置
server:port: 8081 # 服務端口
eureka:client:service-url:defaultZone: http://localhost:8888/eureka/ # 服務注冊中心地址
spring:application:name: customer-service # 服務名稱
- server.port 設置工程服務端口
- eureka.client.service-url.defaultZone 設置服務注冊中心地址
4.服務消費者應用啟動類
/*** Spring Boot Eureka Server 應用啟動類** Created by bysocket on 21/06/17.*/
@EnableDiscoveryClient // Eureka Discovery Client 標識
@SpringBootApplication // Spring Boot 應用標識
public class CustomerApplication {@Bean@LoadBalancedRestTemplate restTemplate() {return new RestTemplate();}public static void main(String args) {// 程序啟動入口// 啟動嵌入式的 Tomcat 并初始化 Spring 環境及其各 Spring 組件SpringApplication.run(CustomerApplication.class,args);}
}
@EnableDiscoveryClient 標志該應用作為?Eureka Client ,并會自動化讀取 Eureka 相關配置。還有向服務注冊中心發現服務并進行調用。 @LoadBalanced 標志著 RestTemplate 是通過?Ribbon 客戶端負載均衡去調用服務提供者集群的。即可以在獲取的服務提供者實例列表中,通過 Ribbon 進行選擇某實例,然后調用該服務實例。6.服務消費者 Hello World 案例
/*** Customer HelloWorld 案例* <p>* Created by bysocket on 06/22/17.*/
@RestController
public class CustomerController {private static final Logger LOGGER = LoggerFactory.getLogger(CustomerController.class);@Autowiredprivate RestTemplate restTemplate; // HTTP 訪問操作類@RequestMapping("/customer")public String customer() {String providerMsg = restTemplate.getForEntity("http://PROVIDER-SERVICE/provider",String.class).getBody();return "Hello,Customer! msg from provider : <br/><br/> " + providerMsg;}
}
可以看到注入了?RestTemplate 對象,它是 HTTP 訪問操作類。 然后?customer 方法,通過 restTemplate 通過 HTTP 協議調用服務提供者暴露的?provider 接口,并獲取服務提供者的結果。然后組裝輸出。四、小結 此小章節介紹了如何 Eureka 作為服務消費者,并向服務注冊中心注冊自己實例,更重要的是發現其他服務,并調用其他服務。? 這是 Spring Cloud Eureka 入門系列完結:
Spring Cloud Eureka 入門 (一)服務注冊中心詳解 Spring Cloud Eureka 入門 (二)服務提供者詳解 Spring Cloud Eureka 入門 (三)服務消費者詳解 推薦:springcloud-learning-example?開源項目?https://github.com/JeffLi1993/ ... e.git 資料: 《Spring Cloud微服務實戰》
轉載于:https://my.oschina.net/jeffli1993/blog/1438913
總結
以上是生活随笔 為你收集整理的Spring Cloud Eureka 入门 (三)服务消费者详解 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。