基于dubbo快速發(fā)布restful服務(wù)

本文使用官方項目示例,基于dubbox發(fā)布restful服務(wù)辕宏。jdk,eclipse砾莱、maven神馬環(huán)境的就不講了瑞筐,自行baidu之。

dubbox下載恤磷、編譯

下載地址:https://github.com/dangdangdotcom/dubbox
下載方式可以用git下載面哼,也可以打包下載野宜。下載之后,用maven導(dǎo)入(eclipse->import->Maven)魔策。

dubbo項目結(jié)構(gòu)

使用maven打包匈子,版本2.8.4。

zookeeper安裝

本文使用的是單節(jié)點的注冊中心闯袒,在實際項目中需要考慮高可用虎敦,需要搭建集群注冊中心,集群環(huán)境搭建在以后的文章中會講到政敢。

下載

https://zookeeper.apache.org/
這里用的是zookeeper-3.5.1-alpha版本其徙,下載之后,解壓到本地喷户。

配置

進入conf目錄,修改dataDir(數(shù)據(jù))和dataLogDir(日志)文件目錄到你本地的目錄:

dataDir=E:\\zookeeper-3.5.1-alpha\\data
dataLogDir=E:\\zookeeper-3.5.1-alpha\\logs

其它不用改動唾那,需要注意的是clientPort=2181。這個就是dubbo連接注冊中心需要使用的端口褪尝。

啟動

進入zookeeper\bin目錄闹获,運行zkServer.cmd:

運行zookeeper

出現(xiàn)以下信息,啟動成功:

2017-05-20 10:53:29,604 [myid:] - INFO  [main:NIOServerCnxnFactory@673] - Configuring NIO connection handler with 10s sessionless connection timeout, 2 selector thread(s), 16 worker threads, and 64 kB direct buffers.
2017-05-20 10:53:29,609 [myid:] - INFO  [main:NIOServerCnxnFactory@686] - binding to port 0.0.0.0/0.0.0.0:2181

dubbo示例

demo導(dǎo)入

dubbo官方自帶的示例河哑,包括三個工程避诽,api\product(服務(wù)提供者)和consumer(服務(wù)消費者)。
導(dǎo)入后的項目結(jié)構(gòu):

dubbo示例項目結(jié)構(gòu)

demo解剖

dubbo-demo-api:定義的服務(wù)接口
dubbo-demo-provider:服務(wù)發(fā)布
dubbo-demo-consumer:服務(wù)消費

配置文件

<!--連接本地注冊中心-->
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>

服務(wù)接口

public interface UserService {
    User getUser(Long id);
    Long registerUser(User user);
}

定義了一個用戶接口璃谨,兩個方法沙庐。

服務(wù)發(fā)布

<!--對接口的實現(xiàn)-->
<bean id="userService" class="com.alibaba.dubbo.demo.user.UserServiceImpl" />
<!--dubbo服務(wù)-->
<dubbo:service interface="com.alibaba.dubbo.demo.user.UserService" ref="userService"  protocol="dubbo" group="xmlConfig"/>
<!--rest服務(wù)實現(xiàn)-->
<bean id="userRestService" class="com.alibaba.dubbo.demo.user.facade.UserRestServiceImpl">
    <property name="userService" ref="userService"/>
</bean>
<!--dubbo發(fā)布的rest服務(wù)-->
<dubbo:service interface="com.alibaba.dubbo.demo.user.facade.UserRestService" ref="userRestService"  protocol="rest" validation="true"/>

UserRestServiceImpl.java調(diào)用dubbo服務(wù),實現(xiàn)rest服務(wù)的發(fā)布:

public class UserServiceImpl implements UserService {

    private final AtomicLong idGen = new AtomicLong();

    public User getUser(Long id) {
        return new User(id, "username" + id);
    }
    public Long registerUser(User user) {
//        System.out.println("Username is " + user.getName());
        return idGen.incrementAndGet();
    }

UserServiceImpl.java對接口的實現(xiàn):

@Path("users")
@Consumes({MediaType.APPLICATION_JSON, MediaType.TEXT_XML})
@Produces({ContentType.APPLICATION_JSON_UTF_8, ContentType.TEXT_XML_UTF_8})
public class UserRestServiceImpl implements UserRestService {

    //使用dubbo服務(wù)
    private UserService userService;

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    @GET
    @Path("{id : \\d+}")
    public User getUser(@PathParam("id") Long id/*, @Context HttpServletRequest request*/) {
    //System.out.println("Client address from @Context injection: " + (request != null ? request.getRemoteAddr() : ""));
    //System.out.println("Client address from RpcContext: " + RpcContext.getContext().getRemoteAddressString());
        if (RpcContext.getContext().getRequest(HttpServletRequest.class) != null) {
            System.out.println("Client IP address from RpcContext: " + RpcContext.getContext().getRequest(HttpServletRequest.class).getRemoteAddr());
        }
        if (RpcContext.getContext().getResponse(HttpServletResponse.class) != null) {
            System.out.println("Response object from RpcContext: " + RpcContext.getContext().getResponse(HttpServletResponse.class));
        }
        return userService.getUser(id);
    }
}

服務(wù)消費

  • 啟動服務(wù)提供者
    使用測試用例DemoProvider.java啟動佳吞,控制臺出現(xiàn)以下信息拱雏,說明服務(wù)啟動成功:
[20/05/17 11:32:02:002 CST] main  INFO container.Main:  [DUBBO] Dubbo SpringContainer started!, dubbo version: 2.0.0, current host: 127.0.0.1
[2017-05-20 11:32:02] Dubbo service server started!

查看服務(wù)管理界面(啟動dobbo-admin工程):

dubbo管理界面

可以看到發(fā)布的服務(wù)。

  • 調(diào)用發(fā)布的restful
    調(diào)用地址:
http://localhost:8888/services/users/5.json  

返回數(shù)據(jù):

{"id":5,"username":"username5"}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末容达,一起剝皮案震驚了整個濱河市古涧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌花盐,老刑警劉巖羡滑,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異算芯,居然都是意外死亡柒昏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門熙揍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來职祷,“玉大人,你說我怎么就攤上這事∮邪穑” “怎么了是尖?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長泥耀。 經(jīng)常有香客問我饺汹,道長,這世上最難降的妖魔是什么痰催? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任兜辞,我火速辦了婚禮,結(jié)果婚禮上夸溶,老公的妹妹穿的比我還像新娘逸吵。我一直安慰自己,他們只是感情好缝裁,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布扫皱。 她就那樣靜靜地躺著,像睡著了一般压语。 火紅的嫁衣襯著肌膚如雪啸罢。 梳的紋絲不亂的頭發(fā)上编检,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天胎食,我揣著相機與錄音,去河邊找鬼允懂。 笑死厕怜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蕾总。 我是一名探鬼主播粥航,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼生百!你這毒婦竟也來了递雀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤蚀浆,失蹤者是張志新(化名)和其女友劉穎缀程,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體市俊,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡杨凑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了摆昧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撩满。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伺帘,到底是詐尸還是另有隱情昭躺,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布伪嫁,位于F島的核電站窍仰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏礼殊。R本人自食惡果不足惜驹吮,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晶伦。 院中可真熱鬧碟狞,春花似錦、人聲如沸婚陪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泌参。三九已至脆淹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沽一,已是汗流浹背盖溺。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留铣缠,地道東北人烘嘱。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像蝗蛙,于是被迫代替她去往敵國和親蝇庭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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