SpringCloud系列教程 | 第二篇:注冊(cè)中心Eureka

SpringCloud系列教程 | 第二篇:注冊(cè)中心Eureka

Springboot: 2.1.6.RELEASE

SpringCloud: Greenwich.SR1

如無(wú)特殊說(shuō)明延欠,本系列教程全采用以上版本

Eureka是Netflix開(kāi)源的一款提供服務(wù)注冊(cè)和發(fā)現(xiàn)的產(chǎn)品搂蜓,它提供了完整的Service Registry和Service Discovery實(shí)現(xiàn)环形。也是springcloud體系中最重要最核心的組件之一逾柿。

注冊(cè)中心的意義

注冊(cè)中心

管理各種服務(wù)功能包括服務(wù)的注冊(cè)梦皮、發(fā)現(xiàn)、熔斷破托、負(fù)載吮炕、降級(jí)等,比如dubbo admin后臺(tái)的各種功能醉锄。

有了注冊(cè)中心乏悄,調(diào)用關(guān)系的變化,畫(huà)幾個(gè)簡(jiǎn)圖來(lái)看一下恳不。

服務(wù)A調(diào)用服務(wù)B

有了注冊(cè)中心之后檩小,任何一個(gè)服務(wù)都不在是直連的,都需要通過(guò)注冊(cè)中心去調(diào)用烟勋。

如果是一個(gè)連續(xù)調(diào)用:

服務(wù)A調(diào)用服務(wù)B规求,服務(wù)B調(diào)用服務(wù)C

這里如果加上注冊(cè)中心筐付,整個(gè)調(diào)用流程就會(huì)分為兩步,服務(wù)A先從注冊(cè)中心請(qǐng)求服務(wù)B颓哮,服務(wù)B再?gòu)淖?cè)中心請(qǐng)求服務(wù)C

上面的示例只是描述了兩三個(gè)服務(wù)之間的互相調(diào)用家妆,可能加上注冊(cè)中心還會(huì)稍顯繁瑣,如果一條調(diào)用鏈上面有幾十個(gè)服務(wù)(這個(gè)絲毫不是開(kāi)玩笑哦冕茅,正常的業(yè)務(wù)流程中很可能出現(xiàn)這種復(fù)雜的調(diào)用過(guò)程),在工作中我就遇到過(guò)超過(guò)20個(gè)服務(wù)的互相調(diào)用蛹找,這種復(fù)雜業(yè)務(wù)場(chǎng)景的互相調(diào)用姨伤,如果不使用注冊(cè)中心,畫(huà)出來(lái)的圖會(huì)連成一個(gè)網(wǎng)狀結(jié)構(gòu)庸疾,單從圖上面已經(jīng)很難找出服務(wù)的上下游關(guān)系了乍楚。其中如果一個(gè)服務(wù)有改動(dòng),就會(huì)牽扯到上下游多臺(tái)機(jī)器的重啟届慈,整個(gè)架構(gòu)設(shè)計(jì)完全耦合在一起徒溪,每次改動(dòng)所需要的工作量完全超出想象。通過(guò)注冊(cè)中心去注冊(cè)服務(wù)金顿,完全不在需要關(guān)心上下游機(jī)器的ip地址臊泌,由幾臺(tái)服務(wù)器組成,是否重啟才會(huì)生效揍拆,注冊(cè)中心已經(jīng)幫我們把服務(wù)的注冊(cè)和發(fā)現(xiàn)做好了渠概,我們只需要知道注冊(cè)中心在哪里,對(duì)應(yīng)的服務(wù)名是什么就ok啦~~

由于各種服務(wù)都注冊(cè)到了服務(wù)中心嫂拴,就有了去做很多高級(jí)功能條件播揪。比如幾臺(tái)服務(wù)提供相同服務(wù)來(lái)做均衡負(fù)載;監(jiān)控服務(wù)器調(diào)用成功率來(lái)做熔斷筒狠,移除服務(wù)列表中的故障點(diǎn)猪狈;監(jiān)控服務(wù)調(diào)用時(shí)間來(lái)對(duì)不同的服務(wù)器設(shè)置不同的權(quán)重等等。

