RocketMQ介紹及集群部署

RocketMQ介紹

Apache RocketMQ是一個分布式消息傳遞和流媒體平臺,具有低延遲诗鸭、高性能和可靠性染簇、萬億級別的容量和靈活的可伸縮性。

GitHub:https://github.com/apache/rocketmq

官網(wǎng):http://rocketmq.apache.org/

本文版本:rocketmq-4.2.0-SNAPSHOT

下載地址:http://mirror.bit.edu.cn/apache/rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip

它提供了各種特性:(翻譯自GitHub)

發(fā)布/訂閱消息傳遞模型

定期消息傳遞

按時間或偏移量進行消息回溯

日志中心流

大數(shù)據(jù)集成

在同一隊列中可靠的FIFO和嚴格的有序消息傳遞

有效的拉伸消費模式

在一個隊列中有百萬級的消息積累容量

多種消息傳遞協(xié)議只泼,如JMS和OpenMessaging

靈活的分布式擴展部署體系結構

快速批量消息交換系統(tǒng)剖笙。

各種消息過濾機制,如SQL和標記

用于隔離測試和云隔離集群的Docker映像请唱。

用于配置弥咪、度量和監(jiān)視的功能豐富的管理儀表板

選擇的理由

強調集群無單點过蹂,可擴展,任意一點高可用聚至,水平可擴展

????????方便集群配置酷勺,而且容易擴展(橫向和縱向),通過slave的方式每一點都可以實現(xiàn)高可用

支持上萬個隊列扳躬,順序消息

????????順序消費是實現(xiàn)在同一隊列的脆诉,如果高并發(fā)的情況就需要隊列的支持,rocketmq可以滿足上萬個隊列同時存在

任性定制你的消息過濾

????????rocketmq提供了兩種類型的消息過濾贷币,也可以說三種可以通過topic進行消息過濾击胜、可以通過tag進行消息過濾、還可以通過filter的方式任意定制過濾

消息的可靠性(無Buffer役纹,持久化偶摔,容錯,回溯消費)

????????消息無buffer就不用擔心buffer回滿的情況促脉,rocketmq的所有消息都是持久化的辰斋,生產(chǎn)者本身可以進行錯誤重試,發(fā)布者也會按照時間階梯的方式進行消息重發(fā)瘸味,消息回溯說的是可以按照指定的時間進行消息的重新消費宫仗,既可以向前也可以向后(前提條件是要注意消息的擦除時間)

海量消息堆積能力,消息堆積后旁仿,寫入低延遲

????????針對于provider需要配合部署方式藕夫,對于consumer,如果是集群方式一旦master返現(xiàn)消息堆積會向consumer下發(fā)一個重定向指令丁逝,此時consumer就可以從slave進行數(shù)據(jù)消費了

分布式事務

????????我個人感覺rocketmq對這一塊說的不是很清晰汁胆,而且官方也說現(xiàn)在這塊存在缺陷(會令系統(tǒng)pagecache過多),所以線上建議還是少用為好

消息失敗重試機制

????????針對provider的重試霜幼,當消息發(fā)送到選定的broker時如果出現(xiàn)失敗會自動選擇其他的broker進行重發(fā)嫩码,默認重試三次,當然重試次數(shù)要在消息發(fā)送的超時時間范圍內(nèi)罪既。

????????針對consumer的重試铸题,如果消息因為各種原因沒有消費成功,會自動加入到重試隊列琢感,一般情況如果是因為網(wǎng)絡等問題連續(xù)重試也是照樣失敗丢间,所以rocketmq也是采用階梯重試的方式。

定時消費

? ? ? ? 除了上面的配置驹针,在發(fā)送消息是也可以針對message設置setDelayTimeLevel

活躍的開源社區(qū)

????????現(xiàn)在rocketmq成為了apache的一款開源產(chǎn)品烘挫,活躍度也是不容懷疑的

成熟度(經(jīng)過雙十一考驗)

????????針對本身的成熟度,我們看看這么多年的雙十一就可想而知了

相關概念

NameServer

