再探motan

来源:https://www.cnblogs.com/luxurytime/archive/2018/08/24/9528437.html
-Advertisement-
Play Games

前言:上周使用motan是通過group遠程調用超級土豆的服務,但是因為我需要寫一些服務,不得不在本地啟動服務,於是就詳細的自己配置了一次motan。 上一篇博客也說到了,motan主要有3部分組成:registry,server和client。其中我們的registry用的是consul。下麵就這 ...


前言:上周使用motan是通過group遠程調用超級土豆的服務,但是因為我需要寫一些服務,不得不在本地啟動服務,於是就詳細的自己配置了一次motan。

上一篇博客也說到了,motan主要有3部分組成:registry,server和client。其中我們的registry用的是consul。下麵就這3個部分一個一個的說明:

1、pom.xml 添加motan依賴:

    一般來說,在公共模塊的pom文件里添加依賴就可以了,比如在server、client、dao和common的SNA編程模型下,只要在common的pom文件中添加依賴即可

 1 <dependency>
 2      <groupId>com.weibo</groupId>
 3      <artifactId>motan-core</artifactId>
 4      <version>RELEASE</version>
 5  </dependency>
 6  <dependency>
 7      <groupId>com.weibo</groupId>
 8      <artifactId>motan-transport-netty</artifactId>
 9      <version>RELEASE</version>
10  </dependency>
11  
12  <!-- only needed for spring-based features -->
13  <dependency>
14      <groupId>com.weibo</groupId>
15      <artifactId>motan-springsupport</artifactId>
16      <version>RELEASE</version>
17  </dependency>
18  <dependency>
19      <groupId>org.springframework</groupId>
20      <artifactId>spring-context</artifactId>
21      <version>4.2.4.RELEASE</version>
22  </dependency>

2、配置motan

Motan框架中將功能模塊抽象為四個可配置的元素,分別為:

  • protocol:服務通信協議。服務提供方與消費方進行遠程調用的協議,預設為Motan協議,使用hessian2進行序列化,netty作為Endpoint以及使用Motan自定義的協議編碼方式。

  • registry:註冊中心。服務提供方將服務信息(包含ip、埠、服務策略等信息)註冊到註冊中心,服務消費方通過註冊中心發現服務。當服務發生變更,註冊中心負責通知各個消費方。

  • service:服務提供方提供的服務。使用方將核心業務抽取出來,作為獨立的服務。通過暴露服務並將服務註冊至註冊中心,從而使調用方調用。

  • referer:服務消費方對服務的引用,即服務調用方。

       一般來說,在server端需要配置registry、protocol和service;在client端需要配置registry、protocol和referer。

Motan推薦使用spring配置rpc服務,目前Motan擴展了6個自定義Spring xml標簽:

  • motan:protocol
  • motan:registry
  • motan:basicService
  • motan:service
  • motan:basicReferer
  • motan:referer

詳細配置:

<motan:registry/>

  註冊中心配置。用於配置註冊中心的註冊協議、地址埠、超時時間等。motan:registry包含以下常用屬性:

    • name:標識配置名稱
    • regProtocol:標識註冊中心協議
    • address:標識註冊中心地址

  Motan支持使用多種Registry模塊,使用不同註冊中心需要依賴對應jar包。

  以consul為註冊中心舉例:

<motan:registry  regProtocol="consul" 
          name
="my_consul"
          address
="${my.consul.address}"/>

  下表是registry的所有屬性說明:

Property nameTypeDefaultComment
name String   註冊配置名稱
regProtocol String   註冊協議
address String   註冊中心地址
port int 0 註冊中心預設埠
connectTimeout int 1000 註冊中心連接超時時間(毫秒)
requestTimeout int 200 註冊中心請求超時時間(毫秒)
registrySessionTimeout int 60s 註冊中心會話超時時間(毫秒)
registryRetryPeriod int 30s 失敗後重試的時間間隔
check boolean true 啟動時檢查失敗後是否仍然啟動
register boolean true 在該註冊中心上服務是否暴露
subscribe boolean true 在該註冊中心上服務是否引用
default boolean   是否預設的配置

 

 

 

 

 

 

 

 

 

 

 

 

<motan:service/> 和 <motan:basicService/>