Netflix的前世今生

在說(shuō)Eureka之前我們先了解一下Netflix這家公司:

以下介紹來(lái)自于百度百科:

Netflix(Nasdaq NFLX) 成立于1997年辩恼,是一家在線影片租賃提供商雇庙,主要提供Netflix超大數(shù)量的DVD并免費(fèi)遞送,總部位于美國(guó)加利福尼亞州洛斯蓋圖运挫。

Netflix已經(jīng)連續(xù)五次被評(píng)為顧客最滿(mǎn)意的網(wǎng)站状共。可以通過(guò)PC谁帕、TV及iPad峡继、iPhone收看電影、電視節(jié)目匈挖,可通過(guò)Wii碾牌,Xbox360康愤,PS3等設(shè)備連接TV。Netflix大獎(jiǎng)賽從2006年10月份開(kāi)始舶吗,Netflix公開(kāi)了大約1億個(gè)1-5的匿名影片評(píng)級(jí)征冷,數(shù)據(jù)集僅包含了影片名稱(chēng)。評(píng)價(jià)星級(jí)和評(píng)級(jí)日期誓琼,沒(méi)有任何文本評(píng)價(jià)的內(nèi)容检激。比賽要求參賽者預(yù)測(cè)Netflix的客戶(hù)分別喜歡什么影片,要把預(yù)測(cè)的效率提高10%以上腹侣。

總而言之叔收,這是一家全球最大的(可能要排除國(guó)內(nèi)的,具體不清楚)流媒體公司傲隶,最開(kāi)始見(jiàn)這個(gè)單子是在各種美劇或者電影的開(kāi)頭饺律,順手百度了一下,Netflix拍攝的代表性的美劇有《紙牌屋》跺株、《毒梟》复濒、《怪奇物語(yǔ)》。springcloud的微服務(wù)就是基于Netflix這家公司的開(kāi)源產(chǎn)品來(lái)做的乒省。

Netflix的開(kāi)源框架組件已經(jīng)在Netflix的大規(guī)模分布式微服務(wù)環(huán)境中經(jīng)過(guò)多年的生產(chǎn)實(shí)戰(zhàn)驗(yàn)證巧颈,正逐步被社區(qū)接受為構(gòu)造微服務(wù)框架的標(biāo)準(zhǔn)組件。Spring Cloud開(kāi)源產(chǎn)品作儿,主要是基于對(duì)Netflix開(kāi)源組件的進(jìn)一步封裝洛二,方便Spring開(kāi)發(fā)人員構(gòu)建微服務(wù)基礎(chǔ)框架。對(duì)于一些打算構(gòu)建微服務(wù)框架體系的公司來(lái)說(shuō)攻锰,充分利用或參考借鑒Netflix的開(kāi)源微服務(wù)組件(或Spring Cloud)晾嘶,在此基礎(chǔ)上進(jìn)行必要的企業(yè)定制,無(wú)疑是通向微服務(wù)架構(gòu)的捷徑娶吞。

Eureka

按照官方介紹:

Eureka is a REST (Representational State Transfer) based service that is primarily used in the AWS cloud for locating services for the purpose of load balancing and failover of middle-tier servers.

Eureka 是一個(gè)基于 REST 的服務(wù)垒迂,主要在 AWS 云中使用, 定位服務(wù)來(lái)進(jìn)行中間層服務(wù)器的負(fù)載均衡和故障轉(zhuǎn)移。

Spring Cloud 封裝了 Netflix 公司開(kāi)發(fā)的 Eureka 模塊來(lái)實(shí)現(xiàn)服務(wù)注冊(cè)和發(fā)現(xiàn)妒蛇。Eureka 采用了 C-S 的設(shè)計(jì)架構(gòu)机断。Eureka Server 作為服務(wù)注冊(cè)功能的服務(wù)器,它是服務(wù)注冊(cè)中心绣夺。而系統(tǒng)中的其他微服務(wù)吏奸,使用 Eureka 的客戶(hù)端連接到 Eureka Server,并維持心跳連接陶耍。這樣系統(tǒng)的維護(hù)人員就可以通過(guò) Eureka Server 來(lái)監(jiān)控系統(tǒng)中各個(gè)微服務(wù)是否正常運(yùn)行奋蔚。Spring Cloud 的一些其他模塊(比如Zuul)就可以通過(guò) Eureka Server 來(lái)發(fā)現(xiàn)系統(tǒng)中的其他微服務(wù),并執(zhí)行相關(guān)的邏輯。

