Java開源工作流對比

Java開源工作流對比

轉(zhuǎn)自http://www.360doc.com/content/19/0713/11/1314937_848435803.shtml 筆記記錄

工作流(Workflow)

1咬清、業(yè)務(wù)過程的部分或整體在計算機應(yīng)用環(huán)境下的自動化票渠;

2、是對工作流程及其各步驟之間業(yè)務(wù)規(guī)則的抽象驻售、概括描述纽绍;

3姿骏、工作流主要解決的問題是:為了實現(xiàn)某個業(yè)務(wù)目標(biāo),利用計算機在多個參與者之間按某種預(yù)定規(guī)則自動傳遞文檔、信息或者任務(wù)筐摘;

4、工作流的概念起源于生產(chǎn)組織和辦公自動化領(lǐng)域,是針對日常工作中具有固定程序活動而提出的一個概念咖熟;目的是通過將工作分解成定義良好的任務(wù)或角色圃酵,按照一定規(guī)則和過程來執(zhí)行這些任務(wù)并對其進行監(jiān)控;達到提高工作效率馍管、更好的控制過程郭赐、增強對客戶的服務(wù)、有效管理業(yè)務(wù)流程等目的确沸;

5捌锭、Georgakopoulos給出的工作流定義是:工作流是將一組任務(wù)組織起來一完成某個經(jīng)營過程:定義了任務(wù)的出發(fā)順序和觸發(fā)條件,每個任務(wù)可以由一個或多個軟件系統(tǒng)完成罗捎,也可以由一個或一組人完成观谦,還可以由一個或多個人與系統(tǒng)軟件協(xié)作完成;

6桨菜、工作流的特點:(1)極大地提高了工作效率豁状;(2)本身只是業(yè)務(wù)邏輯決定的一個事務(wù)流程;(3)一旦啟動倒得,自動流轉(zhuǎn)泻红;(4)具有事務(wù)的特征;(5)流程節(jié)點靈活可配霞掺;(6)符合面向?qū)ο蟮乃枷?/p>

7谊路、工作流的分類:(1)順序工作流;(2)流程圖工作流菩彬;(3)狀態(tài)機工作流

8缠劝、工作流就是:在一個工作群組中,為了達成某一個共同目的而需要多人協(xié)力以循序或平行工作的形式來共同完成的任務(wù)

關(guān)于工作流的幾個名詞解釋:
任務(wù) 泛指各種事務(wù)上所必需執(zhí)行的流程性工作
循序或平行工作 工作的流動性是一個人接著一個人執(zhí)行挤巡,或同時由多個人分開執(zhí)行剩彬,或是上述兩類工作合并之后的混合型工作
多人 若是單人就可以完成的工作,則不能歸類為流程工作矿卑;凡是一件工作必須由兩個人或更多人來協(xié)力完成的工作才能稱之為流程工作喉恋;
共同目的 多人參與的流程性工作,必須是以完成共同目的為前提母廷;如果一群人是分別針對不同的專案來執(zhí)行個別的工作轻黑,并不算構(gòu)成一個工作流程;

9琴昆、 鏈接: 從程序員的角度來看為什么我們需要工作流

10氓鄙、 鏈接: 工作流簡介及其6種常用的工作流引擎

J2EE常用工作流比較