這里我們可以理解成類似于zk的一個注冊中心,而且rocketmq最初也是基于zk作為注冊中心的饮六,現(xiàn)在相當于為rocketmq自定義了一個注冊中心其垄,代碼不超過1000行。RocketMQ 有多種配置方式可以令客戶端找到 Name Server, 然后通過 Name Server 再找到 Broker卤橄,分別如下绿满,優(yōu)先級由高到低,高優(yōu)先級會覆蓋低優(yōu)先級窟扑±洌客戶端提供http和ip:端口號的兩種方式,推薦使用http的方式可以實現(xiàn)nameserver的熱部署嚎货。

Push Consumer

? ? ? ? Consumer 的一種橘霎,應用通常通過 Consumer 對象注冊一個 Listener 接口,一旦收到消息厂抖,Consumer 對象立刻回調 Listener 接口方法茎毁,類似于activemq的方式

Pull Consume

? ? ? ? Consumer 的一種克懊,應用通常主動調用 Consumer 的拉消息方法從 Broker 拉消息忱辅,主動權由應用控制

Producer Group

? ? ? ? 一類producer的集合名稱,這類producer通常發(fā)送一類消息谭溉,且發(fā)送邏輯一致

Consumer Group

? ? ? ? 同上墙懂,consumer的集合名稱

Broker

? ? ? ? 消息中轉的角色,負責存儲消息(實際的存儲是調用的store組件完成的)扮念,轉發(fā)消息损搬,一般也成為server,同jms中的provider

Message Filter

? ? ? ? 可以實現(xiàn)高級的自定義的消息過濾

Master/Slave

? ? ? ? 集群的主從關系柜与,broker的name相同巧勤,brokerid=0的為主master,大于0的為從slave弄匕,可以一主多從颅悉,但一從只能有一主

RocketMQ角色介紹

RocketMQ由四部分構成:Producer、Consumer迁匠、Broker和NameServer

啟動順序:NameServer->Broker

為了消除單點故障剩瓶,增加可靠性或增大吞吐量,可以在多臺機器上部署多個nameserver和broker城丧,并且為每個broker部署1個或多個slave延曙,rocketmq架構圖如圖1.1所示。

圖1.1 Rcoketmq各角色之間關系

Topic & message queue:一個分布式消息隊列中間件部署好以后亡哄,可以給很多個業(yè)務提供服務枝缔,同一個業(yè)務也有不同類型的消息要投遞,這些不同類型的消息以不同的 Topic 名稱來區(qū)分蚊惯。所以發(fā)送和接收消息前愿卸,先創(chuàng)建topic拐辽,針對某個 Topic 發(fā)送和接收消息。有了 Topic 以后擦酌,還需要解決性能問題 俱诸。 如果一個Topic 要發(fā)送和接收的數(shù)據(jù)量非常大, 需要能支持增加并行處理的機器來提高處理速度赊舶,這時候一個 Topic 可以根據(jù)需求設置一個或多個 Message Queue, Message Queue 類似分區(qū)或 Partition 睁搭。Topic有了多個 Message Queue 后,消息可以并行地向各個Message Queue 發(fā)送笼平,消費者也可以并行地從多個 Message Queue 讀取消息并消費 园骆。

集群部署方式

單Master模式

????????只有一個 Master節(jié)點

????????優(yōu)點:配置簡單,方便部署

????????缺點:這種方式風險較大寓调,一旦Broker重啟或者宕機時锌唾,會導致整個服務不可用,不建議線上環(huán)境使用

多Master模式

????????一個集群無 Slave夺英,全是 Master晌涕,例如 2 個 Master 或者 3 個 Master

????????優(yōu)點:配置簡單,單個Master 宕機或重啟維護對應用無影響痛悯,在磁盤配置為RAID10 時余黎,即使機器宕機不可恢復情況下,由與 RAID10磁盤非吃孛龋可靠惧财,消息也不會丟(異步刷盤丟失少量消息,同步刷盤一條不丟)扭仁。性能最高垮衷。多 Master 多 Slave 模式,異步復制

????????缺點:單臺機器宕機期間乖坠,這臺機器上未被消費的消息在機器恢復之前不可訂閱搀突,消息實時性會受到受到影響

多Master多Slave模式(異步復制)---本文稍后以這種方式部署集群為例

? ? ? ? 每個 Master 配置一個 Slave,有多對Master-Slave瓤帚, HA描姚,采用異步復制方式,主備有短暫消息延遲戈次,毫秒級轩勘。

