螞蟻金服SOFA-Boot整合SOFA-RPC(下篇)

前言

上文介紹了SOFA-RPC 的幾種調(diào)用方式,包括單向調(diào)用诗轻、同步調(diào)用、Future調(diào)用揭北、回調(diào)扳炬,引入了泛化調(diào)用和過濾器。本文將對(duì) SOFA-RPC 的高級(jí)功能搔体,包括參數(shù)配置恨樟、自定義線程池、預(yù)熱權(quán)重和自動(dòng)故障剔除等疚俱。

image

正文

1. 參數(shù)配置

SOFABoot RPC Starter 提供了方便的參數(shù)設(shè)置方式劝术。這些參數(shù)目前可以分為兩個(gè)部分。一部分是如端口呆奕,注冊(cè)中心地址等配置养晋,這類配置在 application.properties 中。另一部分是如超時(shí)時(shí)間等配置登馒,這類配置在 XML 中匙握。

XML 配置

  • 調(diào)用超時(shí)時(shí)間

如下是設(shè)置超時(shí)時(shí)間的方式,單位為 ms 陈轿,如果調(diào)用超過了這個(gè)時(shí)間則會(huì)拋出異常圈纺。服務(wù)端和客戶端都可以設(shè)置秦忿,以客戶端的超時(shí)時(shí)間設(shè)置優(yōu)先。默認(rèn)客戶端為 3000 蛾娶,目前對(duì) bolt灯谣,rest,dubbo 生效蛔琅。

<sofa:binding.bolt>
    <sofa:global-attrs timeout="5000"/>
</sofa:binding.bolt>
  • 獲取地址等待時(shí)間

如下是設(shè)置獲取地址等待時(shí)間胎许,單位為ms。在啟動(dòng)時(shí)如果服務(wù)引用方等待超過了這個(gè)時(shí)間則不會(huì)再等待地址罗售,會(huì)繼續(xù)啟動(dòng)辜窑。客戶端設(shè)置寨躁,默認(rèn)為-1穆碎,表示會(huì)一直等待到地址為止。目前對(duì) bolt职恳,rest 生效所禀。

<sofa:binding.bolt>
    <sofa:global-attrs address-wait-time="30000"/>
</sofa:binding.bolt>
  • 建立連接超時(shí)時(shí)間

如下是設(shè)置建立連接超時(shí)時(shí)間,單位為 ms 放钦。在建立連接時(shí)如果耗時(shí)超過了這個(gè)時(shí)間則會(huì)拋出異常色徘。客戶端設(shè)操禀,默認(rèn)為 5000褂策。目前對(duì) bolt,rest 生效床蜘。

<sofa:binding.bolt>
    <sofa:global-attrs connect.timeout="30000"
</sofa:binding.bolt>
  • 權(quán)重

如下是設(shè)置權(quán)重辙培。客戶端在發(fā)起調(diào)用時(shí)邢锯,如果采用的算法是隨機(jī)調(diào)用扬蕊,則會(huì)根據(jù)該權(quán)重來進(jìn)行隨機(jī)。服務(wù)端設(shè)置丹擎,默認(rèn)為 100尾抑。目前對(duì) bolt 生效。

<sofa:binding.bolt>
    <sofa:global-attrs weight="200"/>
</sofa:binding.bolt>
  • lazy 連接

默認(rèn)情況下客戶端在注冊(cè)中心推送地址到客戶端時(shí)蒂培,就立即建立好連接再愈,這個(gè)過程通常是在第一次調(diào)用之前進(jìn)行的。如果設(shè)置服務(wù)引用的屬性 lazy 為 true护戳,客戶端在第一次調(diào)用時(shí)才和所要調(diào)用的遠(yuǎn)程地址建立連接翎冲。默認(rèn)為 false。

如下設(shè)置 lazy 連接方式媳荒,將 lazy 屬性設(shè)為 true抗悍。目前支持 bolt 和 dubbo 協(xié)議驹饺。

