1. 程式人生 > >SpringCloud 學習記錄(一):服務註冊與發現(eureka+feign)

SpringCloud 學習記錄(一):服務註冊與發現(eureka+feign)

前面介紹過dubbo遠端介面呼叫的簡單使用,這裡我們將開始學習如何使用springcloud微服務架構中的服務註冊與發現。

一,eureka-server

eureka分為服務端和客戶端兩部分, eureka server是一個服務註冊中心,類似於zookeeper,當然,也可以使用zookeeper代替,後面會詳細說明。 首先,新建一個maven springboot應用,這裡命名為eureka-server 1,新增依賴包
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
2,新增配置檔案application.properties
#應用名稱
spring.application.name=eureka-server
#服務埠
server.port=8080
#例項ip地址
eureka.instance.hostname=localhost
#設定當前的eureka服務禁止被當做客戶端註冊
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
#設定服務發現地址
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
3,啟動類Application.java添加註解@EnableEurekaServer
package com.example;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class Application {

	public static void main(String[] args) {
		new SpringApplicationBuilder(Application.class).web(true).run(args);
	}

}
4,啟動訪問,此時還沒有任何服務註冊

二,eureka-client 還是新建一個maven springboot應用,這裡命名為eureka-client 1,新增依賴包
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2,新增application.properties配置
spring.application.name=eureka-client
server.port=8081
eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka
3,啟動類Application.java添加註解註冊服務@EnableDiscoveryClient
package com.example;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class Application {

	public static void main(String[] args) {
		new SpringApplicationBuilder(Application.class).web(true).run(args);
	}

}
4,啟動後重新整理eureka-server介面,會發現多了一個註冊的客戶端例項eureka-client
三,feign

上面簡單演示了使用eureka發現和註冊服務,下面我們來看,如何使用feign來實現遠端介面的呼叫。

還是新建一個maven springboot應用,這裡命名為eureka-feign

1,新增依賴包

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
</dependency>
2,新增配置application.properties
spring.application.name=eureka-feign
server.port=8082
eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka
feign.httpclient.enabled=true
feign.compression.request.enabled=true
feign.compression.request.mime-types=application/json
feign.compression.request.min-request-size=2048
feign.compression.response.enabled=true

3,Application.java啟動類開啟註解@EnableFeignClients

package com.example;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.context.annotation.Bean;

import feign.Request;

@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class Application {

	public static void main(String[] args) {
		new SpringApplicationBuilder(Application.class).web(true).run(args);
	}

	/**
	 * 自定義feign連線超時時間
	 * @return
	 */
	@Bean
    Request.Options feignOptions() {
        return new Request.Options(/**connectTimeoutMillis**/1000 * 1000, /** readTimeoutMillis **/1000 * 1000);
    }
}
4,啟動,重新整理eureka-server介面,可以看到服務已經註冊成功

5,新增測試類,從eureka-feign服務中呼叫eureka-client中的介面

(1) 在eureka-feign中新增TestController.java

package com.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @Autowired
    TestClient testClient;
    
    @RequestMapping(value="/test",method=RequestMethod.GET)
    public String test() {
    	String msg = testClient.test();
    	return msg;
    }

}
(2) 定義介面TestClient.java,指定實現服務的@FeignClient("eureka-client")
package com.example;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@FeignClient("eureka-client")
public interface TestClient {

    @RequestMapping(value="/test",method=RequestMethod.GET)
    String test();

}

(3) 在eureka-client中新增介面實現

package com.example;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @RequestMapping(value="/test",method=RequestMethod.GET)
    public String test() {
        String msg = "this service is eureka-client";
        return msg;
    }

}
注意:feign介面呼叫使用的仍然是http協議,且支援spring註解,引數需與呼叫方一致。

接下來啟動服務,訪問http://localhost:8082/test,檢視測試結果:

6,feign還支援負載均衡,不需要額外配置,繼續儲存服務開啟狀態,修改eureka-client的port=8083,然後啟動

此時有兩個eureka-client例項提供服務:

再次訪問http://localhost:8082/test,這裡共測試了4次,檢視控制檯日誌,埠為8081和埠為8083的服務各呼叫了兩次。

8081埠日誌:

