java 分布式rpc框架_分布式RPC框架Apache Dubbo(一)

4 Dubbo快速入門

Dubbo作為一個RPC框架,其最核心的功能就是要實現跨網絡的遠程調用。本小節就是要創建兩個應用,一個作為服務的提供方,一個作為服務的消費方。通過Dubbo來實現服務消費方遠程調用服務提供方的方法。

4.1 服務提供方開發

開發步驟:

(1)創建maven工程(打包方式為war)dubbodemo_provider,在pom.xml文件中導入如下坐標

war

UTF-8

1.8

1.8

5.0.5.RELEASE

org.springframework

spring-context

${spring.version}

org.springframework

spring-beans

${spring.version}

org.springframework

spring-webmvc

${spring.version}

org.springframework

spring-jdbc

${spring.version}

org.springframework

spring-aspects

${spring.version}

org.springframework

spring-jms

${spring.version}

org.springframework

spring-context-support

${spring.version}

com.alibaba

dubbo

2.6.0

org.apache.zookeeper

zookeeper

3.4.7

com.github.sgroschupf

zkclient

0.1

javassist

javassist

3.12.1.GA

com.alibaba

fastjson

1.2.47

org.apache.maven.plugins

maven-compiler-plugin

2.3.2

1.8

1.8

org.apache.tomcat.maven

tomcat7-maven-plugin

8081

/

(2)配置web.xml文件

創建 webapp/WEB-INF/web.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

version="3.1">

contextConfigLocation

classpath:applicationContext*.xml

org.springframework.web.context.ContextLoaderListener

(3)創建服務接口

package com.maweiqi.service;

/**

* HelloService

*

* @Author: 馬 偉 奇

* @CreateTime: 2019-07-18

* @Description:

*/

public interface HelloService {

public String sayHello(String name);

}

(4)創建服務實現類

package com.maweiqi.service.impl;

import com.alibaba.dubbo.config.annotation.Service;

import com.maweiqi.service.HelloService;

/**

* HelloServiceImpl

*

* @Author: 馬 偉 奇

* @CreateTime: 2019-07-18

* @Description:

*/

@Service

public class HelloServiceImpl implements HelloService {

@Override

public String sayHello(String name) {

return "hello " + name;

}

}

注意:服務實現類上使用的Service注解是Dubbo提供的,用于對外發布服務

(5)在src/main/resources下創建applicationContext-service.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd

http://code.alibabatech.com/schema/dubbo

http://code.alibabatech.com/schema/dubbo/dubbo.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd">

(6)啟動服務

1941e4f04dce

啟動服務

4.2 服務消費方開發

開發步驟:

(1)創建maven工程(打包方式為war)dubbodemo_consumer,pom.xml配置和上面服務提供者相同,只需要將Tomcat插件的端口號改為8082即可

war

UTF-8

1.8

1.8

5.0.5.RELEASE

org.springframework

spring-context

${spring.version}

org.springframework

spring-beans

${spring.version}

org.springframework

spring-webmvc

${spring.version}

org.springframework

spring-jdbc

${spring.version}

org.springframework

spring-aspects

${spring.version}

org.springframework

spring-jms

${spring.version}

org.springframework

spring-context-support

${spring.version}

com.alibaba

dubbo

2.6.0

org.apache.zookeeper

zookeeper

3.4.7

com.github.sgroschupf

zkclient

0.1

javassist

javassist

3.12.1.GA

com.alibaba

fastjson

1.2.47

org.apache.maven.plugins

maven-compiler-plugin

2.3.2

1.8

1.8

org.apache.tomcat.maven

tomcat7-maven-plugin

8082

/

(2)配置web.xml文件

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

version="3.1">

springmvc

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:applicationContext-web.xml

1

springmvc

/

(3)將服務提供者工程中的HelloService接口復制到當前工程

package com.maweiqi.service;

/**

* HelloService

*

* @Author: 馬偉奇

* @CreateTime: 2019-07-18

* @Description:

*/

public interface HelloService {

public String sayHello(String name);

}

(4)編寫Controller

package com.maweiqi.controller;

import com.alibaba.dubbo.config.annotation.Reference;

import com.maweiqi.service.HelloService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

/**

* HelloController

*

* @Author: 馬偉奇

* @CreateTime: 2019-07-19

* @Description:

*/

@Controller

@RequestMapping("/demo")

public class HelloController {

@Reference

private HelloService helloService;

@RequestMapping("/hello")

@ResponseBody

public String getName(String name){

//遠程調用

String result = helloService.sayHello(name);

System.out.println(result);

return result;

}

}

