Spring Cloud 集成 Nacos 實(shí)現(xiàn)服務(wù)治理和配置中心

什么是 Nacos?官方直通車

Nacos集成

一、Nacos 服務(wù)搭建

1.1 環(huán)境準(zhǔn)備

  1. 騰訊云 Linux centos 7.5 64位
  2. 本地windows 64 bit JDK 1.8卫病;
  3. 本地 Maven 3.6.3割坠;

1.2 下載安裝

  • 下載源碼并打包源碼包(PS,也可以直接下載源碼包)
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U  
ls -al distribution/target/
  • 上傳源碼包并解壓縮到云服務(wù)器
tar -xvf nacos-server-$version.tar.gz

1.3 運(yùn)行 nacos server

Nacos支持三種運(yùn)行模式:

  • 單機(jī)模式:用于測(cè)試和單機(jī)試用
  • 集群模式:用于生產(chǎn)環(huán)境速客,確保高可用
  • 多集群模式:用于多數(shù)據(jù)中心場(chǎng)景

單機(jī)模式

cd nacos/bin
[root@VM-0-5-centos bin]# ll
total 32
-rw-r--r-- 1 root root  720 Sep 20 20:35 derby.log
drwxr-xr-x 2 root root 4096 Sep 22 19:04 logs
-rwxr-xr-x 1 root root  978 Sep 20 15:16 shutdown.cmd
-rwxr-xr-x 1 root root  979 Sep 20 15:16 shutdown.sh
-rwxr-xr-x 1 root root 3535 Sep 20 15:16 startup.cmd
-rwxr-xr-x 1 root root 5028 Sep 20 20:07 startup.sh
drwxr-xr-x 3 root root 4096 Sep 20 20:08 work

啟動(dòng)命令(standalone代表著單機(jī)模式運(yùn)行叠赐,非集群模式):
sh startup.sh -m standalone
ps: 
1. 首次啟動(dòng)可能存在sh權(quán)限問(wèn)題欲账,需要對(duì)sh進(jìn)行賦權(quán)
chmod +x startup.sh
2. 首次啟動(dòng)可能報(bào).sh line 2 :$'\r': command not found
原因是 windows 下的換行符是 \r\n,而 linux 下的換行符是 \n
解決方案: 
# 安裝 dos2unix
yum install dos2unix -y
# 執(zhí)行命令
dos2unix startup.sh
# 關(guān)閉頁(yè)面燎悍,后臺(tái)運(yùn)行
./startBatch.sh & 

單機(jī)模式支持mysql
nacos 0.7 以后支持mysql數(shù)據(jù)源:

  • 安裝mysql 5.6.5+
  • 創(chuàng)建nacos database, 初始化nacos-mysql.sql
  • 修改conf/application.properties文件敬惦,增加支持mysql數(shù)據(jù)源配置(目前只支持mysql)盼理,添加mysql數(shù)據(jù)源的url谈山、用戶名和密碼。
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=root

再以單機(jī)模式啟動(dòng)nacos宏怔,nacos所有寫(xiě)嵌入式數(shù)據(jù)庫(kù)的數(shù)據(jù)都寫(xiě)到了mysql奏路。
訪問(wèn)nacos控制臺(tái)

遇到的坑畴椰,在首次啟動(dòng)后臺(tái)服務(wù)器報(bào)錯(cuò):jmenv.tbsite.net

aused by: com.alibaba.nacos.api.exception.NacosException: java.net.UnknownHostException: jmenv.tbsite.net
        at com.alibaba.nacos.core.cluster.lookup.AddressServerMemberLookup.run(AddressServerMemberLookup.java:110)
        at com.alibaba.nacos.core.cluster.lookup.AddressServerMemberLookup.start(AddressServerMemberLookup.java:66)
        at com.alibaba.nacos.core.cluster.ServerMemberManager.initAndStartLookup(ServerMemberManager.java:156)
        at com.alibaba.nacos.core.cluster.ServerMemberManager.init(ServerMemberManager.java:144)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
        ... 111 common frames omitted