2017-08-09 16:50:24.671  INFO 3104 --- [           main] com.netflix.discovery.DiscoveryClient    : Saw local status change event StatusChangeEvent [timestamp=1502268624671, current=UP, previous=STARTING]
2017-08-09 16:50:24.674  INFO 3104 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_EUREKA-CLIENT/PC-201611261236:eureka-client:8081: registering service...
2017-08-09 16:50:24.739  INFO 3104 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_EUREKA-CLIENT/PC-201611261236:eureka-client:8081 - registration status: 204
2017-08-09 16:50:24.823  INFO 3104 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8081 (http)
2017-08-09 16:50:24.825  INFO 3104 --- [           main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8081
2017-08-09 16:50:24.830  INFO 3104 --- [           main] com.example.Application                  : Started Application in 8.949 seconds (JVM running for 9.584)
2017-08-09 16:53:24.596  INFO 3104 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
2017-08-09 16:53:24.598  INFO 3104 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2017-08-09 16:53:24.634  INFO 3104 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 36 ms
--------------this service is eureka-client
--------------this service is eureka-client
2017-08-09 16:55:24.319  INFO 3104 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration
8083埠日誌:
2017-08-09 16:54:02.333  INFO 4640 --- [           main] com.netflix.discovery.DiscoveryClient    : Saw local status change event StatusChangeEvent [timestamp=1502268842333, current=UP, previous=STARTING]
2017-08-09 16:54:02.336  INFO 4640 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_EUREKA-CLIENT/PC-201611261236:eureka-client:8083: registering service...
2017-08-09 16:54:02.413  INFO 4640 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_EUREKA-CLIENT/PC-201611261236:eureka-client:8083 - registration status: 204
2017-08-09 16:54:02.466  INFO 4640 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8083 (http)
2017-08-09 16:54:02.467  INFO 4640 --- [           main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8083
2017-08-09 16:54:02.477  INFO 4640 --- [           main] com.example.Application                  : Started Application in 8.863 seconds (JVM running for 9.467)
2017-08-09 16:54:05.998  INFO 4640 --- [nio-8083-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
2017-08-09 16:54:05.999  INFO 4640 --- [nio-8083-exec-2] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2017-08-09 16:54:06.027  INFO 4640 --- [nio-8083-exec-2] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 28 ms
--------------this service is eureka-client
--------------this service is eureka-client
2017-08-09 16:59:01.991  INFO 4640 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration

四,上面我們提到過,服務註冊不一定要用eureka,下面我們使用zookeeper來代替使用。

首先,對eureka-feign和eureka-client進行改造,主要是配置修改。

1,修改依賴包,將eureka包註釋掉,新增zookeeper依賴

<!--         <dependency> -->
<!--             <groupId>org.springframework.cloud</groupId> -->
<!--             <artifactId>spring-cloud-starter-eureka</artifactId> -->
<!--         </dependency> -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-all</artifactId>
        </dependency>
2,將application.properties中的eureka服務地址註釋掉
#eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka
3,新增bootstrap.properties,指定zookeeper地址
spring.cloud.zookeeper.connectString=localhost:2181
spring.cloud.zookeeper.discovery.instancePort=${server.port}
4,其他配置都不變,開啟zookeeper,然後同時開啟eureka-feign和eureka-client

訪問http://localhost:8082/test,同樣可以得到相同的測試結果:


相關推薦

SpringCloud 學習記錄()服務註冊發現(eureka+feign)

前面介紹過dubbo遠端介面呼叫的簡單使用,這裡我們將開始學習如何使用springcloud微服務架構中的服務註冊與發現。 一,eureka-server eureka分為服務端和客戶端兩部分, eureka server是一個服務註冊中心,類似於zookeeper,當

SpringCloud教程服務註冊發現Eureka

Spring CloudSpring Cloud為開發人員提供了快速構建分散式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智慧路由,微代理,控制匯流排)。分散式系統的協調導致了樣板模式,

Spring Cloud 服務註冊發現Eureka)【Dalston版】

什麽是 pom 日誌 操作 prop ng- 通過 決策 target Spring Cloud簡介 Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局

Spring Cloud()服務註冊發現

足夠 負載 方案 opener 屏蔽 腳手架 更新 pin pen Spring Cloud是什麽 Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、負載均衡、斷

spring cloud 學習服務註冊發現

最近開始學習spring cloud, 跟著這個學:http://blog.didispace.com/spring-cloud-starter-dalston-1/ 以下是我抄的定義: Spring Cloud是一個基於Spring Boot實現的雲應用

Spring Cloud(二)服務註冊發現 Eureka【Finchley 版】

LEDE .com Go eureka clean 英文逗號 開始 效果 sam Spring Cloud(二):服務註冊與發現 Eureka【Finchley 版】 發表於 2018-04-15 | 更新於 2018-05-07 | 上一篇主要介紹了相關理論,這一

Spring Cloud構建微服務架構服務註冊發現 Eureka

Spring Cloud構建微服務架構:服務註冊與發現Eureka 【Dalston版】 原創   2018-04-10  宗野   Spring Cloud 已經

SpringCloud進擊 | 淺出服務註冊發現Eureka)【Finchley版本】