<sofa:reference id="lazyServiceReferenceBolt" interface="com.ostenant.sofa.rpc.example.lazy.LazyService">
    <sofa:binding.bolt>
        <sofa:global-attrs lazy="true"/>
    </sofa:binding.bolt>
</sofa:reference>
  • check 屬性

默認(rèn)情況下客戶端在啟動(dòng)時(shí),服務(wù)引用不要求存在可用的地址和連接缴渊。如果設(shè)置服務(wù)引用的屬性 check 為 true赏壹,客戶端在啟動(dòng)時(shí),服務(wù)引用會(huì)檢查是否存在對(duì)應(yīng)的地址和連接衔沼,如果不存在會(huì)拋出異常蝌借。默認(rèn)為 false。

如下設(shè)置 check 連接方式指蚁,將 check 屬性設(shè)為 true菩佑。目前支持 bolt 和 dubbo 協(xié)議。

<sofa:reference id="checkServiceReferenceBolt" interface="com.ostenant.sofa.rpc.example.check.CheckService">
    <sofa:binding.bolt>
        <sofa:global-attrs check="true"/>
    </sofa:binding.bolt>
</sofa:reference>
  • 重試次數(shù)

重試次數(shù)欣舵,即在第一次調(diào)用失敗后重試的最大次數(shù)擎鸠,如果重試成功則不再繼續(xù)重試。默認(rèn)為 0缘圈。如下設(shè)置調(diào)用次數(shù),利用 retries 屬性指定重試次數(shù)袜蚕。目前支持 bolt 和 dubbo 協(xié)議糟把。

<sofa:reference id="retriesServiceReferenceBolt" interface="com.ostenant.sofa.rpc.example.retries.RetriesService">
    <sofa:binding.bolt>
        <sofa:global-attrs retries="2"/>
    </sofa:binding.bolt>
</sofa:reference>
  • 負(fù)載均衡

如下選擇負(fù)載均衡的方式,利用 loadBalancer 屬性指定調(diào)用時(shí)候使用的負(fù)載均衡策略牲剃,默認(rèn)為 random遣疯。

目前支持 random,localPref凿傅,roundRobin缠犀,consistentHash,weightRoundRobin 五種負(fù)載均衡策略聪舒,具體可見 SOFARPC 負(fù)載均衡相關(guān)介紹辨液。目前支持bolt協(xié)議。

<sofa:reference id="loadBalancerServiceReference" interface="com.ostenant.sofa.rpc.example.loadBalancer.LoadBalancerService">
    <sofa:binding.bolt>
        <sofa:global-attrs loadBalancer="random"/>
    </sofa:binding.bolt>
</sofa:reference>
  • 方法級(jí)別配置

如下箱残,sofa:method 元素是方法級(jí)別的配置滔迈。方法級(jí)別的配置優(yōu)先級(jí)比服務(wù)級(jí)別的更高。name 屬性指定了方法的名字被辑。支持調(diào)用超時(shí)時(shí)間燎悍,調(diào)用方式,回調(diào)類的設(shè)置盼理。方法級(jí)別的配置與服務(wù)級(jí)別的配置所生效的協(xié)議一樣谈山。

<sofa:binding.bolt>
    <sofa:method name="sayMethod" timeout="3000" type="sync" callback-ref="xxx"/>
</sofa:binding.bolt>

Properties 配置