解決辦法是,conf中只給了一個(gè)cluster.conf.example文件鸽粉,需要copy成一個(gè)cluster.conf即可斜脂。

集群模式

多集群模式

二、Spring Cloud nacos注冊(cè)中心和配置中心集成

  • 通過(guò) Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 實(shí)現(xiàn)服務(wù)的注冊(cè)與發(fā)現(xiàn)触机。
  • 通過(guò) Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 實(shí)現(xiàn)配置的動(dòng)態(tài)管理帚戳。

Spring Cloud可以實(shí)現(xiàn)零代碼切換到Nacos注冊(cè)中心,只需要引入nacos依賴并增加配置nacos注冊(cè)中心儡首。
版本說(shuō)明:

 <spring-boot-dependencies.version>2.2.9.RELEASE</spring-boot-dependencies.version>
 <spring-cloud-dependencies.version>Hoxton.SR8</spring-cloud-dependencies.version>
 <spring-cloud-alibaba.version>2.2.3.RELEASE</spring-cloud-alibaba.version>

截止2020.09.22 spring-cloud-alibaba 僅支持Spring Boot 2.2.x

2.1 Nacos 快速集成

  • 引入Nacos client 依賴
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
  • 通過(guò)Spring Cloud 原生注解開(kāi)啟注冊(cè)服務(wù)以及自動(dòng)刷新配置功能
package com.qt.mall;

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


@EnableDiscoveryClient
@RefreshScope
@SpringBootApplication
public class NacosServiceApplication {

  public static void main(String[] args) {
    SpringApplication.run(NacosServiceApplication.class, args);
  }

}

  • 在配置中增加nacos地址片任、注冊(cè)應(yīng)用名稱、配置中心配置
    bootstrap.yml
# mvn 命令啟動(dòng)添加--spring.profiles.active=test
spring:
  application:
    name: nacos-service
  profiles:
    active: dev

bootstrap-dev.yml

spring:
  main:
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      discovery:
        server-addr: 120.53.121.130
        namespace: 180d5ec1-9253-4c55-a018-e27e609b83f3
        #ip: 192.168.128.41
      config:
        server-addr: 120.53.121.130
        file-extension: yml
        group: nacos-service
        namespace: 180d5ec1-9253-4c55-a018-e27e609b83f3
  • 登錄nacos控制臺(tái)蔬胯,增加配置



  • 啟動(dòng)服務(wù)对供,驗(yàn)證注冊(cè)服務(wù)和配置中心結(jié)果



2.2 配置說(shuō)明

nacos除了核心注冊(cè)中心、配置中心連接配置外氛濒,可以實(shí)現(xiàn)代碼零配置解決方案产场。
nacos動(dòng)態(tài)配置服務(wù)可以讓系統(tǒng)以中心化、外部化和動(dòng)態(tài)化的方式管理所有環(huán)境的應(yīng)用配置和服務(wù)配置舞竿。

  • spring.application.name:注冊(cè)服務(wù)名稱京景,也是構(gòu)成 Nacos 配置管理 dataId字段的一部分。
# 在 Nacos Spring Cloud 中骗奖,dataId 的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默認(rèn)為 spring.application.name 的值醋粟,也可以通過(guò)配置項(xiàng) spring.cloud.nacos.config.prefix來(lái)配置。
  • spring.profiles.active 即為當(dāng)前環(huán)境對(duì)應(yīng)的 profile重归,詳情可以參考 Spring Boot文檔米愿。 注意:當(dāng) spring.profiles.active 為空時(shí),對(duì)應(yīng)的連接符 - 也將不存在鼻吮,dataId 的拼接格式變成 ${prefix}.${file-extension}
  • file-exetension 為配置內(nèi)容的數(shù)據(jù)格式育苟,可以通過(guò)配置項(xiàng) spring.cloud.nacos.config.file-extension 來(lái)配置。目前只支持 propertiesyaml 類型椎木。

2.3 Nacos數(shù)據(jù)隔離模式

Nacos提供四層的數(shù)據(jù)隔離模式:

