SpringBoot集成org.apache.Dubbo

SpringBoot集成org.apache.Dubbo

一、前言

Dubbo作為一款優(yōu)秀的RPC框架狭莱,在國內(nèi)有著眾多的使用者,自從2018年2月,Dubbo被阿里捐獻(xiàn)給Apache基金會以后跌捆,Dubbo似乎以全新的名稱 Apache Dubbo煥發(fā)了新的生命力。雖然有著同樣優(yōu)秀和優(yōu)勢的Spring Clould框架象颖,但是Dubbo能煥發(fā)新生也是一件好事佩厚,期待著Dubbo能夠完善機(jī)制,更新迭代出的更好说订。

所有代碼我已上傳到github抄瓦,需要的可以自取測試,歡迎start陶冷,傳送門
https://github.com/AggerChen/spring-boot-dubbo

二钙姊、項目簡介

在Dubbo新的官網(wǎng)上查看資料,雖然也有很多demo發(fā)現(xiàn)要不還是舊包名com.alibaba.dubbo埃叭,要不就是集成的SpringBoot1.x摸恍,根本沒法滿足新的需要嘛,既然都已經(jīng)是Apache Dubbo了赤屋,當(dāng)然要使用最新的org.apache.dubbo和最新的SpringBoot2.x版本了~
此篇文章就是以一下版本來展示示例:

SpringBoot 2.2.2
org.apache.dubbo 2.7.5
zookeeper 3.4.14

三立镶、項目開發(fā)

既然是Dubbo項目,那么我們的使用場景就是分布式微服務(wù)类早,多個service和一個consumer媚媒,還需要一個公共項目common來編寫公用的類與接口。

3.1 創(chuàng)建項目spring-boot-dubbo

  1. 在IDEA中創(chuàng)建一個project涩僻,取名spring-boot-dubbo缭召。這是一個根項目,其中pom.xml包含依賴如下:

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.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <!-- 基本信息 -->
    <groupId>com.agger</groupId>
    <artifactId>spring-boot-dubbo</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>${project.artifactId}</name>
    <description>dubbo根項目</description>

    <!--配置-->
    <properties>
        <skip_maven_deploy>true</skip_maven_deploy>
        <dubbo.version>2.7.5</dubbo.version>
        <zookeeper.version>3.4.14</zookeeper.version>
        <spring.version>5.2.2.RELEASE</spring.version>
        <dubbo.common>0.0.1-SNAPSHOT</dubbo.common>
    </properties>


    <modules>
        <module>dubbo-common</module>
        <module>dubbo-consumer</module>
        <module>dubbo-provider</module>
    </modules>

    <!--聲明全局依賴(子項目需要顯示的引用才會繼承依賴)-->
    <dependencyManagement>
        <dependencies>

            <!-- dubbo依賴 -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.servlet</groupId>
                        <artifactId>servlet-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <!-- dubbo-start依賴 -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>${dubbo.version}</version>
            </dependency>

            <!-- zookeeper依賴 -->
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>${zookeeper.version}</version>
                <exclusions>
                    <exclusion>
                        <artifactId>slf4j-log4j12</artifactId>
                        <groupId>org.slf4j</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.github.sgroschupf</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.1</version>
            </dependency>
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-recipes</artifactId>
                <version>4.2.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-framework</artifactId>
                <version>4.2.0</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

    <!--聲明全局依賴(子項目不需要顯示的引用逆日,自動繼承依賴)-->
    <dependencies>

        <!--spring-boot依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- lombook依賴 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!-- 公共項目依賴 -->
        <dependency>
            <groupId>com.agger</groupId>
            <artifactId>dubbo-common</artifactId>
            <version>${dubbo.common}</version>
        </dependency>

    </dependencies>

    <!-- 打包插件 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
  1. 通過IDEA在項目spring-boot-dubbo中創(chuàng)建三個module嵌巷,分別為:dubbo-common、dubbo-consumer室抽、dubbo-privider搪哪。生成的目錄結(jié)構(gòu)為:


    Image.png

3.2 dubbo-comm項目

此項目是一個公共項目,不需要其他多余的依賴坪圾,只是編寫接口和公共的類使用晓折。
編寫一個接口名為HelloService:

HelloService.java

package com.agger.dubbocommon.service;
/**
 * @classname: HelloService
 * @description: Hello服務(wù)接口
 * @author chenhx
 * @date 2020-01-14 13:55:38
 */
public interface HelloService {
    String sayHello(String name);
}

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.agger</groupId>
        <artifactId>spring-boot-dubbo</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <groupId>com.agger</groupId>
    <artifactId>dubbo-common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-common</name>
    <packaging>jar</packaging>
    <description>dubbo公共項目</description>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

3.3 dubbo-provider項目