屬性 描述 默認(rèn)值
spring.application.name 應(yīng)用名
logging.path 日志路徑
logging.level.com.alipay.sofa.rpc.boot sofa-rpc-boot-start的日志級(jí)別(starter自身的日志) info
logging.level.com.alipay.sofa.rpc sofa-rpc的日志級(jí)別(sofa-rpc核心日志基本在這里) info
com.alipay.sofa.rpc.bolt.port bolt 端口 22000
com.alipay.sofa.rpc.bolt.io.thread.count bolt 的 io 線程數(shù)
com.alipay.sofa.rpc.bolt.executor.thread.count bolt 的業(yè)務(wù)線程最大值 200
com.alipay.sofa.rpc.bolt.accepts.count bolt 能夠支持的最大長(zhǎng)連接數(shù) 100000
com.alipay.sofa.rpc.rest.hostname rest 的 hostname
com.alipay.sofa.rpc.rest.port rest 端口 8341
com.alipay.sofa.rpc.rest.io.thread.count rest 的 io 線程數(shù) cpu 核數(shù) * 2
com.alipay.sofa.rpc.rest.executor.thread.count rest 的業(yè)務(wù)線程數(shù) 200
com.alipay.sofa.rpc.rest.max.request.size rest 的最大 byte 請(qǐng)求長(zhǎng)度 1024 * 1024 * 10
com.alipay.sofa.rpc.rest.telnet rest 是否支持 telnet true
com.alipay.sofa.rpc.rest.daemon rest 是否支持 daemon true
com.alipay.sofa.rpc.dubbo.port dubbo 的端口 20880
com.alipay.sofa.rpc.dubbo.io.thread.count dubbo 的 io 線程數(shù) cpu 核數(shù) + 1
com.alipay.sofa.rpc.dubbo.executor.thread.count dubbo 的業(yè)務(wù)線程數(shù) 100
com.alipay.sofa.rpc.dubbo.accepts.count dubbo能夠支持的最大長(zhǎng)連接數(shù) 0,表示不限制

2. 自定義線程池

SOFA-RPC 支持自定義業(yè)務(wù)線程池宏怔∽嗦罚可以為指定服務(wù)設(shè)置一個(gè)獨(dú)立的業(yè)務(wù)線程池畴椰,和 SOFA-RPC 自身的業(yè)務(wù)線程池是隔離的,多個(gè)服務(wù)可以共用一個(gè)獨(dú)立的線程池思劳。目前支持 bolt 協(xié)議迅矛。

在 SOFA-Boot 環(huán)境中可以為一個(gè)服務(wù)設(shè)置一個(gè)自定義線程池,配置如下:

  • 聲明自定義線程池

如下聲明一個(gè)自定義線程池潜叛,class 必須為 com.alipay.sofa.rpc.server.UserThreadPool秽褒,這是 SOFA-RPC 提供的類,init-method="init" 也必須聲明以進(jìn)行初始化威兜。

<bean id="customerThreadPool" class="com.alipay.sofa.rpc.server.UserThreadPool" init-method="init">
    <property name="corePoolSize" value="10"/>
    <property name="maximumPoolSize" value="10"/>
    <property name="queueSize" value="5"/>
    <property name="threadPoolName" value="customerThreadPool_name"/>
</bean>
  • 為服務(wù)設(shè)置自定義線程池

如下通過 sofa:global-attrs 元素的 thread-pool-ref 屬性為該服務(wù)設(shè)置自定義線程池销斟。customerThreadPool 是上面自定義線程池的 bean id

<bean id="threadPoolServiceImpl" class="com.ostenant.sofa.rpc.example.threadpool.ThreadPoolServiceImpl"/>
<sofa:service ref="threadPoolServiceImpl" interface="com.alipay.sofa.rpc.samples.threadpool.ThreadPoolService">
    <sofa:binding.bolt>
        <sofa:global-attrs thread-pool-ref="customerThreadPool"/>
    </sofa:binding.bolt>
</sofa:service>

3. 預(yù)熱權(quán)重

SOFA-RPC 提供了預(yù)熱權(quán)重功能讓客戶端機(jī)器能夠根據(jù)服務(wù)端的相應(yīng)權(quán)重進(jìn)行流量的分發(fā)椒舵。目前支持 bolt 協(xié)議蚂踊。

