Dubbo 簡單RPC呼叫示例
專案使用Spring+Dubbo+ZooKeeper,使用Maven管理。
先看專案結構,dubbo-api存放需要呼叫的介面,dubbo-provider實現介面並且暴露介面,dubbo-consumer是介面的呼叫方。
專案依賴
<dependencies>
<!--Log Start-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId >
<version>${org.slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j.version}</version>
</dependency >
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--Log End-->
<!--Spring Start-->
<dependency>
<groupId >org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<!--Spring End-->
<!--Dubbo Start-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
</dependency>
<!--Dubbo End-->
<!--ZooKeeper Start-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<!--ZooKeeper End-->
</dependencies>
首先在dubbo-api中定義一個介面DemoService
package com.hqq.service.impl.service;
/**
* Package: com.hqq.service
* User: 何芊芊
* Date: 2017/12/22
* Time: 10:25
* Description:
*/
public interface DemoService {
String echName(String name);
}
在dubbo-provider中實現該介面(依賴api模組)
package com.hqq.service.impl;
import com.hqq.service.impl.service.DemoService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Package: com.hqq.service.impl
* User: 何芊芊
* Date: 2017/12/22
* Time: 10:28
* Description:
*/
public class DemoServiceImpl implements DemoService {
private Logger logger = LoggerFactory.getLogger(DemoServiceImpl.class);
public String echName(String name) {
logger.debug("======DemoServiceImpl echName=====" + name);
return name;
}
}
編寫dubbo配置檔案
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--定義了提供方應用資訊,用於計算依賴關係;在 dubbo-admin 或 dubbo-monitor 會顯示這個名字,方便辨識-->
<dubbo:application name="demotest-provider" owner="programmer" organization="dubbox"/>
<!--使用 zookeeper 註冊中心暴露服務,注意要先開啟 zookeeper-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!-- 用dubbo協議在20880埠暴露服務 -->
<dubbo:protocol name="dubbo" port="20880" />
<!--使用 dubbo 協議實現定義好的 api.PermissionService 介面-->
<dubbo:service interface="com.hqq.service.impl.service.DemoService" ref="demoService" protocol="dubbo" />
<!--具體實現該介面的 bean-->
<bean id="demoService" class="com.hqq.service.impl.DemoServiceImpl"/>
</beans>
啟動provider端
import com.alibaba.dubbo.common.logger.Logger;
import com.alibaba.dubbo.common.logger.LoggerFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
/**
* Package: PACKAGE_NAME
* User: 何芊芊
* Date: 2017/12/22
* Time: 10:32
* Description:
*/
public class Provider {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("classpath:spring-dubbo.xml");
System.out.println(ac.getDisplayName());
ac.start();
System.out.println("程式已啟動……");
System.in.read();
}
}
執行結果:
org[email protected]1ee2c5
程式已啟動……
在consumer中呼叫該介面
package com.hqq.demo;
import com.hqq.service.impl.service.DemoService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Package: com.hqq.demo
* User: 何芊芊
* Date: 2017/12/22
* Time: 10:43
* Description:
*/
public class Consumer {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-dubbo-client.xml");
context.start();
System.out.println("Consumer Start");
DemoService demoService = context.getBean(DemoService.class);
System.out.println("Consumer");
System.out.println(demoService.echName("heqianqian"));
}
}
配置檔案如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="demotest-consumer" owner="programmer" organization="dubbox"/>
<!--向 zookeeper 訂閱 provider 的地址,由 zookeeper 定時推送-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!--使用 dubbo 協議呼叫定義好的 api.PermissionService 介面-->
<dubbo:reference id="permissionService" interface="com.hqq.service.impl.service.DemoService"/>
</beans>
呼叫結果
Consumer Start
Consumer
heqianqian
在dubbo-admin平臺上檢視
相關推薦
Dubbo 簡單RPC呼叫示例
專案使用Spring+Dubbo+ZooKeeper,使用Maven管理。 先看專案結構,dubbo-api存放需要呼叫的介面,dubbo-provider實現介面並且暴露介面,dubbo-consumer是介面的呼叫方。 專案依賴 <
Dubbo的RPC呼叫過程
Dubbo的RPC呼叫在客戶端觸發,配置檔案中定義: <dubbo:reference id="xxxService" interface="xxx.xxx.Service"/> 這一行定義會為xxx.xxx.Service在本地生成一個遠端代理
Netty 實現簡單RPC呼叫
RPC,即 Remote Procedure Call(遠端過程呼叫),說得通俗一點就是:呼叫遠端計算機上的服務,就像呼叫本地服務一樣。 RPC 可基於 HTTP 或 TCP 協議,Web Service 就是基於 HTTP 協議的 RPC,它具有良好的跨平臺
dubbo簡單示例
XML consumer pen 開啟 -- demo toc 0.10 get 1. 代碼結構 2.創建test-dubbo-api 創建服務接口類qinfeng.zheng.service.DemoApiService package qinfeng.
一個簡單RPC框架是如何煉成的(III)——實現帶引數的RPC呼叫
上一篇,我們制定了一個很簡單的RPC訊息 的格式,但是還遺留了兩個問題 我們並沒有實現相應的encode和decode方法,沒有基於可以跨裝置的字串傳輸,而是直接的記憶體變數傳遞。 現在的RPC request不支援帶引數的請求命令。如add(a, b), 如何在RPC訊息中描述
Dubbo呼叫示例
用dubbo做一個“hello world”。 此次demo十分簡單,旨在對Dubbo有個整體上的初步瞭解。服務提供者(程式)和服務消費者(程式)雖然都是執行在同個伺服器上(本地tomcat),但是呼叫是通過Dubbo的RPC。 註冊中心是redis,部署在本地虛擬機器,地址為192
netty 實現簡單的rpc呼叫
> **yls** *2020/5/23* ## netty 實現簡單rpc準備 1. 使用netty傳輸java bean物件,可以使用protobuf,也可以通過json轉化 2. 客戶端要將呼叫的介面名稱,方法名稱,引數列表的型別和值傳輸到服務端, 可以用動態代理 3. 服務端要對介面和實現類
一個簡單的MapReduce示例(多個MapReduce任務處理)
.lib exceptio apr private util sum length reat lin 一、需求 有一個列表,只有兩列:id、pro,記錄了id與pro的對應關系,但是在同一個id下,pro有可能是重復的。 現在需要寫一個程序,統計一下每個id下有
dubbo簡單配置與使用
detail 客戶 說明 pre cat 次數 自動實現 是否 tco dubbo簡介 隨著互聯網的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分布式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。 單一應用架構 當網站流量
Dubbo 簡單源碼
Dubbo實例一、項目目錄結構其中edu_service_user 是服務的提供方,edu-web_boss 是服務的消費方 二 xml 的核心配置①,服務提供方 (解釋:address 是當前我本機的ip interface :
Web Service入門簡介(一個簡單的WebService示例)
efi 都是 調用 soap form 依賴 語言 1.3 tran Web Service入門簡介(一個簡單的WebService示例) Web Service入門簡介 一、Web Service簡介1.1、Web Service基本概念Web Service也叫XM
Python正則表示式的簡單應用和示例演示
前一陣子小編給大家連續分享了十篇關於Python正則表示式基礎的文章,感興趣的小夥伴可以點選連結進去檢視。今天小編給大家分享的是Python正則表示式的簡單應用和示例演示,將前面學習的Python正則表示式做一個概括。 下面的栗子是用於提取高考日期,一般來說,我們填寫日期都會寫2018年6月7日,但
一個簡單RPC框架是如何煉成的(V)——引入傳輸層
開局篇我們說了,RPC框架的四個核心內容 RPC資料的傳輸。 RPC訊息 協議 RPC服務註冊 RPC訊息處理 接下來處理資料傳輸。實際應用場景一般都是基於socket。socket程式碼比較多,使用起來也比較麻煩。而且具體的傳輸
一個簡單RPC框架是如何煉成的(IV)——實現RPC訊息的編解碼
之前我們制定了一個很簡單的RPC訊息 的格式,但是還遺留了兩個問題,上一篇解決掉了一個,還留下一個 我們並沒有實現相應的encode和decode方法,沒有基於可以跨裝置的字串傳輸,而是直接的記憶體變數傳遞。 現在的RPC request不支援帶引數的請求命令。如add(a,
一個簡單RPC框架是如何煉成的(II)——制定RPC訊息
開局篇我們說了,RPC框架的四個核心內容 RPC資料的傳輸。 RPC訊息 協議 RPC服務註冊 RPC訊息處理 下面,我們先看一個普通的過程呼叫 class Client(object): def __init__(sel
一個簡單RPC框架是如何煉成的(I)——開局篇
開場白,這是一個關於RPC的相關概念的普及篇系列,主要是通過一步步的調整,提煉出一個相對完整的RPC框架。 RPC(Remote Procedure Call Protocol)——遠端過程呼叫協議,基於C/S模型。網路上有一篇文章寫得不錯,可以去了解一下相關概念深入淺出RPC 這裡,直接使
RPC呼叫
1.RPC呼叫、本地呼叫和HTTP呼叫 網路呼叫一般是基於HTTP協議進行呼叫,RPC是使用TCP或者UDP協議進行呼叫,效率上回更好; 常用的RPC框架有Thrift、GRPC等; 2.RPC的呼叫時序圖 1)呼叫方呼叫Proxy請求服務,並設定非同步處
RPC呼叫流程(Remote Procedure Call Protocol)
網址:http://blog.jobbole.com/92290/ 要讓網路通訊細節對使用者透明,我們自然需要對通訊細節進行封裝,我們先看下一個RPC呼叫的流程: 1)服務消費方(client)呼叫以本地呼叫方式呼叫服務; 2)client stub接收到呼叫後負責將方
原始碼剖析 | 螞蟻金服 mPaaS 框架下的 RPC 呼叫歷程
背景 mPaaS-RPC 是支付寶原生的 RPC 呼叫庫。 在客戶端開發過程中,只需要簡單的呼叫庫裡封裝的函式即可完成一次資料請求過程,但是遇到異常情況往往會面對各種異常碼卻不知所云。所以這篇文章帶領大家瞭解一下 mPaaS-RPC 的呼叫過程以及各種異常碼產生的原因。 1. 使用方法 在 Andro
HttpClient4 5 2呼叫示例(轉載+原創)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!