Spring Cloud Eureka 入門(mén)之服務(wù)消費(fèi)者詳解
本文提綱
1. springcloud-eureka-sample 工程介紹
2. 運(yùn)行 springcloud-eureka-client-customer 服務(wù)消費(fèi)者工程
3. 詳解 springcloud-eureka-client-customer 服務(wù)消費(fèi)者工程
一、springcloud-eureka-sample 工程介紹
還是回到Eureka 集群簡(jiǎn)單架構(gòu)圖:
***小節(jié)《Spring Cloud Eureka 入門(mén)之服務(wù)注冊(cè)中心詳解 ...》實(shí)現(xiàn)了 Eureka Server 作為注冊(cè)中心,
第二小節(jié)《Spring Cloud Eureka 入門(mén) (二)服務(wù)提供者詳解》是 Provider Service B 的案例,實(shí)現(xiàn)了 Eureka Cleint 作為服務(wù)提供者,包括其服務(wù)的注冊(cè)和心跳的功能。
本小節(jié),是 Provider Service A 的案例,實(shí)現(xiàn)了 Eureka Cleint 作為服務(wù)消費(fèi)者,包括其服務(wù)的注冊(cè)和心跳的功能,還有其服務(wù)發(fā)現(xiàn)和通過(guò) Ribbon 進(jìn)行服務(wù)調(diào)用的功能。
springcloud-eureka-client-customer 服務(wù)消費(fèi)者工程,他本身也是一個(gè)服務(wù)提供者。即具有服務(wù)提供功能和服務(wù)消費(fèi)功能。下面去運(yùn)行該工程
二、運(yùn)行 springcloud-eureka-client-customer 服務(wù)消費(fèi)者工程
運(yùn)行環(huán)境:JDK 7 或 8,Maven 3.0+
技術(shù)棧:Spring Cloud Dalston.SR1、 spring-cloud-netflix 1.3.1、Spring Boot 1.5.4
自然,我們先得去上一小節(jié)《Spring Cloud Eureka 入門(mén) (一)服務(wù)注冊(cè)中心詳解》 ,把注冊(cè)中心工程啟動(dòng)完畢。
1. git clone 下載工程 springcloud-learning-example
項(xiàng)目地址見(jiàn) GitHub - https://github.com/JeffLi1993/springcloud-learning-example:
- git clone https://github.com/JeffLi1993/springcloud-learning-example.git
2. Maven 編譯安裝這個(gè)工程:
- cd springcloud-learning-example
- mvn clean install
3. 運(yùn)行 Eureka 工程 springcloud-eureka-client-customer
啟動(dòng) springcloud-eureka-client-customer 工程啟動(dòng)類(lèi) CustomerApplication,啟動(dòng)服務(wù)注冊(cè)中心工程。
EurekaServerApplication 類(lèi)路徑:/springcloud-learning-example/springcloud-eureka-sample/springcloud-eureka-client-customer/src/main/java/org/spring/springcloud/CustomerApplication.java
控制臺(tái) Console 看到這類(lèi)信息,代表啟動(dòng)成功:
- 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:
- 2042017-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)
可以看出,注冊(cè)了應(yīng)用名為 CUSTOMER-SERVICE 的應(yīng)用,該服務(wù)提供者的工程端口為 8081
4. 訪問(wèn) Eureka 注冊(cè)中心可視化界面
打開(kāi)瀏覽器,訪問(wèn) http://localhost:8888/ ,如圖所示:
可以看到,服務(wù)提供者向服務(wù)注冊(cè)中心注冊(cè)自己的實(shí)例,展示了應(yīng)用名和端口信息等。
5.訪問(wèn)服務(wù)消費(fèi)者案例
打開(kāi)瀏覽器,訪問(wèn) http://localhost:8081/customer,如圖所示:
可以看出,下面一句消息 Hello,Provider! ,是服務(wù)消費(fèi)者調(diào)用服務(wù)提供者獲取的信息。
三、詳解 springcloud-eureka-client-customer 服務(wù)消費(fèi)者工程
1.springcloud-eureka-client-customer 工程目錄結(jié)構(gòu)
- ├── pom.xml└── src
- └── main
- ├── java
- │ └── org
- │ └── spring
- │ ├── springcloud
- │ │ └── CustomerApplication.java
- │ └── web
- │ └── CustomerController.java
- └── resources
- └── application.yml
ProviderApplication.java Eureka Discovery Client 啟動(dòng)類(lèi),啟動(dòng)服務(wù)消費(fèi)者工程,本身也會(huì)注冊(cè)到注冊(cè)中心,也能發(fā)現(xiàn)其他服務(wù)。
CustomerController.java 服務(wù)消費(fèi)者 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 :: 服務(wù)消費(fèi)者</name>
- <!-- Spring Boot 啟動(dòng)父依賴 -->
- <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 # 服務(wù)端口
- eureka:
- client:
- service-url:
- defaultZone: http://localhost:8888/eureka/ # 服務(wù)注冊(cè)中心地址
- spring:
- application:
- name: customer-service # 服務(wù)名稱(chēng)
- - server.port 設(shè)置工程服務(wù)端口
- - eureka.client.service-url.defaultZone 設(shè)置服務(wù)注冊(cè)中心地址
4.服務(wù)消費(fèi)者應(yīng)用啟動(dòng)類(lèi)
- /**
- * Spring Boot Eureka Server 應(yīng)用啟動(dòng)類(lèi)
- *
- * Created by bysocket on 21/06/17.
- */
- @EnableDiscoveryClient // Eureka Discovery Client 標(biāo)識(shí)
- @SpringBootApplication // Spring Boot 應(yīng)用標(biāo)識(shí)
- public class CustomerApplication {
- @Bean
- @LoadBalanced
- RestTemplate restTemplate() {
- return new RestTemplate();
- }
- public static void main(String args) {
- // 程序啟動(dòng)入口
- // 啟動(dòng)嵌入式的 Tomcat 并初始化 Spring 環(huán)境及其各 Spring 組件
- SpringApplication.run(CustomerApplication.class,args);
- }
- }
@EnableDiscoveryClient 標(biāo)志該應(yīng)用作為 Eureka Client ,并會(huì)自動(dòng)化讀取 Eureka 相關(guān)配置。還有向服務(wù)注冊(cè)中心發(fā)現(xiàn)服務(wù)并進(jìn)行調(diào)用。
@LoadBalanced 標(biāo)志著 RestTemplate 是通過(guò) Ribbon 客戶端負(fù)載均衡去調(diào)用服務(wù)提供者集群的。即可以在獲取的服務(wù)提供者實(shí)例列表中,通過(guò) Ribbon 進(jìn)行選擇某實(shí)例,然后調(diào)用該服務(wù)實(shí)例。
6.服務(wù)消費(fèi)者 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);
- @Autowired
- private RestTemplate restTemplate; // HTTP 訪問(wèn)操作類(lèi)
- @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 對(duì)象,它是 HTTP 訪問(wèn)操作類(lèi)。
然后 customer 方法,通過(guò) restTemplate 通過(guò) HTTP 協(xié)議調(diào)用服務(wù)提供者暴露的 provider 接口,并獲取服務(wù)提供者的結(jié)果。然后組裝輸出。
四、小結(jié)
此小章節(jié)介紹了如何 Eureka 作為服務(wù)消費(fèi)者,并向服務(wù)注冊(cè)中心注冊(cè)自己實(shí)例,更重要的是發(fā)現(xiàn)其他服務(wù),并調(diào)用其他服務(wù)。
【本文為51CTO專(zhuān)欄作者“李強(qiáng)強(qiáng)”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)51CTO聯(lián)系作者獲取授權(quán)】