SOFA-Boot 中提供了一系列參數(shù)屬性,對(duì)指定服務(wù)進(jìn)行預(yù)熱配置笔宿±缰樱客戶端機(jī)器能夠自動(dòng)解析這些參數(shù),并按權(quán)重進(jìn)行流量分發(fā)泼橘。

  • warm-up-time: 服務(wù)的預(yù)熱時(shí)間
  • warm-up-weight: 服務(wù)設(shè)置預(yù)熱期間權(quán)重
  • weight: 服務(wù)設(shè)置預(yù)熱完后的權(quán)重
<sofa:reference id="sampleRestFacadeReferenceBolt" interface="com.alipay.sofa.endpoint.facade.SampleFacade">
    <sofa:binding.bolt>
         <sofa:global-attrs warm-up-time="10000" warm-up-weight="10" weight="100"/>
     </sofa:binding.bolt>
</sofa:reference>

上述配置中涝动,該服務(wù)的預(yù)熱期為10s,在預(yù)熱期內(nèi)權(quán)重為10炬灭,預(yù)熱期結(jié)束后的正常權(quán)重為100醋粟。

如果該服務(wù)一共發(fā)布到A,B兩個(gè)機(jī)器上重归。A機(jī)器正處于預(yù)熱期內(nèi)米愿,使用上述配置;B已經(jīng)完成預(yù)熱鼻吮,正常權(quán)重為200育苟。那么客戶端在調(diào)用的時(shí)候,此時(shí)流量分發(fā)的比重為10:200狈网;A機(jī)器預(yù)熱結(jié)束后宙搬,流量分發(fā)比重為100:200。

4. 自動(dòng)故障剔除

自動(dòng)故障剔除會(huì)自動(dòng)監(jiān)控 RPC 調(diào)用的情況拓哺,對(duì)故障節(jié)點(diǎn)進(jìn)行權(quán)重降級(jí)勇垛,并在節(jié)點(diǎn)恢復(fù)健康時(shí)進(jìn)行權(quán)重恢復(fù)。目前支持 bolt 協(xié)議士鸥。

在 SOFA-Boot 中闲孤,只需要將自動(dòng)故障剔除的參數(shù)配置到 application.properties 即可。只配置自己關(guān)心的參數(shù),其余參數(shù)會(huì)取默認(rèn)值讼积。需要注意的是肥照,rpc.aft.regulation.effective 是該功能的全局開關(guān),如果關(guān)閉則該功能不會(huì)運(yùn)行勤众,其他參數(shù)也都不生效舆绎。

  • 自動(dòng)故障剔除的配置參數(shù)意義
屬性 描述 默認(rèn)值
com.alipay.sofa.rpc.aft.time.window 時(shí)間窗口大小:對(duì)統(tǒng)計(jì)信息計(jì)算的周期们颜。 10s
com.alipay.sofa.rpc.aft.least.window.count 時(shí)間窗口內(nèi)最少調(diào)用數(shù):只有在時(shí)間窗口內(nèi)達(dá)到了該最低值的數(shù)據(jù)才會(huì)被加入到計(jì)算和調(diào)控中吕朵。 10次
com.alipay.sofa.rpc.aft.least.window.exception.rate.multiple 時(shí)間窗口內(nèi)異常率與服務(wù)平均異常率的降級(jí)比值:在對(duì)統(tǒng)計(jì)信息進(jìn)行計(jì)算的時(shí)候,會(huì)計(jì)算出該服務(wù)所有有效調(diào)用ip的平均異常率窥突,如果某個(gè)ip的異常率大于等于了這個(gè)最低比值努溃,則會(huì)被降級(jí)。 6倍
com.alipay.sofa.rpc.aft.weight.degrade.rate 降級(jí)比率:地址在進(jìn)行權(quán)重降級(jí)時(shí)的降級(jí)比率阻问。 1/20
com.alipay.sofa.rpc.aft.weight.recover.rate 恢復(fù)比率:地址在進(jìn)行權(quán)重恢復(fù)時(shí)的恢復(fù)比率梧税。 2倍
com.alipay.sofa.rpc.aft.degrade.effective 降級(jí)開關(guān):如果應(yīng)用打開了這個(gè)開關(guān),則會(huì)對(duì)符合降級(jí)的地址進(jìn)行降級(jí)称近,否則只會(huì)進(jìn)行日志打印第队。 false(關(guān)閉)
com.alipay.sofa.rpc.aft.degrade.least.weight 降級(jí)最小權(quán)重:地址權(quán)重被降級(jí)后的值如果小于這個(gè)最小權(quán)重,則會(huì)以該最小權(quán)重作為降級(jí)后的值刨秆。 0
com.alipay.sofa.rpc.aft.degrade.max.ip.count 降級(jí)的最大ip數(shù):同一個(gè)服務(wù)被降級(jí)的ip數(shù)不能超過該值斥铺。 2
com.alipay.sofa.rpc.aft.regulation.effective 全局開關(guān):如果應(yīng)用打開了這個(gè)開關(guān),則會(huì)開啟整個(gè)單點(diǎn)故障自動(dòng)剔除摘除功能坛善,否則完全不進(jìn)入該功能的邏輯。 false(關(guān)閉)
  • 配置示例