nacos數(shù)據(jù)隔離模型

  • Company:用戶賬號(hào)對(duì)應(yīng)的可能是一個(gè)企業(yè)或者獨(dú)立的個(gè)體违柏,這個(gè)數(shù)據(jù)一般情況下不會(huì)透?jìng)鞯椒?wù)注冊(cè)中心。
  • Namespace: 一個(gè)用戶賬號(hào)可以新建多個(gè)命名空間香椎,每個(gè)命名空間對(duì)應(yīng)一個(gè)客戶端實(shí)例漱竖,這個(gè)命名空間對(duì)應(yīng)的注冊(cè)中心物理集群是可以根據(jù)規(guī)則進(jìn)行路由的,這樣可以讓注冊(cè)中心內(nèi)部的升級(jí)和遷移對(duì)用戶是無(wú)感知的畜伐,同時(shí)可以根據(jù)用戶的級(jí)別馍惹,為用戶提供不同服務(wù)級(jí)別的物理集群。Namespace常用于進(jìn)行租戶粒度的配置隔離。不同的命名空間下万矾,可以存在相同的 Group 或 Data ID 的配置悼吱。Namespace 的常用場(chǎng)景之一是不同環(huán)境的配置的區(qū)分隔離,例如開(kāi)發(fā)測(cè)試環(huán)境和生產(chǎn)環(huán)境的資源(如配置良狈、服務(wù))隔離等后添。
  • Group:Nacos 中的一組配置集,是組織配置的維度之一薪丁。通過(guò)一個(gè)有意義的字符串(如 Buy 或 Trade )對(duì)配置集進(jìn)行分組遇西,從而區(qū)分 Data ID 相同的配置集。當(dāng)您在 Nacos 上創(chuàng)建一個(gè)配置時(shí)严嗜,如果未填寫(xiě)配置分組的名稱努溃,則配置分組的名稱默認(rèn)采用 DEFAULT_GROUP 。配置分組的常見(jiàn)場(chǎng)景:不同的應(yīng)用或組件使用了相同的配置類型阻问,如 database_url 配置和 MQ_topic 配置梧税。
  • Service:服務(wù)是指一個(gè)或一組軟件功能(例如特定信息的檢索或一組操作的執(zhí)行),其目的是不同的客戶端可以為不同的目的重用(例如通過(guò)跨進(jìn)程的網(wǎng)絡(luò)調(diào)用)称近。Nacos 支持主流的服務(wù)生態(tài)第队,如 Kubernetes Service、gRPC|Dubbo RPC Service 或者 Spring Cloud RESTful Service.

三刨秆、高級(jí)應(yīng)用

3.1 基于Namespace命名空間的資源隔離

根據(jù)Nacos不同的Namespace下凳谦,可以存在相同的 Group 或 Data ID 的配置的數(shù)據(jù)隔離特性,我們可以很好的實(shí)現(xiàn)同一Nacos Server集群統(tǒng)一管理項(xiàng)目不同環(huán)境的資源(注冊(cè)服務(wù)實(shí)例衡未、配置等)

  • 定義各個(gè)環(huán)境命名空間


    命名空間管理
  • 多環(huán)境配置支持
    基于spring.profile.active尸执,增加應(yīng)用的多環(huán)境配置支持,不同環(huán)境配置對(duì)應(yīng)的Nacos命名空間缓醋,根據(jù)應(yīng)用啟動(dòng)的環(huán)境變量參數(shù)自動(dòng)識(shí)別對(duì)應(yīng)的Nacos配置


    多環(huán)境支持
# dev配置
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.128.20
        namespace: 1c53b59e-9f3d-44a4-b2d7-5faaea25b3c6 # dev 環(huán)境的命名空間
        ip: 192.168.128.20
      config:
        server-addr: 192.168.128.20
        file-extension: yml
        group: ds-user-center-server
        namespace: 1c53b59e-9f3d-44a4-b2d7-5faaea25b3c6 # dev 環(huán)境的命名空間
        shared-configs:
          - data-id: mqclient-config-share.yml
            group: MQCLIENT_GROUP
            refresh: true
        extension-configs:
          - data-id: global-public-share.yml
            group: share
            refresh: true
          - data-id: resource-service-public-share.yml
            group: share
            refresh: true

