《從搭建微服務(wù)框架到深入理解Spring Cloud---(一) 服務(wù)注冊與發(fā)現(xiàn)之Eureka篇》

搭建注冊中心

導(dǎo)入pom依賴

<?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">
 <parent>
 <artifactId>sakura</artifactId>
 <groupId>com.warm-sun</groupId>
 <version>1.0.0</version>
 </parent>
 <modelVersion>4.0.0</modelVersion>
?
 <artifactId>registry-center</artifactId>
 <packaging>jar</packaging>
 <name>registry-center</name>
 <description>微服務(wù)注冊中心</description>
 <!-- 引入spring boot的依賴 -->
?
 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <java.version>1.8</java.version>
 </properties>
?
 <dependencies>
 <!--注冊中心選擇eureka 也可以使用 zookeeper consul 這里自己擴展-->
 <dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
 <version>2.0.2.RELEASE</version>
 </dependency>
 <!--security 框架-->
 <dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-security</artifactId>
 <version>2.0.1.RELEASE</version>
 </dependency>
 <!-- 注冊中心-->
 <dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-config</artifactId>
 <version>2.0.2.RELEASE</version>
 </dependency>
 <!--web 框架-->
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 <exclusions>
 <!--排除 tomcat容器-->
 <exclusion>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-boot-starter-tomcat</artifactId>
 </exclusion>
 </exclusions>
 </dependency>
 <!--undertow容器 基于內(nèi)存 性能秒殺tomcat-->
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-undertow</artifactId>
 <version>2.0.4.RELEASE</version>
 </dependency>
 </dependencies>
?
 <!-- 添加spring-boot的maven插件 -->
 <build>
 <plugins>
 <plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 <configuration>
 <finalName>${project.name}</finalName>
 </configuration>
 </plugin>
 <plugin>
 <groupId>com.spotify</groupId>
 <artifactId>docker-maven-plugin</artifactId>
 <version>0.4.12</version>
 <configuration>
 <imageName>${registry.url}/${project.name}:0.0.1</imageName>
 <dockerHost>${docker.url}</dockerHost>
 <dockerDirectory>${project.basedir}</dockerDirectory>
 <resources>
 <resource>
 <targetPath>/</targetPath>
 <directory>${project.build.directory}</directory>
 <include>${project.build.finalName}.jar</include>
 </resource>
 </resources>
 <serverId>docker-hub</serverId>
 <registryUrl>https://index.docker.io/v1/</registryUrl>
 </configuration>
 </plugin>
 </plugins>
 </build>
</project>

編寫bootstrap.yml拜姿,配置eureka注冊信息

#配置端口號
server:
 port: 2000
?
# 配置eureka 安全驗證賬戶
spring:
 security:
 user:
 name: sakura
 password: Sakura*&^999
 application:
 name: registry-center
 cloud:
 config:
 enabled: false
?
# eureka 配置
eureka:
 instance:
 hostname: localhost
 prefer-ip-address: false
?
 client:
 #只有一個eureka注冊中心 不需要自己向自己注冊 當(dāng)服務(wù)需要搭建集群的時候 registerwitheurka設(shè)置為true
 registerWithEureka: false
 # 表示從其他的配置中心同步數(shù)據(jù)福压,默認為true;當(dāng)前只有一個配置中心嫩舟,所以設(shè)置為false
 fetchRegistry: false
 serviceUrl:
 # 多個地址用,隔開 并相互注冊
 defaultZone: http://sakura:Sakura*&^999@${eureka.instance.hostname}:${server.port}/eureka/

 #配置eureka心跳等
 server:
 eviction-interval-timer-in-ms: 4000
 enable-self-preservation: false
 renewal-percent-threshold: 0.9</pre>

配置啟動類


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
?
/** 注冊中心服務(wù)端
 * @author tuxiaolei
 * @date 2018/11/23
 */
@EnableEurekaServer
@SpringBootApplication
public class RegistryApplication {
 public static void main(String[] args) {
 SpringApplication.run(RegistryApplication.class,args);
 }
}

配置安全登錄信息

import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer;
?
/**
 * @author tuxiaolei
 * @date 2018/11/23
 */
@EnableWebSecurity
public class RegistrySecurityConfig extends WebSecurityConfigurerAdapter {
 @Override
 protected void configure(HttpSecurity http) throws Exception {
 http.csrf().disable()
 .authorizeRequests()
 .antMatchers().permitAll()
 .anyRequest()
 //開啟表單驗證
 .authenticated().and().httpBasic();
 }
}

這樣我們的Eureka配置中心就完成了

Eureka 架構(gòu)