????????優(yōu)點:即使磁盤損壞,消息丟失的非常少怯邪,且消息實時性不會受影響绊寻,因為Master 宕機后,消費者仍然可以從 Slave消費,此過程對應用透明澄步。不需要人工干預冰蘑。性能同多 Master 模式幾乎一樣。

????????缺點: Master 宕機村缸,磁盤損壞情況祠肥,會丟失少量消息。

多Master多Slave模式(同步雙寫)---文中會說明補充此集群配置梯皿,線上使用的話仇箱,推薦使用此模式集群

? ? ? ? 每個 Master 配置一個 Slave,有多對Master-Slave东羹, HA采用同步雙寫方式剂桥,主備都寫成功,向應用返回成功属提。

????????優(yōu)點:數(shù)據(jù)與服務都無單點权逗, Master宕機情況下,消息無延遲冤议,服務可用性與數(shù)據(jù)可用性都非常高

????????缺點:性能比異步復制模式略低斟薇,大約低 10%左右,發(fā)送單個消息的 RT會略高求类。目前主宕機后奔垦,備機不能自動切換為主機,后續(xù)會支持自動切換功能

Rocketmq雙主從異步復制集群部署(文中包含同步雙寫集群的配置說明)

一尸疆、預裝環(huán)境:

rhel 6.9(其實redhat & centos 6~7都是通用的)

jdk-1.8

git,maven(非必須)

二惶岭、集群結構:


三寿弱、下載解壓

下載地址:http://mirror.bit.edu.cn/apache/rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip

mkdir -p?/opt/apps_install/rocketmq-4.2.0

cd?/opt/apps_install/rocketmq-4.2.0

unzip?rocketmq-all-4.2.0-bin-release.zip

ln -s /opt/apps_install/rocketmq-4.2.0 /opt/apps/rocketmq

四、創(chuàng)建存儲路徑

10.16.13.90(rocketmq-nameserver-1):

mkdir -p /data/rocketmq/store/{rootdir-a-m,commitlog-a-m,rootdir-b-s,commitlog-b-s}

10.16.13.91(rocketmq-nameserver-2):

mkdir -p /data/rocketmq/store/{rootdir-b-m,commitlog-b-m,rootdir-a-s,commitlog-a-s}

五按灶、配置hosts和環(huán)境變量

兩臺服務器修改/etc/hosts症革,加入下面兩行

10.16.13.90 rocketmq-nameserver-1

10.16.13.91 rocketmq-nameserver-2

修改/etc/profile,加入

export ROCKETMQ_HOME=/opt/apps/rocketmq

export PATH=$ROCKETMQ_HOME/bin:$PATH

source /etc/profile

六鸯旁、修改配置文件

國際慣例噪矛,修改之前先備份~以防意外

cd?/opt/apps/rocketmq;cp -r conf/ conf.default/

因為本文采用雙主雙從異步復制,默認的rocketmq已經(jīng)為我們配置了相應配置目錄

cd?/opt/apps/rocketmq/conf/2m-2s-async

10.16.13.90 rocketmq-nameserver-1 ? ? ?角色:broker-a-master & broker-b-slave

vim?broker-a.properties

#所屬集群名字

brokerClusterName=sns-rocket-mq-cluster

#broker名字铺罢,注意此處不同的配置文件填寫的不一樣

brokerName=rocketmq-nameserver-1

#brokerId 0 表示 Master艇挨,>0 表示 Slave

brokerId=0

# Broker 對外服務的監(jiān)聽端口

listenPort=10911

#nameServer地址,分號分割

namesrvAddr=rocketmq-nameserver-1:9876;rocketmq-nameserver-2:9876

# 刪除文件時間點韭赘,默認凌晨 4點

deleteWhen=04

#文件保留時間缩滨,默認 48 小時

fileReservedTime=72

#Broker role有3種:SYNC MASTER、ASYNC MASTER、SLAVE脉漏。關鍵詞SYNC和ASYNC表示Master和Slave之間同步消息的機制苞冯,SYNC即同步更新,指當Slave和Master消息同步完成后侧巨,再返回發(fā)送成功的狀態(tài)舅锄。ASYNC即異步更新,master與slave有短暫消息延遲司忱,毫秒級巧娱。本文在此使用了異步復制集群模式,線上環(huán)境推薦使用同步雙寫模式烘贴,即SYNC_MASTER