test如失、qa、prod配置類似送粱。

3.2 Nacos自定義配置

Nacos除了支持file-extension模式的data-id.yml或data-id.properties的配置外褪贵, 自0.2.1版本以后還支持自定義的data-id的配置。目前主要支持shared-configs模式和extension-configs模式抗俄,配置示例:

      shared-configs:
          - data-id: mqclient-config-share.yml
            group: MQCLIENT_GROUP
            refresh: true
        extension-configs:
          - data-id: global-public-share.yml
            group: share
            refresh: true
          - data-id: resource-service-public-share.yml
            group: share
            refresh: true

3.2.1 配置優(yōu)先級(jí)

綜上脆丁,Spring Cloud Alibaba Nacos Config 提供了三種配置能力從 Nacos 拉取相關(guān)的配置。

A: 通過(guò) spring.cloud.nacos.config.shared-configs[n].data-id 支持多個(gè)共享 Data Id 的配置
B: 通過(guò) spring.cloud.nacos.config.extension-configs[n].data-id 的方式支持多個(gè)擴(kuò)展 Data Id 的配置
C: 通過(guò)內(nèi)部相關(guān)規(guī)則(應(yīng)用名动雹、應(yīng)用名+ Profile )自動(dòng)生成相關(guān)的 Data Id 配置

當(dāng)三種方式共同使用時(shí)槽卫,他們的一個(gè)優(yōu)先級(jí)關(guān)系是:A < B < C
Nacos-config

3.3 Nacos配置灰度發(fā)布

Nacos 1.1.0版本以后,支持灰度配置胰蝠。Nacos配置的灰度發(fā)布是基于Nacos配置中心Beta發(fā)布功能進(jìn)行實(shí)現(xiàn)歼培,默認(rèn)不勾選該功能震蒋。
灰度配置流程如下:

  • 預(yù)備同一應(yīng)用兩個(gè)節(jié)點(diǎn):

192.168.132.49
192.168.128.20

  • 在Nacos配置中心執(zhí)行Beta發(fā)布,指定只發(fā)布到49節(jié)點(diǎn)機(jī)器丐怯,將配置suffixurl 和 shortSuffixurl
    suffixurl: http://%s.easymall-dev01.com
    shortSuffixurl: all.easymall-dev01.com
    灰度發(fā)布

查看日志,可以驗(yàn)證到49機(jī)器配置發(fā)布生效:
而20機(jī)器翔横,無(wú)任何反應(yīng)读跷,說(shuō)明配置未發(fā)布到20:


49Nacos配置更新日志

20服務(wù)日志無(wú)任何打印輸出

進(jìn)一步通過(guò)接口驗(yàn)證灰度發(fā)布是否生效,可以看到49發(fā)布的配置已經(jīng)生效禾唁,而20機(jī)器接口仍是灰度發(fā)布前配置內(nèi)容效览。


49配置生效

20配置未生效

灰度驗(yàn)證通過(guò)后,關(guān)閉灰度荡短,將配置正式發(fā)布丐枉,再次驗(yàn)證20機(jī)器接口,可以發(fā)現(xiàn)配置也生效


20配置生效

3.4 基于Nacos元數(shù)據(jù)實(shí)現(xiàn)Spring Cloud 微服務(wù)灰度發(fā)布實(shí)踐

應(yīng)用迭代過(guò)程中會(huì)不斷有新版本API發(fā)布掘托,在新版本正式發(fā)布前瘦锹,可以使用灰度流量控制先進(jìn)行小規(guī)模驗(yàn)證,將升級(jí)帶來(lái)的影響限定在指定的用戶范圍內(nèi)可以最大程度上保障線上業(yè)務(wù)的穩(wěn)定運(yùn)行闪盔,通過(guò)收集使用體驗(yàn)的數(shù)據(jù)弯院,對(duì)應(yīng)用新版本的功能、性能泪掀、穩(wěn)定性等指標(biāo)進(jìn)行評(píng)判听绳,然后再全量升級(jí)。

