1. 程式人生 > 實用技巧 >Dubbo實現RPC呼叫使用入門

Dubbo實現RPC呼叫使用入門

>>> hot3.png

  • 使用Dubbo進行遠端呼叫實現服務互動,它支援多種協議,如Hessian、HTTP、RMI、Memcached、Redis、Thrift等等。由於Dubbo將這些協議的實現進行了封裝了,無論是服務端(開發服務)還是客戶端(呼叫服務),都不需要關心協議的細節,只需要在配置中指定使用的協議即可,從而保證了服務提供方與服務消費方之間的透明。
    另外,如果我們使用Dubbo的服務註冊中心元件,這樣服務提供方將服務釋出到註冊的中心,只是將服務的名稱暴露給外部,而服務消費方只需要知道註冊中心和服務提供方提供的服務名稱,就能夠透明地呼叫服務,後面我們會看到具體提供服務和消費服務的配置內容,使得雙方之間互動的透明化。

    示例場景

    我們給出一個示例的應用場景:
    服務方提供一個搜尋服務,對服務方來說,它基於SolrCloud構建了搜尋服務,包含兩個叢集,ZooKeeper叢集和Solr叢集,然後在前端通過Nginx來進行反向代理,達到負載均衡的目的。
    服務消費方就是呼叫服務進行查詢,給出查詢條件(滿足Solr的REST-like介面)。

    應用設計

    基於上面的示例場景,我們打算使用ZooKeeper叢集作為服務註冊中心。註冊中心會暴露給服務提供方和服務消費方,所以註冊服務的時候,服務先提供方只需要提供Nginx的地址給註冊中心,但是註冊中心並不會把這個地址暴露給服務消費方,如圖所示:

    我們先定義一下,通訊雙方需要使用的介面,如下所示:

    01 packageorg.shirdrn.platform.dubbo.service.rpc.api;
    02
    03 publicinterfaceSolrSearchService {
    04
    05 String search(String collection, String q, ResponseType type,intstart,introws);
    06
    07 publicenumResponseType {
    08 JSON,
    09 XML
    10 }
    11 }

    基於上圖中的設計,下面我們分別詳細說明Provider和Consumer的設計及實現。

    • Provider服務設計

    Provider所釋出的服務元件,包含了一個SolrCloud叢集,在SolrCloud叢集前端又加了一個反向代理層,使用Nginx來均衡負載。Provider的搜尋服務系統,設計如下圖所示:


    上圖中,實際Nginx中將請求直接轉發內部的Web Servers上,在這個過程中,使用ZooKeeper來進行協調:從多個分片(Shard)伺服器上並行搜尋,最後合併結果。我們看一下Nginx配置的內容片段:

    01 user nginx;
    02 worker_processes 4;
    03
    04 error_log /var/log/nginx/error.log warn;
    05 pid /var/run/nginx.pid;
    06
    07
    08 events {
    09 worker_connections 1024;
    10 }
    11
    12
    13 http {
    14 include /etc/nginx/mime.types;
    15 default_type application/octet-stream;
    16
    17 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    18 '$status $body_bytes_sent "$http_referer" '
    19 '"$http_user_agent" "$http_x_forwarded_for"';
    20
    21 access_log /var/log/nginx/access.log main;
    22
    23 sendfile on;
    24 #tcp_nopush on;
    25
    26 keepalive_timeout 65;
    27
    28 #gzip on;
    29
    30 upstream master {
    31 server slave1:8888 weight=1;
    32 server slave4:8888 weight=1;
    33 server slave6:8888 weight=1;
    34 }
    35
    36 server {
    37 listen 80;
    38 server_name master;
    39 location / {
    40 root /usr/share/nginx/html/solr-cloud;
    41 index index.html index.htm;
    42 proxy_passhttp://master;
    43 include /home/hadoop/servers/nginx/conf/proxy.conf;
    44 }
    45 }
    46 }

    執行說明

    首先保證服務註冊中心的ZooKeeper叢集正常執行,然後啟動SolrSearchServer,啟動的時候直接將服務註冊到ZooKeeper叢集儲存中,可以通過ZooKeeper的客戶端指令碼來檢視註冊的服務資料。一切正常以後,可以啟動執行客戶端SearchConsumer,呼叫SolrSearchServer所實現的遠端搜尋服務。

  • 核心技術:Maven,Springmvc mybatis shiro, Druid, Restful, Dubbo, ZooKeeper,Redis,FastDFS,ActiveMQ,Nginx
    1.專案核心程式碼結構截圖

    分散式框架介紹 - kafkaee - kafkaee的部落格

    專案模組依賴分散式框架介紹 - kafkaee - kafkaee的部落格

    特別提醒:開發人員在開發的時候可以將自己的業務REST服務化或者Dubbo服務化

    2.專案依賴介紹

    2.1後臺管理系統、Rest服務系統、Scheculer定時排程系統依賴如下圖:

    分散式框架介紹 - kafkaee - kafkaee的部落格

    2.2Dubbo獨立服務專案依賴如下圖:

    分散式框架介紹 - kafkaee - kafkaee的部落格

    3.專案功能部分截圖:

    分散式框架介紹 - kafkaee - kafkaee的部落格

    分散式框架介紹 - kafkaee - kafkaee的部落格

    分散式框架介紹 - kafkaee - kafkaee的部落格

    分散式框架介紹 - kafkaee - kafkaee的部落格

    分散式框架介紹 - kafkaee - kafkaee的部落格

    分散式框架介紹 - kafkaee - kafkaee的部落格

    分散式框架介紹 - kafkaee - kafkaee的部落格

    zookeeper、dubbo服務啟動

    分散式框架介紹 - kafkaee - kafkaee的部落格

    分散式框架介紹 - kafkaee - kafkaee的部落格

    dubbo管控臺

    分散式框架介紹 - kafkaee - kafkaee的部落格

    分散式框架介紹 - kafkaee - kafkaee的部落格

    分散式框架介紹 - kafkaee - kafkaee的部落格

    分散式框架介紹 - kafkaee - kafkaee的部落格

    分散式框架介紹 - kafkaee - kafkaee的部落格

    分散式框架介紹 - kafkaee - kafkaee的部落格

    分散式框架介紹 - kafkaee - kafkaee的部落格

    REST服務平臺

    分散式框架介紹 - kafkaee - kafkaee的部落格

    分散式框架介紹 - kafkaee - kafkaee的部落格

    分散式框架介紹 - kafkaee - kafkaee的部落格

    分散式框架介紹 - kafkaee - kafkaee的部落格

轉載於:https://my.oschina.net/grthrj/blog/729462