引用鏈接 Shark(EnhydraShark) Osworkflow opensymphony JBPM(JBoss JBPM)****Java Business Process Management
工作流描述語言 XPDL:WFMC制定的描述業(yè)務(wù)流程控制流的XML格式規(guī)范,格式復(fù)雜业舍,與具體語言無關(guān)抖拦,不靈活 1升酣、XML:流程定義格式簡單,使用靈活2态罪、基于有限狀態(tài)機模型 1噩茄、JPdl:JBoss jBPM Processdefinition language,一個商務(wù)流程被看作是一個UML狀態(tài)圖复颈。2绩聘、基于UML的狀態(tài)圖和活動圖來定義流程,已加入JBOSS大家庭耗啦,市場前景看好凿菩。
是否開源,開源協(xié)議 一個可擴展的工作流引擎框架≈慕玻現(xiàn)在不再開源衅谷,用于商業(yè)用途 開源的嵌入式工作流引擎 ,它的使用遵循 Apache License 一種基于J2EE的輕量級工作流管理系統(tǒng)舒帮,它的使用遵循 Apache License
相關(guān)開源項目 Jawe Osworkflow for .net
支持是否全面 流程定制工具JAWE 1会喝、帶有一個簡陋的流程定制工具陡叠,但十分簡陋且常有錯誤 2玩郊、需要專業(yè)技術(shù)用戶使用 1、Jbpm3的圖形化流程定義嵌入到j(luò)bosseclipse IDE2枉阵、流程定制方式更接近用戶的理解
拓展性 體系和功能最為復(fù)雜译红,秉承“模塊化”的思想,比較容易擴展 有良好的擴展性兴溜,絕對的靈活(同時也增加了開發(fā)者的工作量侦厚,需要自己寫一些必要的函數(shù)) 最適宜擴展(Jbpm的過程模式支持是比較固定的,但是其對任務(wù)的中action擴展是很的靈活)最適宜被商業(yè)化應(yīng)用
持久化 Shark的持久層采用DODS來實現(xiàn) 1拙徽、它提供的持久化API:EJB,Hibernate,JDBC等 2刨沦、Osworkflow 可以與Spring集成。 利用hibernate持久化
小結(jié) Shark是體系和功能最為復(fù)雜的代表膘怕。它是一款遵循WfMC的XPDL標(biāo)準(zhǔn)開源工作流引擎,并且同時遵循OMG組織的WorkflowManagement Facility規(guī)范来破。XPDL的兩個最重要的概念是Process和Activity徘禁。XPDL中的Activity是基于UML1.x中的活動圖的概念娘荡∷模活動圖天生的適于工作流程建模央拖,它相對于狀態(tài)圖的一個最大的優(yōu)點是容易做并發(fā)線程的分叉控制,這些并發(fā)線程可以同時執(zhí)行也可以順序執(zhí)行遏餐;它還有一個優(yōu)點是有泳道的概念失都,可以控制工作流引擎中的任務(wù)的產(chǎn)生幸冻。 在所有開源工作流引擎中洽损,Shark的體系最為完備和復(fù)雜碑定。其一直秉承著“模塊化”的思想,所以比較容易擴展漫试。但是自從被Together公司收購后,Shark的商業(yè)化色彩已經(jīng)越來越濃秘车,改稱為Together Workflow Server,并僅以Community Edition的形式提供了部分開源代碼供參考眯亦。 OSWorkflow是最輕量型的代表妻率,也是一款非常靈活和低級別定位的工作流引擎的實現(xiàn)框架。低級別定位的意思是說,它不是定位在解決流程模型對象和運轉(zhuǎn)場景孤里,而是提供一套可維護調(diào)度的機制伏伯,供開發(fā)人員自主擴展捌袜。這個維護流程調(diào)度機制OSWorkflow選擇的是基于行為(Action)的FSM理論,所以O(shè)SWorkflow更像是一個復(fù)雜而靈活的有限狀態(tài)調(diào)度機虏等。 Osworkflow有個重要概念是State,State是由step和status聯(lián)合表達的霍衫,一個State就是一個step中的某個status候引;而state的轉(zhuǎn)換由action來驅(qū)動慕淡,類似狀態(tài)圖中的event,因為一個event對應(yīng)一個action OSWorkflow在國內(nèi)項目應(yīng)用得較多峰髓,很多國內(nèi)的簡易審批流程項目都是基于其引擎二次開發(fā)而來。這主要是由于OSWorkflow是基于Action驅(qū)動的徐紧,而國內(nèi)的客戶也很容易接受這樣的操作習(xí)慣。但OSWorkflow所依賴的FSM模型對于分支侮腹、聚合嘲碧、子流程的支持度很低,這一點在實施過程中需要注意父阻。 Jbpm結(jié)合應(yīng)用了狀態(tài)圖+活動圖+PetriNet的知識愈涩,而且這里的活動圖還是UML2.0版的望抽。UML2.0的活動圖中,節(jié)點不叫活動(Activity)而叫動作(action)履婉,活動成了一個高層次的概念煤篙,它包含一個動作序列。一個活動圖展現(xiàn)一系列的動作毁腿,這些動作組成了活動辑奈。Jbpm把action也改名了,稱為state已烤。Jbpm使用的狀態(tài)圖的概念有transition/event等身害。Jbpm來內(nèi)部實現(xiàn)中還采用了PetriNet的概念,如token,signal等草戈,jBpm對Token的應(yīng)用很有特色塌鸯,巧妙地利用Parent-Child Token的機制處理分支、父子流程等復(fù)雜應(yīng)用場景唐片。 jBpm是最適合擴展的代表丙猬,是在所有開源引擎中最適宜被商業(yè)化應(yīng)用的一款。首先其流程建模模型是基于Activity Diagram(活動圖)的费韭,并在引擎構(gòu)建上融入了FSM和PetriNet思想茧球,所以其內(nèi)核和根基比較牢固扎實。其次星持,自從被JBoss收購后抢埋,其3.x系列的結(jié)構(gòu)更加趨于微內(nèi)核,Plug-in思想也更加深入督暂。其同時還提供了對BPEL擴展揪垄,存儲支持JBossHibernate實現(xiàn),集成了JBoss seam逻翁,規(guī)則引擎準(zhǔn)備采用JBossrules饥努,并準(zhǔn)備集成JBoss Messaging。這樣八回,不論從內(nèi)核和外圍應(yīng)用酷愧,jBpm都具有了強勁的動力。