這里主要參考了Nepxion 灰度框架异赫。

3.4.1 調(diào)用鏈分析

外部調(diào)用

web請(qǐng)求 ==> Gateway ==> 服務(wù)
GateWay 轉(zhuǎn)發(fā)請(qǐng)求時(shí)椅挣,會(huì)根據(jù)Ribbon(目前采用輪詢策略)從服務(wù)實(shí)例選擇對(duì)應(yīng)服務(wù)進(jìn)行轉(zhuǎn)發(fā)

內(nèi)部調(diào)用

請(qǐng)求 ==> Feign調(diào)用==> 服務(wù)
目前內(nèi)部服務(wù)間調(diào)用沒(méi)有經(jīng)過(guò)網(wǎng)關(guān),而是直接根據(jù)Ribbon(目前采用輪詢策略)從服務(wù)實(shí)例選擇對(duì)應(yīng)服務(wù)進(jìn)行接口調(diào)用塔拳。

3.4.2 預(yù)備知識(shí)

Nacos元數(shù)據(jù)

Nacos數(shù)據(jù)(如配置和服務(wù))描述信息鼠证,如服務(wù)版本、權(quán)重靠抑、容災(zāi)策略名惩、負(fù)載均衡策略、鑒權(quán)配置孕荠、各種自定義標(biāo)簽 (label)娩鹉,從作用范圍來(lái)看,分為服務(wù)級(jí)別的元信息稚伍、集群的元信息及實(shí)例的元信息弯予。
設(shè)置Nacos元數(shù)據(jù)

# Nacos config for qt
spring.cloud.nacos.discovery.metadata.group=qt-service-group   #定義所屬組,也可以通過(guò)服務(wù)名前綴來(lái)自動(dòng)產(chǎn)生服務(wù)組名
spring.cloud.nacos.discovery.metadata.version=1.0     #定義版本號(hào) 也可以通過(guò)Git插件方式自動(dòng)產(chǎn)生版本號(hào)
spring.cloud.nacos.discovery.metadata.region=dev  定義區(qū)域
spring.cloud.nacos.discovery.metadata.env=env1   定義環(huán)境
spring.cloud.nacos.discovery.metadata.zone=zone1  #定義所屬可用區(qū)

3.4.3 實(shí)現(xiàn)方案

實(shí)現(xiàn)思路

  • 根據(jù)應(yīng)用注冊(cè)的實(shí)例元數(shù)據(jù)來(lái)實(shí)現(xiàn)灰度个曙,比如選擇version來(lái)標(biāo)記灰度版本:
spring.cloud.nacos.discovery.metadata.version=1.1 
  • 基于網(wǎng)關(guān)為灰度觸點(diǎn)锈嫩,自定義Gate Way Filter, 實(shí)現(xiàn)從Spring Cloud Gateway發(fā)起的調(diào)用都走版本為x.x的服務(wù)或者Spring Cloud Gateway發(fā)起的調(diào)用按照配置的的灰度策略受楼,如A:1.1 ==> 網(wǎng)關(guān) B:1.2 ==> 網(wǎng)關(guān)==>C:1.3。
  • 基于Ribbon權(quán)重負(fù)責(zé)均衡呼寸,實(shí)現(xiàn)從Spring Cloud Gateway發(fā)起的調(diào)用1.0版本流量調(diào)用為90%艳汽,1.1流量調(diào)用為10%

元數(shù)據(jù)動(dòng)態(tài)指定
外部系統(tǒng)(例如:運(yùn)維發(fā)布平臺(tái))在遠(yuǎn)程啟動(dòng)微服務(wù)的時(shí)候,可以通過(guò)參數(shù)傳遞來(lái)動(dòng)態(tài)改變?cè)獢?shù)據(jù)或者增加運(yùn)維特色的參數(shù)对雪,最后注冊(cè)到遠(yuǎn)程配置中心河狐。有如下兩種方式

  • 通過(guò)Program arguments來(lái)傳遞,它的用法是前面加“--”瑟捣,支持Nacos的增量覆蓋馋艺。例如:
mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=1100 --spring.cloud.nacos.discovery.metadata.version=1.0"
  • 通過(guò)VM arguments來(lái)傳遞,它的用法是前面加“-D”迈套。推薦使用該方式捐祠。例如:-Dmetadata.version=1.0
  • 兩種方式盡量避免同時(shí)用

實(shí)現(xiàn)流程

灰度發(fā)布

實(shí)現(xiàn)場(chǎng)景
通過(guò)外部參數(shù)動(dòng)態(tài)指定A、B桑李、C服務(wù)灰度版本為2.0踱蛀。

  1. 基于Header傳遞的灰度路由模式,通過(guò)http工具贵白,傳遞Http Header星岗,比如version=2.0,網(wǎng)關(guān)根據(jù)header動(dòng)態(tài)路由到灰度服務(wù)戒洼,而不帶header的依舊請(qǐng)求到初始版本俏橘。

  2. 前后端灰度,當(dāng)前端(例如:APP)和后端微服務(wù)同時(shí)存在多個(gè)版本時(shí)圈浇,可以采用“前端灰度&網(wǎng)關(guān)灰度路由組合式策略”寥掐,前端調(diào)用網(wǎng)關(guān)時(shí),傳入前端app版本號(hào)磷蜀,網(wǎng)關(guān)根據(jù)路由策略召耘,路由要相關(guān)的灰度服務(wù)。

  1. APP v1.0 -> 網(wǎng)關(guān) -> A服務(wù) v1.0 -> B服務(wù) v1.0
  2. APP v1.1 -> 網(wǎng)關(guān) -> A服務(wù) v1.1 -> B服務(wù) v1.1
  1. 基于Nacos配置中心的全局訂閱的灰度策略褐隆,基于header的灰度策略污它,在全鏈路下,實(shí)現(xiàn)可能比較復(fù)雜庶弃,Nacos全局訂閱實(shí)現(xiàn)方式提供了簡(jiǎn)單的方式規(guī)避了header傳遞衫贬。

3.4.4 主要的功能點(diǎn)

  • Nacos服務(wù)實(shí)例元數(shù)據(jù)相關(guān),支持從外部參數(shù)動(dòng)態(tài)獲取元數(shù)據(jù)歇攻。
  • 自定義網(wǎng)關(guān)Filter固惯,實(shí)現(xiàn)請(qǐng)求header偵測(cè),灰度路由解析缴守、灰度動(dòng)態(tài)路由等功能
  • 自定義Ribbon負(fù)載均衡策略葬毫,實(shí)現(xiàn)灰度流量控制策略
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末镇辉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子贴捡,更是在濱河造成了極大的恐慌忽肛,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烂斋,死亡現(xiàn)場(chǎng)離奇詭異屹逛,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)源祈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門煎源,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)色迂,“玉大人香缺,你說(shuō)我怎么就攤上這事⌒” “怎么了图张?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)诈悍。 經(jīng)常有香客問(wèn)我祸轮,道長(zhǎng),這世上最難降的妖魔是什么侥钳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任适袜,我火速辦了婚禮,結(jié)果婚禮上舷夺,老公的妹妹穿的比我還像新娘苦酱。我一直安慰自己,他們只是感情好给猾,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布疫萤。 她就那樣靜靜地躺著,像睡著了一般敢伸。 火紅的嫁衣襯著肌膚如雪扯饶。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天池颈,我揣著相機(jī)與錄音尾序,去河邊找鬼。 笑死躯砰,一個(gè)胖子當(dāng)著我的面吹牛蹲诀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弃揽,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼脯爪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼则北!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起痕慢,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤尚揣,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后掖举,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體快骗,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年塔次,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了方篮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡励负,死狀恐怖藕溅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情继榆,我是刑警寧澤巾表,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站略吨,受9級(jí)特大地震影響集币,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜翠忠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一鞠苟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧秽之,春花似錦当娱、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至董虱,卻和暖如春扼鞋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背愤诱。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工云头, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人淫半。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓溃槐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親科吭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子昏滴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361