com.alipay.sofa.rpc.aft.time.window=20
com.alipay.sofa.rpc.aft.least.window.count=30
com.alipay.sofa.rpc.aft.least.window.exception.rate.multiple=6
com.alipay.sofa.rpc.aft.weight.degrade.rate=0.5
com.alipay.sofa.rpc.aft.weight.recover.rate=1.2
com.alipay.sofa.rpc.aft.degrade.effective=ture
com.alipay.sofa.rpc.aft.degrade.least.weight=1
com.alipay.sofa.rpc.aft.degrade.max.ip.count=2
com.alipay.sofa.rpc.aft.regulation.effective=true

上述配置中邻眷,默認(rèn)打開了自動(dòng)故障剔除功能和降級(jí)開關(guān)眠屎。當(dāng)節(jié)點(diǎn)出現(xiàn)故障時(shí)會(huì)被進(jìn)行權(quán)重降級(jí),在恢復(fù)時(shí)會(huì)被進(jìn)行權(quán)重恢復(fù)肆饶。

每隔 20s 進(jìn)行一次節(jié)點(diǎn)健康狀態(tài)的度量改衩,20s 內(nèi)調(diào)用次數(shù)超過 30 次的節(jié)點(diǎn)才被作為計(jì)算數(shù)據(jù)。

如果單個(gè)節(jié)點(diǎn)的異常率超過了所有節(jié)點(diǎn)的平均異常率的 6 倍驯镊,則對(duì)該節(jié)點(diǎn)進(jìn)行權(quán)重降級(jí)葫督,降級(jí)的比率為 0.5。權(quán)重最小降級(jí)到 1板惑。如果單個(gè)節(jié)點(diǎn)的異常率低于了平均異常率的 6 倍橄镜,則對(duì)該節(jié)點(diǎn)進(jìn)行權(quán)重恢復(fù),恢復(fù)的比率為1.2冯乘。單個(gè)服務(wù)最多降級(jí) 2 個(gè) IP洽胶。

小結(jié)

本文介紹了 SOFA-RPC 的高級(jí)功能,包括參數(shù)配置裆馒,自定義線程池姊氓,服務(wù)預(yù)熱和自動(dòng)降級(jí)與權(quán)重恢復(fù)等用法丐怯。對(duì)于 SOFA-RPC 提供的基本功能,以及整合 SOFA-Boot 的配置和用法就介紹完了翔横。對(duì)此有了初步的認(rèn)識(shí)后读跷,有利于后續(xù)深入實(shí)現(xiàn)原理和剖析源碼。


歡迎關(guān)注技術(shù)公眾號(hào): 零壹技術(shù)棧

image