Eureka由兩個(gè)組件組成:Eureka服務(wù)器和Eureka客戶(hù)端泊碑。Eureka服務(wù)器用作服務(wù)注冊(cè)服務(wù)器坤按。Eureka客戶(hù)端是一個(gè)java客戶(hù)端,用來(lái)簡(jiǎn)化與服務(wù)器的交互馒过、作為輪詢(xún)負(fù)載均衡器臭脓,并提供服務(wù)的故障切換支持。Netflix在其生產(chǎn)環(huán)境中使用的是另外的客戶(hù)端腹忽,它提供基于流量来累、資源利用率以及出錯(cuò)狀態(tài)的加權(quán)負(fù)載均衡。

用官方的一張圖來(lái)認(rèn)識(shí)一下:

上圖簡(jiǎn)要描述了Eureka的基本架構(gòu)窘奏,由3個(gè)角色組成:

1佃扼、Eureka Server

提供服務(wù)注冊(cè)和發(fā)現(xiàn)

2、Service Provider

服務(wù)提供方

將自身服務(wù)注冊(cè)到Eureka蔼夜,從而使服務(wù)消費(fèi)方能夠找到

3、Service Consumer

服務(wù)消費(fèi)方

從Eureka獲取注冊(cè)服務(wù)列表压昼,從而能夠消費(fèi)服務(wù)

案例實(shí)踐

終于到了重頭戲求冷,開(kāi)始擼代碼~~~

Eureka Server

關(guān)于創(chuàng)建springcloud項(xiàng)目,目前有兩種比較方便的方案窍霞,核心都是一樣的匠题,大家自行選擇自己使用方便的。

方式一:

打開(kāi)spring的官方鏈接:

https://start.spring.io/

在Group中填入自己的組織但金,一般填寫(xiě)公司的域名的到寫(xiě)韭山,例如com.jd或者com

.baidu,這里我直接寫(xiě)com.springcloud冷溃。

在Artifact中填寫(xiě)工程的名稱(chēng)钱磅,這里我直接寫(xiě)Eureka。

package選擇jar似枕,java選擇8盖淡,至此,基礎(chǔ)選擇已經(jīng)全都選完凿歼,接下來(lái)要開(kāi)始選擇我們使用的springcloud的組件了褪迟,也就是重頭——Eureka組件。

在Dependencies中找到Spring Cloud Discovery答憔,選擇Eureka Serve味赃,結(jié)果如下圖:

最后點(diǎn)擊下方的綠色長(zhǎng)條按鈕?Generate the project?進(jìn)行下載,等待下載完成后虐拓,直接將壓縮包解壓導(dǎo)入我們的編輯工具idea里即可心俗。

方式二:

基于idea創(chuàng)建,打開(kāi)idea侯嘀,首先f(wàn)ile->new->project另凌,選中spring Initializr谱轨,這時(shí)可以看到右側(cè)讓我們選擇一個(gè)初始化的服務(wù)url,默認(rèn)的就是上面的官方鏈接吠谢,https://start.spring.io/

點(diǎn)擊next下一步土童,填寫(xiě)和上面一樣的Group、Artifact工坊、java版本献汗、package方式等信息,繼續(xù)next下一步王污,選擇依賴(lài)罢吃,和前面的方法的一樣,在Dependencies中找到Spring Cloud Discovery昭齐,選擇Eureka Serve尿招,點(diǎn)擊next,選擇項(xiàng)目名稱(chēng)和存儲(chǔ)路徑阱驾,點(diǎn)擊finish就谜,靜靜等一會(huì),第一個(gè)項(xiàng)目Eureka就新鮮出爐了~~~

我一般選擇第一種方式創(chuàng)建springcloud項(xiàng)目里覆,這種方式不依賴(lài)IDE工具丧荐。

pom.xml

