SpringCloud學習教程一( 服務的注冊與發現 Eureka)
本文是根據方志明的springCloud學習教程進行個人細化,記錄個人學習的教程可能會做一些小的修改讓文章更便于理解,
原著參考案例全部采用Spring Boot 1.5.x ,Spring Cloud版本為Dalston.RELEASE
一、spring cloud簡介
spring cloud 為開發人員提供了快速構建分布式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分布式會話等等。它運行環境簡單,可以在開發人員的電腦上跑。另外說明spring cloud是基于springboot的,所以需要開發中對springboot有一定的了解,如果不了解的話可以看這篇文章:2小時學會springboot。另外對于“微服務架構” 不了解的話,可以通過搜索引擎搜索“微服務架構”了解下。
注意 :
1.1 (技術前提) springBoot , spring , maven , idea ,
二、創建服務注冊中心
在這里,我們需要用的的組件上Spring Cloud Netflix的Eureka ,eureka是一個服務注冊和發現模塊。
2.1 首先創建一個maven主工程。
2.2 然后創建2個model工程:一個model工程作為服務注冊中心,即Eureka Server,另一個作為Eureka Client。
下面以創建server為例子,詳細說明創建過程:
右鍵工程->創建model-> 選擇spring initialir 如下圖:
下一步->選擇cloud discovery->eureka server ,然后一直下一步就行了。
idea自動創建完后的工程的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/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.forezp</groupId>
<artifactId>eurekaserver</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>eurekaserver</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--eureka server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<!-- spring boot test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
2.3 啟動一個服務注冊中心,只需要一個注解@EnableEurekaServer,這個注解需要在springboot工程的啟動application類上加:
@EnableEurekaServer
@SpringBootApplication
public class EurekaserverApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaserverApplication.class, args);
}
}
2.4 eureka是一個高可用的組件,它沒有后端緩存,每一個實例注冊之后需要向注冊中心發送心跳(因此可以在內存中完成),默認情況下eureka服務器也是一個eureka客戶端,還需要一個url來定位節點。
小知識: 注冊服務默認心跳時間為30秒,當一個服務器不可用,需要3個心跳才能讓服務器和客戶端的元數據相同。可以使用eureka.instance.leaseRenewalIntervalInSeconds加快這個過程。在生產環境最好使用默認配置。
e ureka server的配置文件appication.yml:
server:
port: 8761 #服務端口
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
通過eureka.client.registerWithEureka:false和fetchRegistry:false來表明自己是一個eureka server.
2.5 eureka server 是有界面的,啟動工程,打開瀏覽器訪問:
訪問你的服務注冊中心http://localhost:8761 ,界面如下
No application available 沒有服務被發現 ……^_^
因為沒有注冊服務當然不可能有服務被發現了。
三、創建一個服務提供者 (eureka client)
當client向server注冊時,它會提供一些元數據,例如主機和端口,URL,主頁等。Eureka server 從每個client實例接收心 跳消息。 如果心跳超時,則通常將該實例從注冊server中刪除。
創建過程同server類似,創建完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/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.forezp</groupId>
<artifactId>service-hi</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>service-hi</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
通過注解@EnableEurekaClient 表明自己是一個eurekaclient.
@SpringBootApplication
@EnableEurekaClient
@RestController
public class ServiceHiApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceHiApplication.class, args);
}
@Value("${server.port}")
String port;
@RequestMapping("/hi")
public String home(@RequestParam String name) {
return "hi "+name+",i am from port:" +port;
}
}
僅僅@EnableEurekaClient是不夠的,還需要在配置文件中注明自己的服務注冊中心的地址,application.yml配置文件如 下:
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 8762
spring:
application:
name: service-hi
需要指明spring.application.name,這個很重要,這在以后的服務與服務之間相互調用一般都是根據這個name 。
啟動工程,打開http://localhost:8761 ,即eureka server 的網址:(就能夠在下圖發現自己的其它服務是否被注冊進來)
你會發現一個服務已經注冊在服務中了,服務名為SERVICE-HI ,端口為7862
這時打開 http://localhost:8762/hi?name=forezp ,你會在瀏覽器上看到 :
hi forezp,i am from port:8762
源碼下載:https://github.com/forezp/SpringCloudLearning/tree/master/chapter1
智能推薦
一、SpringCloud服務的注冊與發現(Eureka)
一.Euraka介紹 Eureka是Netflix開發的服務發現框架,本身是一個基于REST的服務,主要用于定位運行在AWS域中的中間層服務,以達到負載均衡和中間層服務故障轉移的目的。Spring Cloud將它集成在其他子項目spring-cloud-netflix中,以實現spring cloud服務發現功能。 1.1Euraka原理 Region: AWS云服務在全球不同的地方都有數據中心,...
小白學SpringCloud(一):服務的注冊與發現(Eureka)
一、引言 首先我們先引用Dubbo官網的一段話 單一應用架構 當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。 此時,用于簡化增刪改查工作量的 數據訪問框架(ORM) 是關鍵。 垂直應用架構 當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。 此時,用于加速前端頁面開發的 Web框架(MVC) 是關鍵。 分布式服務架構 ...
springcloud學習筆記一:eureka服務注冊與發現
springcloud可以方便的幫我們完成微服務架構,它擁有多個子項目,可以去官網簡單看下介紹。 其中component下的代表著現有的子項目,本次所記錄的eureka就是其中spring-cloud-netflix里的一個模塊。 eureka在我們微服務架構中實現的就是服務發現與注冊的功能,我們可以稱之為注冊中心,即我們開發的服務注冊到該注冊中心,同時服務消費端來注冊中心訂閱服務。 我們可以直接...
springcloud(三)--服務注冊與發現Eureka
如題,本篇我們來引入SpringCloud中服務注冊與發現組件--Eureka,然后將SIM服務提供者向Eureka服務器進行注冊。 一、Eureka 是什么 Eureka是Netflix開發的服務發現框架,本身是一個基于REST的服務,主要用于定位運行在AWS域中的中間層服務,以達到負載均衡和中間層服務故障轉移的目的。SpringCloud將它集成在其子項目spring-c...
SpringCloud(二):服務注冊與發現——Eureka
服務注冊與發現——Eureka 是什么? Eureka架構圖 Eureka兩個組件 Server Client 構建Eureka Server服務 構建Eureka Client 在provider中模擬發現服務 actutor微服務信息完善 Eureka的自我保護 Eureka集群配置 是什么? 是Netflix的一個子模塊,也是核心模塊之一,基于REST的服務 用于云端...
猜你喜歡
springcloud eureka服務注冊與發現
本節示例只提供服務注冊,消費服務在后面的章節中 Eureka的原理就不介紹了,直接寫代碼。 編寫Eureka Service 新建一個spring boot Maven項目,添加如下依賴 啟動類添加@EnableEurekaServer注解,聲明是一個Eureka Server。 配置文件 eureka.client.registerWithEureka 表示是否將自己注冊到Eureka Serv...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...