此項目是一個服務(wù)類項目惑朦,也就是將接口服務(wù)注冊到zookeeper注冊中心供消費(fèi)端調(diào)取使用。

  1. 編寫pom文件依賴

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.agger</groupId>
        <artifactId>spring-boot-dubbo</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <!-- 基本信息 -->
    <groupId>com.agger</groupId>
    <artifactId>dubbo-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-provider</name>
    <packaging>jar</packaging>
    <description>dubbo項目服務(wù)端</description>

    <dependencies>
        <!-- dubbo依賴 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <!-- zookeeper依賴 -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>${zookeeper.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-log4j12</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.2.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
  1. 編寫一個service類實(shí)現(xiàn)接口
    注意:@Service注解是dubbo里的注解漓概,不是spring里的注解

HelloServiceImpl.java

package com.agger.dubboprovider.impl;

import com.agger.dubbocommon.service.HelloService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

/**
 * @classname: HelloServiceImpl
 * @description: HelloService實(shí)現(xiàn)
 * @author chenhx
 * @date 2020-01-14 14:11:39
 */

@Service
@Component
public class HelloServiceImpl implements HelloService {

    @Override
    public String sayHello(String name) {
        System.out.println("dubbo服務(wù)調(diào)用:" + name);
        return "早上好啊~" + name;
    }
}
  1. 在springBoot啟動類上添加配置
    @EnableDubboConfig注解表示開啟Dubbo的相關(guān)配置
    @DubboComponentScan用來掃描提供的接口實(shí)現(xiàn)位置

DubboProviderApplication.java

package com.agger.dubboprovider;

import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@EnableDubboConfig
@DubboComponentScan("com.agger.dubboprovider.impl")
@SpringBootApplication
public class DubboProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }
}
  1. 添加dubbo配置
    dubbo添加配置的方式有多種漾月,既有xml和properties也有API方式。既然我們使用的是SpringBoot那么就應(yīng)該消滅xml的配置方式胃珍,使用properties和yml方式都就可以梁肿,在此使用yml作為示例。

application.yml

server:
  port: 8087    # 服務(wù)端口

dubbo:
  application:
    id: dubbo-provider
    name: dubbo-provider  #應(yīng)用名稱
    owner: aggerChen      #應(yīng)用所屬者
    organization: agger   #應(yīng)用所屬組織
  registry:
    id: zookeeper-registry #注冊中心id
    protocol: zookeeper    #注冊中心協(xié)議
    address: zookeeper://127.0.0.1:2181 #注冊中心地址
  metadata-report:
    address: zookeeper://127.0.0.1:2181
  protocol:
    name: dubbo   #協(xié)議名稱
    port: 20880   #協(xié)議端口
    accesslog: dubbo-access.log #協(xié)議訪問log
  provider:
    retries: 0    #重試次數(shù)
    timeout: 3000 #超時時間
  monitor:
    protocol: registry # 注冊監(jiān)控中心

3.4 dubbo-consumer項目

  1. 此項目就是一個web消費(fèi)項目堂鲜,當(dāng)然也可以不是web項目栈雳,在此方便演示就使用了web項目,首先來看依賴文件缔莲。依賴于provider項目一樣,只多了一個spring-boot-starter-web

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.agger</groupId>
        <artifactId>spring-boot-dubbo</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <groupId>com.agger</groupId>
    <artifactId>dubbo-consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-consumer</name>
    <packaging>jar</packaging>
    <description>dubbo項目客戶端</description>

    <dependencies>
        <!-- dubbo依賴 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>

        <!-- dubbo的zookeeper依賴 -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>${zookeeper.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-log4j12</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.2.0</version>
        </dependency>

        <!-- web項目依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
  1. 編寫一個controller來調(diào)用方法
    使用@Reference注解來注入接口

HelloController.java

package com.agger.dubboconsumer.controller;

import com.agger.dubbocommon.service.HelloService;
import com.agger.dubboconsumer.vo.ResultVO;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @classname: HelloController
 * @description: Hello控制器
 * @author chenhx
 * @date 2020-01-14 13:57:48
 */
@RestController
@RequestMapping("/hello")
public class HelloController {

    @Reference
    HelloService helloService;

    @GetMapping("/morning/{name}")
    public ResultVO morning(@PathVariable("name") String name){
        System.out.println(name);
        String hello = helloService.sayHello(name);
        System.out.println(hello);
        return ResultVO.builder().flag(true).msg("調(diào)用成功").data(hello).build();
    }
}

當(dāng)然你可以將調(diào)用接口的方法再封裝一層service霉旗,方便更改service的版本號等等痴奏。

  1. 在項目啟動類上添加配置
    在項目的啟動類DubboConsumerApplication中添加Dubbo啟動注解和掃描注解。

DubboConsumerApplication.java

package com.agger.dubboconsumer;

import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@EnableDubboConfig
@DubboComponentScan("com.agger.dubboconsumer.controller")
@SpringBootApplication
public class DubboConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(DubboConsumerApplication.class, args);
    }
}
  1. 填寫配置文件

application.yml

server:
  port: 8088

dubbo:
  application:
    name: dubbo-consumer  # 應(yīng)用名稱
    owner: aggerChen      # 應(yīng)用所屬者
    organization: agger   # 應(yīng)用所屬組織
  registry:
    id: zookeeper-registry #注冊中心id
    protocol: zookeeper    #注冊中心協(xié)議
    address: zookeeper://127.0.0.1:2181 #注冊中心地址
  monitor:
    protocol: registry # 注冊監(jiān)控中心