maven項(xiàng)目,首先看一下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>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.1.6.RELEASE</version>

<relativePath/> <!-- lookup parent from repository -->

</parent>

<groupId>com.springcloud</groupId>

<artifactId>Eureka</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>Eureka</name>

<description>Demo project for Spring Boot</description>

<properties>

<java.version>1.8</java.version>

<spring-cloud.version>Greenwich.SR1</spring-cloud.version>

</properties>

<dependencies>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-eureka-server</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>${spring-cloud.version}</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>

</project>

parent:?父級(jí)依賴(lài)項(xiàng)目喧枷,這里能看到依賴(lài)的父級(jí)的springboot的版本是2.1.6.RELEASE虹统。

properties:?當(dāng)前配置文件一些配置,可以看到Java的版本是1.8隧甚,springcloud的版本是Greenwich.SR1车荔。

dependencies:?當(dāng)前項(xiàng)目依賴(lài)的組件,這里能看出來(lái)依賴(lài)兩個(gè)組件呻逆,一個(gè)是Eureka夸赫,還有一個(gè)是test測(cè)試框架。

*dependencyManagement:?這里是聲明依賴(lài)咖城,并不實(shí)現(xiàn)引入茬腿,如果不在子項(xiàng)目中聲明依賴(lài),是不會(huì)從父項(xiàng)目中繼承下來(lái)的宜雀;只有在子項(xiàng)目中寫(xiě)了該依賴(lài)項(xiàng)切平,并且沒(méi)有指定具體版本,才會(huì)從父項(xiàng)目中繼承該項(xiàng)辐董,并且version和scope都讀取自父pom;另外如果子項(xiàng)目中指定了版本號(hào)悴品,那么會(huì)使用子項(xiàng)目中指定的jar版本。

build:?在build中聲明了當(dāng)前使用的插件,spring-boot-maven-plugin苔严,主要功能:能夠?qū)pring Boot應(yīng)用打包為可執(zhí)行的jar或war文件定枷,然后以通常的方式運(yùn)行Spring Boot應(yīng)用。

配置

默認(rèn)的配置文件是在resource下面的application.properties届氢,在springboot的項(xiàng)目中欠窒,目前支持兩種配置文件的形式,還有一種是yaml退子,我這里使用的所有配置全為yaml形式岖妄。

server:

? port: 8761

spring:

? application:

? ? name: eureka-serve

eureka:

? server:

? ? enable-self-preservation: false

? client:

? ? register-with-eureka: false

? ? service-url:

? ? ? defaultZone: http://localhost:8761/eureka/

enable-self-preservation:?防止由于Eureka的機(jī)制導(dǎo)致Client被錯(cuò)誤顯示在線,僅在開(kāi)發(fā)環(huán)境使用寂祥,生產(chǎn)環(huán)境需緩存此信息荐虐,防止因網(wǎng)絡(luò)波動(dòng)導(dǎo)致服務(wù)頻繁上下線。

register-with-eureka:?不像注冊(cè)中心注冊(cè)自己

register-with-eureka:?此eureka server的應(yīng)用注冊(cè)地址

啟動(dòng)EurekaApplication.java

package com.springcloud.Eureka;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication

@EnableEurekaServer

public class EurekaApplication {

public static void main(String[] args) {

SpringApplication.run(EurekaApplication.class, args);

}

}

增加注解@EnableEurekaServer丸凭,在這個(gè)main函數(shù)上福扬,直接右鍵debug就可以啟動(dòng)了,啟動(dòng)成功如下圖所示:

現(xiàn)在單機(jī)的注冊(cè)中心已經(jīng)成功啟動(dòng)惜犀, 引申出來(lái)一個(gè)問(wèn)題忧换,注冊(cè)中心是所有的服務(wù)提供者注冊(cè)服務(wù)的地方,如果只有一臺(tái)機(jī)器向拆,一旦因?yàn)槟承┰颍l(fā)宕機(jī)酪耳,會(huì)造成整體服務(wù)不可用浓恳,所以,這種中心服務(wù)在生產(chǎn)環(huán)境必須是集群化部署碗暗,如果對(duì)高可用颈将、容災(zāi)和備份有更高的要求,還可以分機(jī)房部署言疗,分地區(qū)部署晴圾。