brokerRole=ASYNC_MASTER

# 刷盤方式 ASYNC_FLUSH 異步刷盤

flushDiskType=ASYNC_FLUSH

#存儲路徑

storePathRootDir=/data/rocketmq/store/rootdir-a-m

storePathCommitLog=/data/rocketmq/store/commitlog-a-m

# 是否允許 Broker 自動創(chuàng)建Topic

autoCreateTopicEnable=true

# 是否允許 Broker 自動創(chuàng)建訂閱組

autoCreateSubscriptionGroup=true

vim?broker-b-s.properties

brokerClusterName=sns-rocket-mq-cluster

brokerName=rocketmq-nameserver-2

listenPort=10921

namesrvAddr=rocketmq-nameserver-1:9876;rocketmq-nameserver-2:9876

brokerId=1

deleteWhen=04

fileReservedTime=72

brokerRole=SLAVE

storePathRootDir=/data/rocketmq/store/rootdir-b-s

storePathCommitLog=/data/rocketmq/store/commitlog-b-s

autoCreateTopicEnable=true

autoCreateSubscriptionGroup=true

flushDiskType=ASYNC_FLUSH

10.16.13.91 rocketmq-nameserver-2 ? ? ?角色:broker-b-master & broker-a-slave

vim?broker-b.properties

brokerClusterName=sns-rocket-mq-cluster

brokerName=rocketmq-nameserver-2

brokerIP1=10.16.13.91

brokerId=0

listenPort=10911

namesrvAddr=rocketmq-nameserver-1:9876;rocketmq-nameserver-2:9876

deleteWhen=04

fileReservedTime=72

##?Broker role有3種:SYNC MASTER禁添、ASYNC MASTER、SLAVE桨踪。關鍵詞SYNC和ASYNC表示Master和Slave之間同步消息的機制老翘,SYNC即同步更新,指當Slave和Master消息同步完成后锻离,再返回發(fā)送成功的狀態(tài)铺峭。ASYNC即異步更新,master與slave有短暫消息延遲汽纠,毫秒級卫键。本文在此使用了異步復制集群模式ASYNC_MASTER,線上環(huán)境推薦使用同步雙寫模式虱朵,即SYNC_MASTER莉炉。

brokerRole=ASYNC_MASTER

storePathRootDir=/data/rocketmq/store/rootdir-b-m

storePathCommitLog=/data/rocketmq/store/commitlog-b-m

autoCreateTopicEnable=true

autoCreateSubscriptionGroup=true

flushDiskType=ASYNC_FLUSH

vim?broker-a-s.properties

brokerClusterName=sns-rocket-mq-cluster

brokerName=rocketmq-nameserver-1

listenPort=10921

namesrvAddr=rocketmq-nameserver-1:9876;rocketmq-nameserver-2:9876

brokerId=1

deleteWhen=04

fileReservedTime=72

brokerRole=SLAVE

storePathRootDir=/data/rocketmq/store/rootdir-a-s

storePathCommitLog=/data/rocketmq/store/commitlog-a-s

autoCreateTopicEnable=true

autoCreateSubscriptionGroup=true

flushDiskType=ASYNC_FLUSH

修改日志配置文件(兩臺一樣)

mkdir -p?/opt/apps/rocketmq/logs

cd /opt/apps/rocketmq/conf

sed -i 's#${user.home}#/opt/apps/rocketmq#g' *.xml

七、修改啟動腳本參數(shù)

繼續(xù)國際慣例碴犬,修改之前先備份絮宁,兩臺服務器相同操作

cd??/opt/apps/rocketmq/bin

cp?runbroker.sh?runbroker.sh.default

調一下JVM,包括nameserver 和 broker服协。限于自己機器的配置绍昂,參數(shù)調小一下。但Rocketmq最少的堆是1g偿荷,否則無法啟動窘游。兩臺機器執(zhí)行相同的操作。

JAVA_OPT="${JAVA_OPT} -server -Xms16g -Xmx16g -Xmn8g -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1g"

八跳纳、服務啟動

要先啟動namerserver忍饰,再啟broker,兩臺機器執(zhí)行相同的操作棒旗。

