1. 程式人生 > >Spring Cloud Eureka 入門 (三)服務消費者詳解

Spring Cloud Eureka 入門 (三)服務消費者詳解

摘要: 原創出處:www.bysocket.com 泥瓦匠BYSocket 希望轉載,保留摘要,謝謝!


“真正的進步,不在於學習,而在於反思”


 
「Spring Cloud Eureka 入門系列」

本文提綱
1.  springcloud-eureka-sample 工程介紹
2. 執行 springcloud-eureka-client-customer 服務消費者工程
3. 詳解 springcloud-eureka-client-customer 服務消費者工程


一、springcloud-eureka-sample 工程介紹
 
還是回到Eureka 叢集簡單架構圖:

7c852379823bcb6ccc32ec474f4a5794.jpeg

第一小節《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: 
 
 
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 的應用,該服務提供者的工程埠為 8081

4. 訪問 Eureka 註冊中心視覺化介面
開啟瀏覽器,訪問 http://localhost:8888/ ,如圖所示:

WX20170712-182332.png

可以看到,服務提供者向服務註冊中心註冊自己的例項,展示了應用名和埠資訊等。
5.訪問服務消費者案例
開啟瀏覽器,訪問 http://localhost:8081/customer,如圖所示: 
 

WX20170712-182628.png

可以看出,下面一句訊息 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.0http://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
    @LoadBalanced
    RestTemplate 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);
    @Autowired
    private 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 入門 服務消費者

摘要: 原創出處:www.bysocket.com 泥瓦匠BYSocket 希望轉載,保留摘要,謝謝! “真正的進步,不在於學習,而在於反思”  「Spring Cloud Eureka 入門系列」本文提綱 1.  springcloud-eureka-sample 工程介紹 2. 執行 spring

Spring Cloud Eureka 入門 服務提供者

2017-07-10 16:03:15.075 INFO 11020 --- [ main] o.s.c.n.e.s.EurekaServiceRegistry : Registering application provider-service with eureka

Spring Cloud微學習Eureka應用——服務間通訊

微服務可以在“自己的程式”中執行,並通過“輕量級裝置與HTTP型API進行溝通”。這裡的溝通就是本節要說的服務間通訊。即各個微服務註冊到Eureka服務註冊中心,這些微服務之間的通訊 建立服務提供者 啟動上一節 Eureka入門——叢集的服務內容

spring-cloud服務消費者Feign(Finchley版本)

Feign是一個宣告式的偽Http客戶端,它使得寫Http客戶端變得更簡單。使用Feign,只需要建立一個介面並註解。它具有可插拔的註解特性,可使用Feign 註解和JAX-RS註解。Feign支援可插拔的編碼器和解碼器。Feign預設集成了Ribbon,並和Eureka結合,預設實現了負載均衡的效

【原創】Spring-Cloud快速入門服務入門--轉載請註明出處

一、什麼是微服務? 有時候,會有的人存在誤解,所謂微服務就是SpringCloud。這種思想本身是不正確的,微服務是一種系統架構上面的設計風格,而SpringCloud則是一種較為適用於微服務架構的框架。 在java體系中,我們通常需要將一個大的類,拆分成若干個的小的類,每個類都具有自己獨立

Spring Cloud之路: 服務消費者rest+ribbon

在微服務架構中,業務都會被拆分成一個獨立的服務,服務與服務的通訊是基於http restful的。Spring cloud有兩種服務呼叫方式,一種是ribbon+restTemplate,另一種是feign。在這一篇文章首先講解下基於ribbon+rest。 一、Rib

【原創】Spring-Cloud快速入門服務入門

一、什麼是微服務? 有時候,會有的人存在誤解,所謂微服務就是SpringCloud。這種思想本身是不正確的,微服務是一種系統架構上面的設計風格,而SpringCloud則是一種較為適用於微服務架構的框

spring-cloud-starter-hystrix斷路器服務不通或者調用失敗後的錯誤處理和回調

系統 comm cli 處理 參考 quest 微服務架構 ron 100% 雪崩效應 在微服務架構中通常會有多個服務層調用,大量的微服務通過網絡進行通信,從而支撐起整個系統。各個微服務之間也難免存在大量的依賴關系。然而任何服務都不是100%可用的,網絡往往也是脆弱的,所

Spring Cloud Commons教程忽略網絡接口