注意:Controller中注入HelloService使用的是Dubbo提供的@Reference注解

(5)在src/main/resources下創建applicationContext-web.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd

http://code.alibabatech.com/schema/dubbo

http://code.alibabatech.com/schema/dubbo/dubbo.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd">

(6)運行測試

1941e4f04dce

運行

在瀏覽器輸入http://localhost:8082/demo/hello?name=Jack,查看瀏覽器輸出結果

4.3 代碼重構

① 創建項目:dubbodemo_interface

1941e4f04dce

創建項目

② 把 項目dubbodemo_consumer 和 項目dubbodemo_provider當中的 接口 HelloService 拷貝到dubbodemo_interface工程里面

1941e4f04dce

image.png

③ 刪除工程dubbodemo_consumer 和 工程dubbodemo_provider當中的 接口 HelloService

1941e4f04dce

image.png

dubbodemo_consumer 工程和dubbodemo_provider添加pom文件的依賴

com.maweiqi

dubbodemo_interface

1.0-SNAPSHOT

1941e4f04dce

獲取數據

5. Dubbo管理控制臺

我們在開發時,需要知道Zookeeper注冊中心都注冊了哪些服務,有哪些消費者來消費這些服務。我們可以通過部署一個管理中心來實現。其實管理中心就是一個web應用,部署到tomcat即可。

5.1 安裝

安裝步驟:

(1)將資料中的dubbo-admin-2.6.0.war文件復制到tomcat的webapps目錄下

1941e4f04dce

image.png

(2)啟動tomcat,此war文件會自動解壓

1941e4f04dce

image.png

(3)修改WEB-INF下的dubbo.properties文件,注意dubbo.registry.address對應的值需要對應當前使用的Zookeeper的ip地址和端口號

dubbo.registry.address=zookeeper://192.168.134.129:2181

dubbo.admin.root.password=root

dubbo.admin.guest.password=guest

1941e4f04dce

image.png

(4)重啟tomcat

5.2 使用

操作步驟:

1941e4f04dce

image.png

(2)啟動服務提供者工程和服務消費者工程,可以在查看到對應的信息

1941e4f04dce

image.png

1941e4f04dce

image.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453596.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453596.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453596.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

輕松獲知數據庫事務

標題索引事務作用事務流程隔離級別實例驗證事務作用事務是確保數據庫系統數據的完整性的功能,如現在互聯網行業支付業務,不管服務器出于什么原因異常中斷,客戶要么支付成功要么支付不成功,支付成功數據庫金額即會發生變化&#xf…

Python冒泡排序(4)