3.5 測試

到此為止編碼部分就完成了厌秒,現(xiàn)在開始啟動測試读拆。

  1. 啟動zookeeper
    啟動項目之前需要先啟動zookeeper客戶端,這個可以從官網(wǎng)上去下載傳送門
    選擇穩(wěn)定版本并下載鸵闪。
    Image [2].png
Image [3].png

下載完成后檐晕,記得將conf文件夾下面的文件zoo_sample.cfg改名為zoo.cfg,然后啟動bin/zkServer.cmd就可以了蚌讼。

  1. 啟動dubbo-provider
    如果你在內(nèi)網(wǎng)有多臺機(jī)器或者虛擬機(jī)辟灰,可以打包dubbo-provider項目在不同的機(jī)器上多啟動幾臺。并使用java -jar dubbo-provider命令啟動運(yùn)行篡石。我在IDEA中運(yùn)行查看控制臺信息:已經(jīng)成功將接口HelloService注冊到zookeeper上了


    Image [4].png
  1. 啟動dubbo-cosumer
    啟動后可以看到consumer已經(jīng)從注冊中心訂閱了自己需要的接口


    Image [5].png
  2. 測試訪問
    在瀏覽器訪問地址:http://localhost:8088/hello/morning/tom
    或者可以用IDEA的測試工具HTTP Client非常好用
    看到測試結(jié)果如下芥喇,OK,測試成功凰萨!

    Image [6].png

四继控、總結(jié)

  • 以上的所有代碼我已上傳到github,需要的可以自取測試胖眷,歡迎start武通,傳送門
    https://github.com/AggerChen/spring-boot-dubbo
  • 大家可以訪問阿里中間件團(tuán)隊的博客,傳送門珊搀,下載阿里插件可以快速構(gòu)建項目并生成需要的common冶忱、consumer、provider包食棕。
    插件如下:Alibaba Cloud Toolkit
    Image [7].png

構(gòu)建Dubbo項目:


Image [8].png
Image [9].png

一路完成朗和,就會自動構(gòu)建需要的項目错沽,大家可以測試一下~

  • 此篇文章沒有講解Dubbo的太多原理,只是一個快速上手demo眶拉,要學(xué)習(xí)更多Dubbo的其他方面還需要多多啃一啃官網(wǎng)千埃。
  • 最后我們可以在dubbo-admin上查看我們的服務(wù)情況,需要選取下載項目并構(gòu)建啟動忆植,傳送門
    https://github.com/apache/dubbo-admin
  1. 我們需要先打開dubbo-admin\dubbo-admin-server\src\main\resources\application.properties配置文件填寫zookeeper地址和登陸用戶名和密碼放可。
  2. Maven方式安裝:
git clone https://github.com/apache/dubbo-admin.git 
cd dubbo-admin mvn clean package 
cd dubbo-admin-distribution/target java -jar dubbo-admin-0.1.jar
  1. 如果啟動是報8080端口被占用,那么一定是zookeeper搗鬼朝刊,因為zookeeper客戶端3.5版本Zookeeper AdminServer默認(rèn)占用8080耀里,所以我們需要在客戶端配置文件zoo.cfg上添加更改端口配置:admin.serverPort=8999
  2. 登陸http://localhost:8080/ 點(diǎn)擊服務(wù)查詢,輸入賬號密碼拾氓,默認(rèn)root root冯挎。可以看到我啟動的兩個dubbo-provider服務(wù)咙鞍,點(diǎn)擊消費(fèi)者可以查看消費(fèi)者ip等信息房官。
    Image [10].png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市续滋,隨后出現(xiàn)的幾起案子翰守,更是在濱河造成了極大的恐慌,老刑警劉巖疲酌,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜡峰,死亡現(xiàn)場離奇詭異,居然都是意外死亡朗恳,警方通過查閱死者的電腦和手機(jī)湿颅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來僻肖,“玉大人肖爵,你說我怎么就攤上這事⊥卧啵” “怎么了劝堪?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長揉稚。 經(jīng)常有香客問我秒啦,道長,這世上最難降的妖魔是什么搀玖? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任余境,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘芳来。我一直安慰自己含末,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布即舌。 她就那樣靜靜地躺著佣盒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪顽聂。 梳的紋絲不亂的頭發(fā)上肥惭,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機(jī)與錄音紊搪,去河邊找鬼蜜葱。 笑死,一個胖子當(dāng)著我的面吹牛耀石,可吹牛的內(nèi)容都是我干的牵囤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼娶牌,長吁一口氣:“原來是場噩夢啊……” “哼奔浅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起诗良,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鲁驶,沒想到半個月后鉴裹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钥弯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年径荔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脆霎。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡总处,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出睛蛛,到底是詐尸還是另有隱情鹦马,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布忆肾,位于F島的核電站荸频,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏客冈。R本人自食惡果不足惜旭从,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧和悦,春花似錦退疫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至付鹿,卻和暖如春澜汤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舵匾。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工俊抵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坐梯。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓徽诲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吵血。 傳聞我的和親對象是個殘疾皇子谎替,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

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