高可用集群

雙機(jī)部署

增加idea啟動(dòng)配置,點(diǎn)擊右上角的Edit Configurations噪奄,如下圖:

在打開(kāi)的窗口中新建一個(gè)springboot的啟動(dòng)方式死姚,命名為Eureka1,增加啟動(dòng)參數(shù)Program arguments:–server.port=8080勤篮,點(diǎn)擊apply保存都毒,如下圖:

使用新創(chuàng)建的啟動(dòng)配置啟動(dòng)服務(wù),現(xiàn)在可以看到正常啟動(dòng)碰缔。接下來(lái)就是修改配置文件账劲,使兩個(gè)獨(dú)立的服務(wù)變?yōu)榧骸?/p>

server:

? port: 8761

spring:

? application:

? ? name: eureka-serve

eureka:

? server:

? ? enable-self-preservation: false

? client:

? ? register-with-eureka: false

? ? service-url:

? ? ? defaultZone: http://localhost:8761/eureka/,http://localhost:8080/eureka/

只需要在defaultZone上新增一個(gè)地址我們新服務(wù)的地址http://localhost:8080/eureka/,即可由單機(jī)立馬變成雙機(jī)。

現(xiàn)在分別使用兩個(gè)啟動(dòng)配置啟動(dòng)Eureka瀑焦,可以看到如下圖所示:

紅框中的內(nèi)容表示我們現(xiàn)在已經(jīng)有兩個(gè)eureka服務(wù)了腌且。

上面講了雙機(jī)的配置方案,同理榛瓮,多機(jī)的配置就是在defaultZone后面增加其他機(jī)器的服務(wù)地址铺董。

轉(zhuǎn)自:https://geekdigging.blog.csdn.net/article/details/94365300

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市榆芦,隨后出現(xiàn)的幾起案子柄粹,更是在濱河造成了極大的恐慌,老刑警劉巖匆绣,帶你破解...
    沈念sama閱讀 212,332評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驻右,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡崎淳,警方通過(guò)查閱死者的電腦和手機(jī)堪夭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人桃犬,你說(shuō)我怎么就攤上這事帆调。” “怎么了爬迟?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,812評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)菊匿。 經(jīng)常有香客問(wèn)我付呕,道長(zhǎng),這世上最難降的妖魔是什么跌捆? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,607評(píng)論 1 284
  • 正文 為了忘掉前任徽职,我火速辦了婚禮,結(jié)果婚禮上佩厚,老公的妹妹穿的比我還像新娘姆钉。我一直安慰自己,他們只是感情好抄瓦,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,728評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布潮瓶。 她就那樣靜靜地躺著,像睡著了一般钙姊。 火紅的嫁衣襯著肌膚如雪筋讨。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,919評(píng)論 1 290
  • 那天摸恍,我揣著相機(jī)與錄音悉罕,去河邊找鬼赤屋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛壁袄,可吹牛的內(nèi)容都是我干的类早。 我是一名探鬼主播,決...
    沈念sama閱讀 39,071評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼嗜逻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼涩僻!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起栈顷,我...
    開(kāi)封第一講書(shū)人閱讀 37,802評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤逆日,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后萄凤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體室抽,經(jīng)...
    沈念sama閱讀 44,256評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,576評(píng)論 2 327
  • 正文 我和宋清朗相戀三年靡努,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坪圾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,712評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惑朦,死狀恐怖兽泄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情漾月,我是刑警寧澤病梢,帶...
    沈念sama閱讀 34,389評(píng)論 4 332
  • 正文 年R本政府宣布,位于F島的核電站梁肿,受9級(jí)特大地震影響飘千,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜栈雳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,032評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缔莲。 院中可真熱鬧哥纫,春花似錦、人聲如沸痴奏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)读拆。三九已至擅憔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間檐晕,已是汗流浹背暑诸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工蚌讼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人个榕。 一個(gè)月前我還...
    沈念sama閱讀 46,473評(píng)論 2 360
  • 正文 我出身青樓篡石,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親西采。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凰萨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,606評(píng)論 2 350

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