Eureka 官方架構(gòu)圖

首先我們要明白幾個概念:

  1. Application Client(Service Consumer) : 服務(wù)消費者、應(yīng)用客戶端,在微服務(wù)架構(gòu)中很多微服務(wù)既是服務(wù)的提供者也是服務(wù)的消費者术唬,這種情況下,微服務(wù)是需要往注冊中心注冊的滚澜。從注冊中心獲取到服務(wù)提供者列表粗仓。

  2. Application Service(Service Provider): 服務(wù)的提供者,需要向注冊中心注冊设捐、續(xù)約借浊、下線 ,往注冊中心發(fā)送心跳

  3. Eureka Server: 注冊中心服務(wù)端挡育,接收客戶端的心跳巴碗,默認90秒沒接收客戶端的心跳下線這個客戶端。

  4. Eureka Server: 注冊中心客戶端即寒,注冊客戶端信息橡淆,方便服務(wù)消費者獲取到提供者的地址、端口等的母赵。

要理解eureka 首先我們得明白 eureka解決了什么:

我們知道:現(xiàn)在開發(fā)已經(jīng)有傳統(tǒng)的單系統(tǒng)開發(fā)轉(zhuǎn)變成了實現(xiàn)流行的分布式開發(fā)和微服務(wù)開發(fā)逸爵,不同的業(yè)務(wù)被劃分成不同的模塊,部署到不同的服務(wù)器實例上凹嘲,對于并發(fā)量大的模塊(比如:訂單模塊师倔、團購模塊)往往來說要搭建集群,那么我們在服務(wù)調(diào)用的時候怎么知道我部署的服務(wù)在哪個服務(wù)器上周蹭,同個服務(wù)的多個實例我應(yīng)該調(diào)取哪個趋艘,哪個服務(wù)是健康的,哪個服務(wù)宕機了凶朗,我們的eureka就很好的解決了這些問題瓷胧。

Eureka 就像一個智能版的微信,我想跟A聊天的時候棚愤,我就去找A的通訊信息搓萧,新結(jié)識了B,將B的信息存到通訊錄里宛畦,當(dāng)B改了頭像瘸洛,那么第一時間我也能知道。只不過我們的Eureka更為強大次和!

根據(jù)上續(xù)場景反肋,我們來考慮一下如何實現(xiàn):

1.服務(wù)注冊后如何及時發(fā)現(xiàn)注冊信息

2.服務(wù)宕機后怎,如何及時下線服務(wù)

3.服務(wù)如何做水平擴展斯够,解決性能瓶頸

4服務(wù)注冊發(fā)現(xiàn)后囚玫,調(diào)用微服務(wù)怎么做路由

5.服務(wù)發(fā)生異常怎么做降級處理

6.注冊中心如何實現(xiàn)自身高可用

這里我們先留下懸念喧锦,我會在后續(xù)的博客中读规,針對eureka的源碼進行解析抓督。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市束亏,隨后出現(xiàn)的幾起案子铃在,更是在濱河造成了極大的恐慌,老刑警劉巖碍遍,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件定铜,死亡現(xiàn)場離奇詭異,居然都是意外死亡怕敬,警方通過查閱死者的電腦和手機揣炕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來东跪,“玉大人畸陡,你說我怎么就攤上這事∷涮睿” “怎么了丁恭?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長斋日。 經(jīng)常有香客問我牲览,道長,這世上最難降的妖魔是什么恶守? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任第献,我火速辦了婚禮,結(jié)果婚禮上兔港,老公的妹妹穿的比我還像新娘庸毫。我一直安慰自己,他們只是感情好押框,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布岔绸。 她就那樣靜靜地躺著,像睡著了一般橡伞。 火紅的嫁衣襯著肌膚如雪盒揉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天兑徘,我揣著相機與錄音刚盈,去河邊找鬼。 笑死挂脑,一個胖子當(dāng)著我的面吹牛藕漱,可吹牛的內(nèi)容都是我干的欲侮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肋联,長吁一口氣:“原來是場噩夢啊……” “哼威蕉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起橄仍,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤韧涨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侮繁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虑粥,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年宪哩,在試婚紗的時候發(fā)現(xiàn)自己被綠了娩贷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡锁孟,死狀恐怖彬祖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情罗岖,我是刑警寧澤涧至,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站桑包,受9級特大地震影響南蓬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哑了,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一赘方、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧弱左,春花似錦窄陡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至们镜,卻和暖如春币叹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背模狭。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工颈抚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嚼鹉。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓贩汉,卻偏偏與公主長得像驱富,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子匹舞,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容