這里為了未來方便運維喘批,最好是寫好相應的服務啟動腳本撩荣,養(yǎng)成一個好習慣比擁有一個好記性更友愛不是么~

① 啟動nameserver,兩臺機器操作相同

mkdir -p?/opt/scripts/rocketmq

cd?/opt/scripts/rocketmq

vim?start_rocketmq_nameserver.sh

#!/bin/bash

source /etc/profile

nohup sh /opt/apps/rocketmq/bin/mqnamesrv > /data/rocketmq/store/mqnamesrv.log 2>&1 &

② 啟動broker饶深。當然兩臺機器不一樣餐曹,這里一個一個來

10.16.13.90 rocketmq-nameserver-1

vim?start_broker_a_master.sh

#!/bin/bash

nohup sh /opt/apps/rocketmq/bin/mqbroker -c /opt/apps/rocketmq/conf/2m-2s-async/broker-a.properties > /data/rocketmq/store/broker-a-m.log 2>&1 &

vim?start_broker_b_slave.sh

#!/bin/bash

nohup sh /opt/apps/rocketmq/bin/mqbroker -c /opt/apps/rocketmq/conf/2m-2s-async/broker-b-s.properties > /data/rocketmq/store/broker-b-s.log 2>&1 &

10.16.13.91 rocketmq-nameserver-2

vim?start_broker_b_master.sh

#!/bin/bash

nohup sh /opt/apps/rocketmq/bin/mqbroker -c /opt/apps/rocketmq/conf/2m-2s-async/broker-b.properties > /data/rocketmq/store/broker-b-m.log 2>&1 &

vim?start_broker_a_slave.sh

#!/bin/bash

nohup sh /opt/apps/rocketmq/bin/mqbroker -c /opt/apps/rocketmq/conf/2m-2s-async/broker-a-s.properties > /data/rocketmq/store/broker-a-s.log 2>&1 &

這里再啰嗦一遍,先啟動nameserver敌厘,再啟動broker台猴,兩臺機器的啟動順序:啟動nameserver---啟動broker master---啟動broker slave,done

都啟動完畢之后可以jps看一下

[@bx_13_90 /opt/scripts/rocketmq]# jps

60161 BrokerStartup

147505 Jps

59300 NamesrvStartup

60760 rocketmq-console-ng-1.0.0.jar

124248 BrokerStartup

查看服務啟動后的機器狀態(tài):

[@bx_13_90 /opt/scripts/rocketmq]# mqadmin clusterList --namesrvAddr=10.16.13.90:9876

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0

#Cluster Name? ? #Broker Name? ? ? ? ? ? #BID? #Addr? ? ? ? ? ? ? ? ? #Version? ? ? ? ? ? ? ? #InTPS(LOAD)? ? ? #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE

sns-rocket-mq-cluster? rocketmq-nameserver-1? 0? ? 10.16.13.90:10911? ? ? V4_2_0_SNAPSHOT? ? ? ? ? 0.00(0,0ms)? ? ? ? 0.00(0,0ms)? ? ? ? ? 0 425360.18 0.0000

sns-rocket-mq-cluster? rocketmq-nameserver-1? 1? ? 10.16.13.91:10921? ? ? V4_2_0_SNAPSHOT? ? ? ? ? 0.00(0,0ms)? ? ? ? 0.00(0,0ms)? ? ? ? ? 0 425360.18 0.0000

sns-rocket-mq-cluster? rocketmq-nameserver-2? 0? ? 10.16.13.91:10911? ? ? V4_2_0_SNAPSHOT? ? ? ? ? 0.00(0,0ms)? ? ? ? 0.00(0,0ms)? ? ? ? ? 0 425360.18 0.0000

sns-rocket-mq-cluster? rocketmq-nameserver-2? 1? ? 10.16.13.90:10921? ? ? V4_2_0_SNAPSHOT? ? ? ? ? 0.00(0,0ms)? ? ? ? 0.00(0,0ms)? ? ? ? ? 0 425360.18 0.0000

九俱两、服務關閉

關閉nameserver:

/opt/apps/rocketmq/bin/mqshutdown namesrv

關閉broker:

/opt/apps/rocketmq/bin/mqshutdown broker

十饱狂、部署rocketmq-console


