1. 程式人生 > >Dubbo 簡單RPC呼叫示例

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是介面的呼叫方。 專案依賴 <

DubboRPC呼叫過程

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 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!