protocol、basic service、extConfig、service中定義相同屬性時,優先順序為service > extConfig > basic service > protocol

  <motan:service .../>

  motan:service包含以下常用屬性:

    • interface:標識服務的介面類名
    • ref:標識服務的實現類,引用具體的spring業務實現對象
    • export:標識服務的暴露方式,格式為“protocolId:port”(使用的協議及對外提供的埠號),其中protocolId:應與motan:protocol中的id一致
    • group:標識服務的分組
    • module:標識模塊信息
    • basicService:標識使用的基本配置,引用motan:basicService對象

  Motan在註冊中心的服務是以group的形式保存的,一般推薦一個分組以機房+業務線進行命名,如yf-user-rpc。一個分組中包含若幹的Service,一個Service即是java中的一個介面類名,每個Service下有一組能夠提供對應服務的Server。

<motan:basicService .../>

  rpc服務的通用配置,用於配置所有服務介面的公共配置,減少配置冗餘。basicService包含以下常用屬性:

    • id:標識配置項
    • export:標識服務的暴露方式,格式為“protocolId:port”(使用的協議及對外提供的埠號),其中protocolId:應與motan:protocol中的id一致
    • group:標識服務的分組
    • module:標識模塊信息
    • registry:標識service使用的註冊中心,與motan:registry中的name對應

  motan:service可以通過以下方式引用基本配置。

<!-- 通用配置,多個rpc服務使用相同的基礎配置. group和module定義具體的服務池。export格式為“protocol id:提供服務的埠” -->
<motan:basicService id="serviceBasicConfig" export="demoMotan:8002" group="motan-demo-rpc" module="motan-demo-rpc" registry="registry"/>
<!-- 通用配置,多個rpc服務使用相同的基礎配置. group和module定義具體的服務池。export格式為“protocol id:提供服務的埠” -->
<motan:service interface="com.weibo.motan.demo.service.MotanDemoService" ref="demoServiceImpl" basicService="serviceBasicConfig"/>

 

motan:service中的basicService屬性用來標識引用哪個motan:basicService對象,對於basicService中已定義的內容,service不必重覆配置。

下表是service的所有屬性說明:

Property nameTypeDefaultComment
export String   服務暴露的方式,包含協議及埠號,多個協議埠用"," 分隔
basicService     基本service配置
interface Class   服務介面名
ref String   介面實現的類
class String   實現service的類名
host String   如果有多個ip,但只想暴露指定的某個ip,設置該參數
path String   服務路徑
serialization String hessian2 序列化方式
extConfig String   擴展配置
proxy String   代理類型
group String default_rpc 服務分組
version String 1.0 版本
throwException String true 拋出異常
requestTimeout String 200 (目前未用)請求超時時間(毫秒)
connectTimeout String 1000 (目前未用)連接超時時間(毫秒)
retries int 0 (目前未用)重試次數
filter String   過濾器配置
listener String   監聽器配置
connections int   連接數限制,0表示共用連接,否則為該服務獨享連接數;預設共用
application String motan 應用信息
module String motan 模塊信息
shareChannel boolean false 是否共用channel
timeout int   方法調用超時時間
actives int 0 最大請求數,0為不做併發限制
async boolean false 方法是否非同步
mock String false 設為true,表示使用預設Mock類名,即:介面名+Mock 尾碼,服務介面調用失敗Mock實現類
check boolean true 檢查服務提供者是否存在
registry String   註冊中心的id 列表,多個用“,”分隔,如果為空,則使用所有的配置中心
register boolean true 在該註冊中心上服務是否暴露
subscribe boolean true 在該註冊中心上服務是否引用
accessLog String false 設為true,將向logger 中輸出訪問日誌
usegz boolean false 是否開啟gzip壓縮.只有compressMotan的codec才能支持
mingzSize int 1000 開啟gzip壓縮的閾值.usegz開關開啟,且傳輸數據大於此閾值時,才會進行gzip壓縮。只有compressMotan的codec才能支持
codec String motan 協議編碼

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<motan:referer/>和<motan:basicReferer/>

protocol、basic referer、extConfig、referer中定義相同屬性時,優先順序為referer > extConfig > basic referer > protocol

 

<motan:referer/>

調用方對象,motan:referer包含以下常用屬性:

  • id:標識配置項
  • group:標識服務的分組
  • module:標識模塊信息
  • protocol:標識referer使用的協議,與motan:protocol中的name對應,預設為Motan協議
  • registry:標識referer使用的註冊中心,與motan:registry中的name對應
  • basicReferer:標識使用的基本配置,引用motan:basicReferer對象

Client端訂閱Service後,會從Registry中得到能夠提供對應Service的一組Server,Client把這一組Server看作一個提供服務的cluster。當cluster中的Server發生變更時,Client端的register模塊會通知Client進行更新。

<motan:basicReferer/>

調用方基礎配置。用於配置所有服務代理的公共屬性。

  • id:標識配置項
  • group:標識服務的分組
  • module:標識模塊信息
  • protocol:標識referer使用的協議,與motan:protocol中的name對應,預設為Motan協議
  • registry:標識referer使用的註冊中心,與motan:registry中的name對應