用OSWorkFlow和JBPM開發(fā)工作流異同

引用鏈接 JPBM OSWorkFlow
編寫流程描述文件方式 BPM是通過圖形化的編輯工具(JBPM自帶的Eclipse插件)來編寫業(yè)務(wù)流程如開始狀態(tài)缠诅,結(jié)束狀態(tài)溶浴,以及狀態(tài)之間的轉(zhuǎn)換,之后會自動生成XML文件管引,但具體每一步相關(guān)的細(xì)節(jié)操作還是要手工配置(如該節(jié)點是屬于什么類型節(jié)點士败,相關(guān)的函數(shù),要不要較驗)汉匙。 OSWorkFlow則要通過手工寫XML文件來定義流程文件拱烁,而且它涉及的標(biāo)簽元素比較多生蚁,其用戶手冊上也建議實施人員不要去修改流程,否則流程很容易破壞戏自。
工作流信息保存方式 JBPM是將流程信息直接保存到數(shù)據(jù)庫邦投,可以用任何方式對數(shù)據(jù)庫的操作,這樣就要引入保存工作流信息的相關(guān)表擅笔。 OSWorkFlow是既可以保存在XML文件里志衣,也可以保存在數(shù)據(jù)庫中,保存在數(shù)據(jù)庫中時需要配置propertySet.xml文件猛们,比較復(fù)雜念脯,而且它不是完全支持hibernate(如引入osuser來作權(quán)限分析時),此時要自定義操作數(shù)據(jù)庫的方式弯淘。
與系統(tǒng)集成 JBPM集成比較容易绿店,加入Spring支持包spring-modules-jbpm31.jar,該包加入了Spring對JBPM的包裝,所有的集成都是在此包基礎(chǔ)之上庐橙。之后還要配置sessionFactoryForJbpm ,jbpmConfiguration,jbpmTemplate, jbpmDao假勿。 OSWorkFlow跟Spring集成須要如下所需組件: 1)SpringHibernateWorkflowStore,讓工作流程實例(如果需要的話)分享當(dāng)前事務(wù)态鳖。 2) SpringTypeResolver转培,允許 OSWorkflow 從 Spring ApplicationContext中獲得業(yè)務(wù)邏輯組件(conditions, functions等等)。 3)SpringConfiguration浆竭, 這是一個 Workflow Configuration 接口的實現(xiàn)類浸须, 它包含指向 store和 factory的引用,這樣可以在 spring 中注射或者連接邦泄。 4) SpringWorkflowFactory删窒,這是一個 XMLWorkflowFactory 封裝包,它可以允許從容器中注入 configuration虎韵,從而不再從其它的 XML 配置文件中讀取它們易稠。 如果OSWorkFlow引入osuser.xml來設(shè)置權(quán)限,則不支持Hibernate3包蓝,因為osuser是比較獨立的模塊,目前還沒有支持hibernate3企量,所以跟Spring集成時要修改配置文件applicationContext-hibernate3.xml
重點難點 JPDL語言的學(xué)習(xí)测萎,主要是用來編寫流程文件;理解3個接口:動作處理接口(提供影響流程執(zhí)行的方法届巩,在event和action元素中被回調(diào))硅瞧,判定處理接口(用在decision判定節(jié)點中,提供方法來判定節(jié)點的轉(zhuǎn)向)恕汇,委派處理接口(用在task的委派子元素assignment中腕唧,用來指定將任務(wù)分配給指定的人員或角色)或辖。 工作流文件定義的元素,主要用來編寫工作流懈贺;OSWorkFlow.xml及propertySet.xml文件的配置描验;InputMap接口争舞、Workflow 接口及WorkflowDescriptor接口。
開發(fā)步驟 通過圖形編輯工具編寫業(yè)務(wù)流程――>生成xml流程文件――>修改流程文件(判斷節(jié)點是任務(wù)節(jié)點耳鸯、普通節(jié)點還是判定節(jié)點,之后作相應(yīng)修改)――>導(dǎo)入保存流程信息的數(shù)據(jù)庫表――>部署流程定義文件(將流程文件中的內(nèi)容放到數(shù)據(jù)庫中)――>創(chuàng)建流程實例――>調(diào)用JBPM提供的signal方法執(zhí)行流程流轉(zhuǎn) 手工編寫工作流文件——>配置OSWorkflow.xml――>配置WorkStore——>配置propertySet.xml,osUser.xml文件(如果需要用戶權(quán)限)――>調(diào)用AbatractWorkflow類加載OSWorkflow.xml(它會自動加載工作流文件及數(shù)據(jù)庫配置文件)――>調(diào)用WorkFlow接口方法(initial()方法,transitionWorkflow()方法,doAction()方法)
流轉(zhuǎn)方法 先確定節(jié)點是什么節(jié)點膀曾,如果是普通的Node節(jié)點县爬,則是流程執(zhí)行到此節(jié)點不會中斷,繼續(xù)執(zhí)行添谊;如果是state節(jié)點财喳,則流程執(zhí)行到此節(jié)點會中斷,直到系統(tǒng)外的參與者發(fā)會命令才能繼續(xù)執(zhí)行斩狱,即調(diào)用signal()或end()方法纲缓;如果節(jié)點是Task-node,則會根據(jù)task任務(wù)列表的任務(wù)有沒全部執(zhí)行完來決定流轉(zhuǎn)喊废。 一個工作流包含多個步驟祝高。每一個步驟都有一個當(dāng)前狀態(tài)(例如, Queued, Underway, or Finished)。每一個步驟中都有一個或者多個動作可以被執(zhí)行污筷。每一個動作都可以設(shè)置執(zhí)行條件(condition)工闺,也可以設(shè)置執(zhí)行函數(shù)(pre-function or post-function)。動作產(chǎn)生結(jié)果(result)瓣蛀,導(dǎo)致工作流的狀態(tài)和當(dāng)前步驟發(fā)生改變
流程定義文件主要元素 一個JBPM的流程定義XML文件中包含一個< process-definition>元素陆蟆,而一個< process-definition>元素又包含零個或一個< description>元素,零個或多個的< swimlane>元素惋增,一個< start-state>元素叠殷,零個或多個的< state>元素或< decision>元素或< fork>元素或< join>元素,以及零個或多個的< action>元素诈皿,零個或多個<task-node>和<node>元素林束,一個< end-state>元素等等。此外稽亏,< process definition>元素有一個標(biāo)示符壶冒,以“name”屬性來表示,這個屬性必須存在截歉,用來表示該流程的名稱胖腾。 步驟(step)、條件(conditions)、循環(huán)(loops)咸作、分支(spilts)锨阿、合并(joins)、角色(roles)记罚、函數(shù)(function)
其他 JBPM的Scheduler可以實現(xiàn)在JBPM流程中定時觸發(fā)某一動作墅诡。在流程中JPBM提供了timer節(jié)點供我們使用,通過這個節(jié)點我們可以實現(xiàn)節(jié)點動作的定時觸發(fā)毫胜。