本帳號(hào)將持續(xù)分享后端技術(shù)干貨禾唁,包括虛擬機(jī)基礎(chǔ)效览,多線程編程,高性能框架蟀俊,異步钦铺、緩存和消息中間件,分布式和微服務(wù)肢预,架構(gòu)學(xué)習(xí)和進(jìn)階等學(xué)習(xí)資料和文章矛洞。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市烫映,隨后出現(xiàn)的幾起案子沼本,更是在濱河造成了極大的恐慌,老刑警劉巖锭沟,帶你破解...
    沈念sama閱讀 212,222評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抽兆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡族淮,警方通過查閱死者的電腦和手機(jī)辫红,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祝辣,“玉大人贴妻,你說我怎么就攤上這事◎保” “怎么了名惩?”我有些...
    開封第一講書人閱讀 157,720評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)孕荠。 經(jīng)常有香客問我娩鹉,道長(zhǎng),這世上最難降的妖魔是什么稚伍? 我笑而不...
    開封第一講書人閱讀 56,568評(píng)論 1 284
  • 正文 為了忘掉前任弯予,我火速辦了婚禮,結(jié)果婚禮上槐瑞,老公的妹妹穿的比我還像新娘熙涤。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,696評(píng)論 6 386
  • 文/花漫 我一把揭開白布祠挫。 她就那樣靜靜地躺著那槽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪等舔。 梳的紋絲不亂的頭發(fā)上骚灸,一...
    開封第一講書人閱讀 49,879評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音慌植,去河邊找鬼甚牲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蝶柿,可吹牛的內(nèi)容都是我干的丈钙。 我是一名探鬼主播,決...
    沈念sama閱讀 39,028評(píng)論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼交汤,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼雏赦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起芙扎,我...
    開封第一講書人閱讀 37,773評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤星岗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后戒洼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俏橘,經(jīng)...
    沈念sama閱讀 44,220評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,550評(píng)論 2 327
  • 正文 我和宋清朗相戀三年圈浇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寥掐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,697評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡磷蜀,死狀恐怖曹仗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蠕搜,我是刑警寧澤,帶...
    沈念sama閱讀 34,360評(píng)論 4 332
  • 正文 年R本政府宣布收壕,位于F島的核電站妓灌,受9級(jí)特大地震影響缔御,放射性物質(zhì)發(fā)生泄漏盗蟆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,002評(píng)論 3 315
  • 文/蒙蒙 一葱蝗、第九天 我趴在偏房一處隱蔽的房頂上張望圃验。 院中可真熱鬧掉伏,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鸡捐,卻和暖如春栈暇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背箍镜。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工源祈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人色迂。 一個(gè)月前我還...
    沈念sama閱讀 46,433評(píng)論 2 360
  • 正文 我出身青樓香缺,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親歇僧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子图张,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,587評(píng)論 2 350

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

  • 簡(jiǎn)介摘要SOFARPC服務(wù)調(diào)用創(chuàng)建服務(wù)引用配置ConsumerConfig,自定義設(shè)置接口名稱馏慨、調(diào)用協(xié)議埂淮、直連調(diào)用...
    鋒Nic閱讀 9,671評(píng)論 1 7
  • 第一天二十四小時(shí),焦慮著看著他的臉写隶,但很開心一直都白白凈凈的倔撞,沒有出現(xiàn)哥哥的病理性黃疸,總算心理放松了下來慕趴,還可葵...
    蘇田田閱讀 203評(píng)論 0 0
  • 當(dāng)掃盡校園的最后一片落葉時(shí)痪蝇,冬真的來了!冬天的校服不想離身,早晚上下學(xué)的路上冕房,寒風(fēng)拂過躏啰,臉頰生疼“也幔可孩子們不...
    Ai相見歡閱讀 469評(píng)論 0 0
  • 一家小店给僵,從早上開門營(yíng)業(yè)到午餐后關(guān)門休息期間座無虛席,排隊(duì)等候者經(jīng)常眾之详拙。 不記得是誰推薦來的帝际,反正是來了第一次后...
    三月江花閱讀 535評(píng)論 10 2