部分開了天眼的童鞋可能看到上面jps時,有一個rocketmq-console-ng-1.0.0.jar宪彩,這里就具體說一下rocketmq的管控臺休讳,可以隨時觀測和修改rocketmq的狀態(tài)和一些配置

這個管控臺在GitHub上也有項目,GitHub地址:https://github.com/apache/rocketmq-externals尿孔,再次感謝國際開源組織gay站的無私貢獻俊柔,讓眾基可以做伸手黨,而且現(xiàn)在管控臺還能顯示簡體中文了~具體的介紹GitHub上有說活合,這里限于篇幅就不多啰嗦了

步入正題雏婶,如何部署rocketmq管控臺

這里還是福利一波吧,不用看GitHub如何編譯部署blablabla白指,筆者直接送上編譯好的jar包留晚,綠色無毒請大家安心下載,如果鏈接有問題不能下載告嘲,可以發(fā)我郵件向我要(fantasymango@163.com)

鏈接: https://pan.baidu.com/s/1Y4fzVc2r30jtIVpvYZocWA 密碼: vj2y

mkdir -p?/opt/apps_install/rocketmq-console/

把下載好的jar包放在這里

啟動腳本start.sh

#!/bin/bash

nohup java -jar ./rocketmq-console-ng-1.0.0.jar --server.port=8080 --rocketmq.config.namesrvAddr=10.16.13.90:9876;10.16.13.91:9876 &

訪問ip:8080即可


Tips:

Broker 重啟對客戶端的影響

Broker 重啟可能會導致正在發(fā)往這臺機器的的消息發(fā)送失敗错维,RocketMQ提供了一種優(yōu)雅關閉Broker的方法,通過執(zhí)行以下命令會清除Broker的寫權限状蜗,過40s后需五,所有客戶端都會更新Broker路由信息,此時再關閉Broker就不會發(fā)生發(fā)送消息失敗的情況轧坎,因為所有消息都發(fā)往了其他 Broker。

# sh mqadmin wipeWritePerm -b brokerName -n namesrvAddr

Master 與Slave的關系

RocketMQ的開源版本泽示,Master宕機缸血,Slave不能切換為Master,這里的Slave不可寫械筛,但可讀捎泻,類似于 Mysql 主備方式。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末埋哟,一起剝皮案震驚了整個濱河市笆豁,隨后出現(xiàn)的幾起案子郎汪,更是在濱河造成了極大的恐慌,老刑警劉巖闯狱,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件煞赢,死亡現(xiàn)場離奇詭異,居然都是意外死亡哄孤,警方通過查閱死者的電腦和手機照筑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘦陈,“玉大人凝危,你說我怎么就攤上這事〕渴牛” “怎么了蛾默?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長捉貌。 經(jīng)常有香客問我支鸡,道長,這世上最難降的妖魔是什么昏翰? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任苍匆,我火速辦了婚禮,結果婚禮上棚菊,老公的妹妹穿的比我還像新娘浸踩。我一直安慰自己,他們只是感情好统求,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布检碗。 她就那樣靜靜地躺著,像睡著了一般码邻。 火紅的嫁衣襯著肌膚如雪折剃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天像屋,我揣著相機與錄音怕犁,去河邊找鬼。 笑死己莺,一個胖子當著我的面吹牛奏甫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凌受,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼阵子,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了胜蛉?” 一聲冷哼從身側響起挠进,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤色乾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后领突,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體暖璧,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年攘须,在試婚紗的時候發(fā)現(xiàn)自己被綠了漆撞。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枚粘。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡茄袖,死狀恐怖匈勋,靈堂內(nèi)的尸體忽然破棺而出鞍历,到底是詐尸還是另有隱情丑瞧,我是刑警寧澤澎怒,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布叛薯,位于F島的核電站矮慕,受9級特大地震影響谱俭,放射性物質發(fā)生泄漏奉件。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一昆著、第九天 我趴在偏房一處隱蔽的房頂上張望县貌。 院中可真熱鬧,春花似錦凑懂、人聲如沸煤痕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摆碉。三九已至,卻和暖如春脓豪,著一層夾襖步出監(jiān)牢的瞬間巷帝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工扫夜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留楞泼,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓笤闯,卻偏偏與公主長得像现拒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子望侈,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

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