深入了解jBPM5與Activiti之間的差異對比

引用鏈接 Activiti JBPM5
相似之處 1书斜、都是BPMN2過程建模和執(zhí)行環(huán)境。2酵使、都是BPM系統(tǒng)(符合BPM規(guī)范)荐吉。3、都是開源項目-遵循ASL協(xié)議( Apache的 軟件許可)口渔。4样屠、都源自JBoss(Activiti5是jBPM4的衍生,jBPM5則基于Drools Flow)缺脉。 5痪欲、都很成熟,從無到有攻礼,雙方開始約始于2年半前业踢。 都有對人工任務(wù)的生命周期管理。 6礁扮、Activiti5和jBPM5唯一的區(qū)別是jBPM5基于WebService - HumanTask標(biāo)準(zhǔn)來描述人工任務(wù)和管理生命周期知举。 如有興趣了解這方面的標(biāo)準(zhǔn)及其優(yōu)點,可參閱WS - HT規(guī)范介紹 太伊。7雇锡、 都使用了不同風(fēng)格的 Oryx 流程編輯器對BPMN2建模。 jBPM5采用的是 Intalio 維護的開源項目分支僚焦。 Activiti5則使用了Signavio維護的分支锰提。
數(shù)據(jù)庫持久層ORM MyBatis3 Hibernate3
持久化標(biāo)準(zhǔn) JPA規(guī)范
事務(wù)管理 MyBatis機制/Spring事務(wù)控制 Bitronix,基于JTA事務(wù)管理
數(shù)據(jù)庫連接方式 Jdbc/DataSource Jdbc/DataSource
支持?jǐn)?shù)據(jù)庫 Oracle芳悲、SQL Server立肘、MySQL等多數(shù)數(shù)據(jù)庫 Oracle、SQL Server芭概、MySQL等多數(shù)數(shù)據(jù)庫
設(shè)計模式 Command模式赛不、觀察者模式等
內(nèi)部服務(wù)通訊 Service間通過API調(diào)用 基于Apache Mina異步通訊
集成接口 SOAP、Mule罢洲、RESTful 消息通訊
支持的流程格式 BPMN2、xPDL、jPDL等 目前僅只支持BPMN2 xml
引擎核心 PVM(流程虛擬機) Drools
技術(shù)前身 jBPM3惹苗、jBPM4 Drools Flow
所屬公司 Alfresco jBoss.org
集成 Activiti5使用Spring進行引擎配置以及各個Bean的管理殿较,綜合使用IoC和AOP技術(shù),使用CXF作為Web Services實現(xiàn)的基礎(chǔ)桩蓉,使用MyBatis進行底層數(shù)據(jù)庫ORM的管理淋纲,預(yù)先提供Bundle化包能較容易的與OSGi進行集成,通過與Mule ESB的集成和對外部服務(wù)(Web Service院究、RESTful等)的接口可以構(gòu)建全面的SOA應(yīng)用洽瞬; jBPM5使用jBoss.org社區(qū)的大多數(shù)組件,以Drools Flow為核心組件作為流程引擎的核心構(gòu)成业汰,以Hibernate作為數(shù)據(jù)持久化ORM實現(xiàn)伙窃,采用基于JPA/JTA的可插拔的持久化和事務(wù)控制規(guī)范,使用Guvnor作為流程管理倉庫样漆,能夠與Seam为障、Spring、OSGi等集成放祟。
優(yōu)劣對比 從技術(shù)組成來看鳍怨,Activiti最大的優(yōu)勢是采用了PVM(流程虛擬機),支持除了BPMN2.0規(guī)范之外的流程格式跪妥,與外部服務(wù)有良好的集成能力鞋喇,延續(xù)了jBPM3、jBPM4良好的社區(qū)支持眉撵,服務(wù)接口清晰侦香,鏈?zhǔn)紸PI更為優(yōu)雅;Activiti上手比較快执桌,界面也比較簡潔鄙皇、直觀 劣勢是持久化層沒有遵循JPA規(guī)范。 jBPM最大的優(yōu)勢是采用了Apache Mina異步通信技術(shù)仰挣,采用JPA/JTA持久化方面的標(biāo)準(zhǔn)伴逸,以功能齊全的Guvnor作為流程倉庫,有RedHat(jBoss.org被紅帽收購)的專業(yè)化支持膘壶; 但其劣勢也很明顯错蝴,對自身技術(shù)依賴過緊且目前僅支持BPMN2。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颓芭,一起剝皮案震驚了整個濱河市顷锰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌亡问,老刑警劉巖官紫,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肛宋,死亡現(xiàn)場離奇詭異,居然都是意外死亡束世,警方通過查閱死者的電腦和手機酝陈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毁涉,“玉大人沉帮,你說我怎么就攤上這事∑堆撸” “怎么了穆壕?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長其屏。 經(jīng)常有香客問我喇勋,道長,這世上最難降的妖魔是什么漫玄? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任茄蚯,我火速辦了婚禮,結(jié)果婚禮上睦优,老公的妹妹穿的比我還像新娘渗常。我一直安慰自己,他們只是感情好汗盘,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布皱碘。 她就那樣靜靜地躺著,像睡著了一般隐孽。 火紅的嫁衣襯著肌膚如雪癌椿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天菱阵,我揣著相機與錄音踢俄,去河邊找鬼。 笑死晴及,一個胖子當(dāng)著我的面吹牛都办,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播虑稼,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼琳钉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蛛倦?” 一聲冷哼從身側(cè)響起歌懒,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎溯壶,沒想到半個月后及皂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甫男,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年躲庄,在試婚紗的時候發(fā)現(xiàn)自己被綠了查剖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钾虐。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡噪窘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出效扫,到底是詐尸還是另有隱情倔监,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布菌仁,位于F島的核電站浩习,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏济丘。R本人自食惡果不足惜谱秽,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望摹迷。 院中可真熱鬧疟赊,春花似錦、人聲如沸峡碉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鲫寄。三九已至吉执,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間地来,已是汗流浹背戳玫。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留未斑,地道東北人咕宿。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像颂碧,于是被迫代替她去往敵國和親荠列。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

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