ech 什麽 targe 地址 分享圖片 ans str log list 有時,忽略某些命名網絡接口是有用的,因此可以將其從服務發現註冊中排除(例如,在Docker容器中運行)。可以設置正則表達式的列表,這將導致所需的網絡接口被忽略。以下配置將忽略“docker0”接口

Spring Cloud Stream教程持續發布 - 訂閱支持

點對點 cst 服務 均值 而不是 兩個 搭建 另一個 進行 應用之間的通信遵循發布訂閱模式,其中通過共享主題廣播數據。這可以在下圖中看到,它顯示了一組交互式的Spring Cloud Stream應用程序的典型部署。 SCSt傳感器圖6. Spring Cloud Str

Spring Cloud技術分析1——服務治理

地址:http://tech.lede.com/    本文作為系列的第一篇正文,從Spring Cloud中的核心專案Spring Cloud Netflix入手,闡述了Spring Cloud Netflix的優勢,介紹了Spring Cloud Netflix進行服務治

Spring Cloud 應用篇 之 Spring Cloud Sleuth + Zipkin修改資料儲存方式

(一)簡介預設情況下,Zipkin Server 會將跟蹤資訊儲存在記憶體中,每次重啟 Zipkin Server 都會使之前收集的跟蹤資訊丟失,並且當有大量跟蹤資訊時,記憶體儲存也會造成效能瓶頸,所以通常我們都需要將跟蹤資訊儲存到外部元件中,如 Mysql。由於 Sprin

Spring Boot+Spring Cloud基礎入門斷路器——Hystrix

Hystrix Hystrix翻譯成中文是“豪豬”,豪豬周身長滿了刺,能保護自己不受天敵的傷害,代表了一種防禦機制,這與Hystrix本身的功能不謀而合,因此Netflix團隊將該框架命名為Hystrix。所以,Hystrix的功能便是自我保護機制,我們將

Spring Cloud》學習 服務治理!

  前言:之前網上學習過Spring Cloud,對於工作上需要是足夠了,總歸對於一些方面一知半解,最近難得有些閒暇時間,有幸讀了崔永超先生的《Spring Cloud 微服務實戰》,一方面記錄下自己的學習歷程和讀後感,一方面分享下自己對Spring Cloud微服務的一些見解,寫下此文。  注意:本文著重於

企業級 SpringCloud 教程 服務消費者Feign

pom https www. ram cat -h 客戶端 tin script 上一篇文章,講述了如何通過RestTemplate+Ribbon去消費服務,這篇文章主要講述如何通過Feign去消費服務。一、Feign簡介 Feign是一個聲明式的偽Http客戶端,它使得寫

企業分布式微服務雲SpringCloud SpringBoot mybatis 服務消費者Feign

test 它的 artifact color tor 實現 特性 -- pac 一、Feign簡介 Feign是一個聲明式的偽Http客戶端,它使得寫Http客戶端變得更簡單。使用Feign,只需要創建一個接口並註解。它具有可插拔的註解特性,可使用Feign 註解和JAX-

Spring Boot 2.x 快速入門HelloWorld示例

esc 入門 無敵 depend alt 簡單的 net 自動管理 clean 上篇 Spring Boot 2.x 快速入門(上)HelloWorld示例 進行了Sprint Boot的快速入門,以實際的示例代碼來練手,總比光看書要強很多嘛,最好的就是邊看、邊寫、邊記、邊

探索 SpringBoot 啟動流程(下)

探索 SpringBoot (三) 啟動流程詳解(下) 文章目錄 探索 SpringBoot (三) 啟動流程詳解(下) 4 SpringBoot 執行階段 4.1 Spring 應用執行監聽者的載入和執行 4.2

python標準庫常用模組-----------------------------OS模組,呼叫系統的命令

OS模組是呼叫系統命令的模組,和執行cmd的命令相似。 1.獲取當前的工作目錄:getcwd() 2.改變當前指令碼的工作目錄:chdir(path) 3.返回當前目錄:curdir() 4.獲取當前目錄的父目錄:pardir() 5.若目錄為空,則刪除,遞迴到上一

kaldi筆記train_mono.sh

train_mono.sh 是音素訓練指令碼,下面詳細介紹各個功能: 1.首先是初始化GMM,使用的指令碼是/kaldi-trunk/src/gmmbin/gmm-init-mono,輸出是0.mdl和tree檔案; 2.compile training graphs,使用的指令碼是/kal