1.前言 Spring Cloud 已經幫我們實現了服務註冊中心,我們只需要很簡單的幾個步驟就可以完成。關於理論知識,我想大家都已經有不同程度上的瞭解和認識,這裡,我們最後再進行總結。本系列 Spring Cloud 介紹基於 Spring Boot 2.0.5 版本和 Spring C

關於SpringCloud服務雲架構構建B2B2C電子商務平臺分析服務註冊發現Eureka、Consul)

Spring Cloud簡介 Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式會話和叢集狀態管理等操作提供了一種簡單的開發方式。 Spring

SpringCloud筆記(服務註冊服務發現

目錄 1、Spring Cloud概述 2、環境搭建 2.1 搭建註冊中心eureka-server  pom.xml application.yml 啟動類: 2.2 註冊服務提供者springcloud-producer pom.xml appl

構建微服務架構Spring Cloud服務註冊發現Eureka、Consul)

comm 簡介 foundry 架構 eas args 包含 什麽 其他 Spring Cloud簡介 Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全

SpringCloud(二) 服務註冊發現Eureka

圖片 borde 引入 vat red images .cn epo round 1.eureka是幹什麽的? 上篇說了,微服務之間需要互相之間通信,那麽通信就需要各種網絡信息,我們可以通過使用硬編碼的方式來進行通信,但是這種方式

SpringCloud服務註冊發現Eureka

Eureka是Netflix開源的一款提供服務註冊和發現的產品,它提供了完整的Service Registry(註冊登記)和Service Discovery(發現)實現。也是springcloud體系中最重要最核心的元件之一。   服務中心:   服務中心又稱註冊中心,管理各種服務功能包括服務的註冊、發

4--SpringCloud搭建高可用的服務註冊中心 1--SpringCloud服務註冊發現Eureka 1--SpringCloud服務註冊發現Eureka 1--SpringCloud服務註冊發現Eureka

  我們已經介紹了1--SpringCloud的服務註冊與發現Eureka,其中,主要演示瞭如何構建和啟動服務註冊中心Eureka Server,以及如何將服務註冊到Eureka Server中,但是在之前的示例中,這個服務註冊中心是單點的,顯然這並不適合應用於線上生產環境,那麼下面在前文的基礎上,我們來看看

SpringCloud入門 ――服務註冊發現(Eureka)

  前言 Oracle轉讓Java,各種動態語言的曝光率上升,Java工程師的未來在哪裡?我覺得Spring Cloud讓未來有無限可能。拖了半年之久的Spring Cloud學習就從今天開始了。中文教材不多,而且大多都是簡單的離散的資訊,想要找到企業級的一體化解決方案很少。不過,

Choerodon 的微服務之路(三)服務註冊發現

本文是 Choerodon 的微服務之路系列推文第三篇。在上一篇《Choerodon的微服務之路(二):微服務閘道器》中,介紹了Choerodon 在搭建微服務閘道器時考慮的一些問題以及兩種常見的微服務閘道器模式,並且通過程式碼介紹了Choerodon 的閘道器是如何實現的。本篇文章將介紹Choer

Spring Cloud構建微服務架構服務註冊發現Eureka、Consul)

Spring Cloud簡介 Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式會話和叢集狀態管理等操作提供了一種簡單的開發方式。 Spring Cloud包含

SpringCloud服務註冊發現Eureka

一、建立Eureka Server作為服務註冊中心 二、新增pom.xml檔案依賴 <!--eureka server --> <dependency> <groupId>org.springframework.cloud&l

Spring Cloud構建微服務架構服務註冊發現Eureka

1. Spring Cloud簡介 Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式會話和叢集狀態管理等操作提供了

1--SpringCloud服務註冊發現Eureka

Eureke   Eureka是Netflix開源的一款提供服務註冊和發現的產品,它提供了完整的Service Registry(註冊登記)和Service Discovery(發現)實現。也是springcloud體系中最重要最核心的元件之一。   服務中心:   服務中心又稱註冊中心,管理各種服務功