motan:referer可以通過以下方式引用基本配置。

<!-- 通用referer基礎配置 -->
<motan:basicReferer id="clientBasicConfig" group="motan-demo-rpc" module="motan-demo-rpc"  registry="registry" protocol="motan"/>

<!-- 具體referer配置。使用方通過beanid使用服務介面類 -->
<motan:referer id="demoReferer" interface="com.weibo.motan.demo.service.MotanDemoService"  basicReferer="clientBasicConfig"/>

 

motan:referer中的basicService屬性用來標識引用哪個motan:basicReferer對象,對於basicReferer中已定義的內容,service不必重覆配置。

下表是referer的所有屬性說明:

 

Property nameTypeDefaultComment
id String   服務引用 BeanId
protocol String motan 使用的協議
interface Class   服務介面名
client String   客戶端類型
directUrl String   點對點直連服務提供地址
basicReferer String   基本 referer 配置
extConfig String   擴展配置
proxy String   代理類型
group String default_rpc 服務分組
version String 1.0 版本
throwException String true 拋出異常
requestTimeout String 200 請求超時時間(毫秒)
connectTimeout String 1000 連接超時時間(毫秒)
retries int 0 重試次數
filter String   過濾器配置
listener String   監聽器配置
connections int   連接數限制,0表示共用連接,否則為該服務獨享連接數;預設共用
application String motan 應用信息
module String motan 模塊信息
shareChannel boolean false 是否共用channel
timeout int   (目前未用)方法調用超時時間
actives int 0 最大請求數,0為不做併發限制
async boolean false 方法是否非同步
mock String false 設為true,表示使用預設Mock類名,即:介面名+Mock 尾碼,服務介面調用失敗Mock實現類
check boolean true 檢查服務提供者是否存在
registry String   註冊中心的id 列表,多個用“,”分隔,如果為空,則使用所有的配置中心
register boolean true 在該註冊中心上服務是否暴露
subscribe boolean true 在該註冊中心上服務是否引用
accessLog String false 設為true,將向logger 中輸出訪問日誌
usegz boolean false 是否開啟gzip壓縮.只有compressMotan的codec才能支持
mingzSize int 1000 開啟gzip壓縮的閾值.usegz開關開啟,且傳輸數據大於此閾值時,才會進行gzip壓縮。只有compressMotan的codec才能支持
codec String motan 協議編碼

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 為什麼監控 用(上)戶(帝)說,這個頁面怎麼這麼慢,還有沒有人管了?! 簡單而言,有三點原因: 關註性能是工程師的本性 + 本分; 頁面性能對用戶體驗而言十分關鍵。每次重構對頁面性能的提升,僅靠工程師開發設備的測試數據是沒有說服力的,需要有大量的真實數據用於驗證; 資源掛了、載入出現異常,不能總靠用 ...
  • 表格展示神器之一:layui表格 前言:在寫後臺管理系統中使用最多的就是表格數據展示了,使用表格組件能提高大量的開發效率,目前主流的數據表格組件有bootstrap table、layui table、easyUI table等.... 博主個人比較傾向於layui,layui極簡,卻又不失飽滿的內 ...
  • 添加padding-right:1em; ...
  • jQuery.parents("選擇器") ...
  • <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>JS2</title> <style type="text/css"> #d1{ height: 100px; width: 100px; background-color: red; ...
  • 1.簡單工廠模式:代替new產生對象,產品的類型比較少時。 我們要獲得三種不同的資料庫對象,如Mysql,SQLserver,Oracle,它們擁有共同的特征,即可以進行抽象,簡單工廠目的是將獲得具體資料庫實體的任務交給工廠類。 介面DataBase: 類Mysql: 類Oracle: 類SQLse ...
  • 很多企業目前更新系統都是需要運維同事手動更新,不管是測試環境,沙箱環境,還是生產環境。導致效率低下,出錯率高。同時環境更新後還需要告知相關同事,這增加了運維同事的工作量。本文介紹的內控平臺完全解決了上述問題。 ...
  • 歡迎大家前往 "騰訊雲+社區" ,獲取更多騰訊海量技術實踐乾貨哦~ 本文由 "騰訊視頻雲終端團隊 " 發表於 "雲+社區專欄" 轉載,本文作者,rexchang(常青),騰訊視頻雲終端技術總監,2008 年畢業加入騰訊,一直從事客戶端研發相關工作,先後參與過 PC QQ、手機QQ、QQ物聯 等產品項 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...