Python代碼: """ 冒泡排序(4)在未排序的數中,通過兩兩比較[換位]的方式,將最小的數移至首位 N個數排序,則需要執行N-1輪,第1輪比較N-1次,后續每輪比上一輪少比較1次本…

打印hello world java_java – 如何打印“hello world”?

數字4946144450195624適合64位,其二進制表示為:10001100100100111110111111110111101100011000010101000該程序對每5位組的字符進行解碼,從右到左00100|01100|10010|01111|10111|11111|01111|01100|01100|00101|01000d | l | r | o | w | | o…

研發人員為什么留不住

研發人員為什么留不住?(1)——問題與現象 研發團隊做為公司的核心,承擔了完成項目為公司賺錢的目的。研發人員在公司倍受重視的同時,并沒有降低流失率。 問題與現象 以下問題相信您會在朋友口中,甚至自己的公司聽到。 老板說&a…

算法與編程--1

1、編寫一個程序,將a.txt文件中的單詞與b.txt文件中的單詞交替合并到c.txt文件中,a.txt文件中的單詞用回車符分隔,b.txt文件中用回車或空格進行分隔。 package com.test;import java.io.File; import java.io.FileNotFoundException; import …

Safari支不支持HTML5錄音? 現在瀏覽器中最好的解決方案是WebRTC下的 navigator.getUserMedia API。...

先放結論:Safari支不支持HTML5錄音? ——據我調查,不支持。 現在瀏覽器中最好的解決方案是WebRTC下的 navigator.getUserMedia API。 可是當使用Can I use查看兼容性的時候,我發現 不過這個是有歷史原因的,我記得RTC是…

python lambda map reduce_簡單了解python filter、map、reduce的區別

這篇文章主要介紹了簡單了解python filter、map、reduce的區別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下python中有一些非常有趣的函數,面試的時候可能會遇到。今天也來總結一下,不…

面試問題匯總 精選 分析 解答 職業規劃 part 4

程序員做業余項目、記筆記和寫博客的重要性【經典】 編程是一種創造過程,業余項目允許程序員在沒有截止日期或各種限制的條件下,以探索形式編程。業余項目之所以重要,有以下幾個原因。 探索新技術 每天都會不斷有新技術出現,而…

NB-IOT連接移動onenet平臺流程

1. 先創建賬號,然后創建產品 2. 創建設備,用ATCGSN和ATCIMI查詢NB-IOT的IMEI和IMSI填寫上去。 3. 創建好的設備。 轉載于:https://www.cnblogs.com/429512065qhq/p/8359247.html

sort,uniq,wc指令簡單用法

sort用于排序,可以根據不同的數據類型來進行排序,例如想要查看最后一個登陸的用戶信息,可以把last和sort結合起來使用,按照登陸時間排序。 使用sort排序: sort常用參數: -f :忽略大小寫的差異 -…

java ejb jsp 架構_JavaEE架構

B/S 體系結構image.pngJava EE 經典架構image.pngJava EE 13規范JDBCimage.pngJDBC 對象與接口java.sql.DriverManager:用于管理JDBC驅動的服務類,當JDBC驅動加載至內存后,DriverManager會自動注冊JDBC驅動,然后通過getConnection…

音視頻中的CBR,VBR,ABR

視頻碼率CBR和VBR 固定碼率(CBR)與可變碼率(VBR) 一般在我們輸出視頻文件的時候都會碰到一個選擇即CBR與VBR,CBR的英文全稱是Constant Bit Rate翻譯過來是固定碼率,就是說每一秒種的畫面如果看做是一個…

fifo java_java – 如何保證ThreadPoolExecutor中的FIFO執行順序

我用這行代碼創建一個ThreadPoolExecutor:private ExecutorService executor new ThreadPoolExecutor(5, 10, 120, TimeUnit.SECONDS, new ArrayBlockingQueue(20, true));然后,我運行25個任務(T01到T25),所以情況是:>目前正在運行的5個任務(T01到T0…

HihoCoder 1671 DFS

本以為是個簡單的水題,好吧,其實就是個水題,雖然我還是…… 題意的理解上有一點小小的問題orz,這里的括號里的字母是可以看成一個整體的,可以看作一個字母來進行反轉, 比如說,(abc(de))&#xf…

avs 中國音視頻標準DRA 中音頻標準及應用

DRA 是Digital Rise Audio的縮寫。是廣州廣晟數碼技術有限公司(Digital Rise Technology)開發的一項數字音頻編碼技術,目前是音頻編碼的國家標準。2007年1月被批準成為中國電子行業標準(標準號SJ/T11368-2006)。DRA音頻標準可應用…

UWP數據綁定

已針對 Windows 10 上的 UWP 應用更新。 有關 Windows 8.x 文章,請參閱存檔 ] 數據綁定是你的應用 UI 用來顯示數據的一種方法,可以選擇與該數據保持同步。 借助數據綁定,你可以將關注的數據從關注的 UI 中分離開來,從而可形成一個…

資源鏈接

http://cn.epubee.com/ 電子書 http://www.feemic.cn/mooc_search/1002384010 中國大學mooc視頻下載 http://www.icourse163.org 中國大學mooc http://www.xuetangx.com 學堂在線 http://yun.java1234.com/ 視頻搜索 http://www.52studyit.com/轉載于:https://www.cnblogs.co…

最大開源代碼sourceforge 簡介 及視音頻方面常用的開源代碼

所有的音視頻凱源代碼在這里:http://sourceforge.net/directory/audio-video/os:windows/,你可以下載分析,視頻不懂請發郵件給我,幫你分析。 0.視頻項目 0.1 VLC media player VLC 多媒體播放器(最初為VideoLAN Clien…

[轉]被當做狗和雞來驅趕的百姓

原文鏈接:知乎 杜甫寫過許多好詩。 好詩,不一定是辭藻美、場面好、色色入畫。 不一定是吳楚東南坼,乾坤日夜浮。不一定是五更鼓角聲悲壯,三峽星河影動搖。 不一定是星垂平野闊,月涌大江流。不一定是細雨魚兒出&#xf…

背包問題(動態規劃)

本篇文章作為個人的背包問題學習資料,來自轉載 dd大牛的《背包九講》. P01: 01背包問題 題目 有N件物品和一個容量為V的背包。第i件物品的費用是c[i],價值是w[i]。求解將哪些物品裝入背包可使這些物品的費用總和不超過背包容量,且價值總和最大…