W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
負(fù)責(zé)服務(wù)的注冊與發(fā)現(xiàn)。
<!-- 定義注冊中心 -->
<dubbo:registry id="xxx1" address="xxx://ip:port" />
<!-- 引用注冊中心,如果沒有配置registry屬性,將在ApplicationContext中自動掃描registry配置 -->
<dubbo:service registry="xxx1" />
<!-- 引用注冊中心缺省值,當(dāng)<dubbo:service>沒有配置registry屬性時,使用此配置 -->
<dubbo:provider registry="xxx1" />
RegistryFactory.java:
public interface RegistryFactory {
/**
* 連接注冊中心.
*
* 連接注冊中心需處理契約:<br>
* 1. 當(dāng)設(shè)置check=false時表示不檢查連接,否則在連接不上時拋出異常。<br>
* 2. 支持URL上的username:password權(quán)限認(rèn)證。<br>
* 3. 支持backup=10.20.153.10備選注冊中心集群地址。<br>
* 4. 支持file=registry.cache本地磁盤文件緩存。<br>
* 5. 支持timeout=1000請求超時設(shè)置。<br>
* 6. 支持session=60000會話超時或過期設(shè)置。<br>
*
* @param url 注冊中心地址,不允許為空
* @return 注冊中心引用,總不返回空
*/
Registry getRegistry(URL url);
}
RegistryService.java:
public interface RegistryService { // Registry extends RegistryService
/**
* 注冊服務(wù).
*
* 注冊需處理契約:<br>
* 1. 當(dāng)URL設(shè)置了check=false時,注冊失敗后不報(bào)錯,在后臺定時重試,否則拋出異常。<br>
* 2. 當(dāng)URL設(shè)置了dynamic=false參數(shù),則需持久存儲,否則,當(dāng)注冊者出現(xiàn)斷電等情況異常退出時,需自動刪除。<br>
* 3. 當(dāng)URL設(shè)置了category=overrides時,表示分類存儲,缺省類別為providers,可按分類部分通知數(shù)據(jù)。<br>
* 4. 當(dāng)注冊中心重啟,網(wǎng)絡(luò)抖動,不能丟失數(shù)據(jù),包括斷線自動刪除數(shù)據(jù)。<br>
* 5. 允許URI相同但參數(shù)不同的URL并存,不能覆蓋。<br>
*
* @param url 注冊信息,不允許為空,如:dubbo://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin
*/
void register(URL url);
/**
* 取消注冊服務(wù).
*
* 取消注冊需處理契約:<br>
* 1. 如果是dynamic=false的持久存儲數(shù)據(jù),找不到注冊數(shù)據(jù),則拋IllegalStateException,否則忽略。<br>
* 2. 按全URL匹配取消注冊。<br>
*
* @param url 注冊信息,不允許為空,如:dubbo://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin
*/
void unregister(URL url);
/**
* 訂閱服務(wù).
*
* 訂閱需處理契約:<br>
* 1. 當(dāng)URL設(shè)置了check=false時,訂閱失敗后不報(bào)錯,在后臺定時重試。<br>
* 2. 當(dāng)URL設(shè)置了category=overrides,只通知指定分類的數(shù)據(jù),多個分類用逗號分隔,并允許星號通配,表示訂閱所有分類數(shù)據(jù)。<br>
* 3. 允許以interface,group,version,classifier作為條件查詢,如:interface=com.alibaba.foo.BarService&version=1.0.0<br>
* 4. 并且查詢條件允許星號通配,訂閱所有接口的所有分組的所有版本,或:interface=*&group=*&version=*&classifier=*<br>
* 5. 當(dāng)注冊中心重啟,網(wǎng)絡(luò)抖動,需自動恢復(fù)訂閱請求。<br>
* 6. 允許URI相同但參數(shù)不同的URL并存,不能覆蓋。<br>
* 7. 必須阻塞訂閱過程,等第一次通知完后再返回。<br>
*
* @param url 訂閱條件,不允許為空,如:consumer://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin
* @param listener 變更事件監(jiān)聽器,不允許為空
*/
void subscribe(URL url, NotifyListener listener);
/**
* 取消訂閱服務(wù).
*
* 取消訂閱需處理契約:<br>
* 1. 如果沒有訂閱,直接忽略。<br>
* 2. 按全URL匹配取消訂閱。<br>
*
* @param url 訂閱條件,不允許為空,如:consumer://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin
* @param listener 變更事件監(jiān)聽器,不允許為空
*/
void unsubscribe(URL url, NotifyListener listener);
/**
* 查詢注冊列表,與訂閱的推模式相對應(yīng),這里為拉模式,只返回一次結(jié)果。
*
* @see org.apache.dubbo.registry.NotifyListener#notify(List)
* @param url 查詢條件,不允許為空,如:consumer://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin
* @return 已注冊信息列表,可能為空,含義同{@link org.apache.dubbo.registry.NotifyListener#notify(List<URL>)}的參數(shù)。
*/
List<URL> lookup(URL url);
}
NotifyListener.java:
public interface NotifyListener {
/**
* 當(dāng)收到服務(wù)變更通知時觸發(fā)。
*
* 通知需處理契約:<br>
* 1. 總是以服務(wù)接口和數(shù)據(jù)類型為維度全量通知,即不會通知一個服務(wù)的同類型的部分?jǐn)?shù)據(jù),用戶不需要對比上一次通知結(jié)果。<br>
* 2. 訂閱時的第一次通知,必須是一個服務(wù)的所有類型數(shù)據(jù)的全量通知。<br>
* 3. 中途變更時,允許不同類型的數(shù)據(jù)分開通知,比如:providers, consumers, routes, overrides,允許只通知其中一種類型,但該類型的數(shù)據(jù)必須是全量的,不是增量的。<br>
* 4. 如果一種類型的數(shù)據(jù)為空,需通知一個empty協(xié)議并帶category參數(shù)的標(biāo)識性URL數(shù)據(jù)。<br>
* 5. 通知者(即注冊中心實(shí)現(xiàn))需保證通知的順序,比如:單線程推送,隊(duì)列串行化,帶版本對比。<br>
*
* @param urls 已注冊信息列表,總不為空,含義同{@link org.apache.dubbo.registry.RegistryService#lookup(URL)}的返回值。
*/
void notify(List<URL> urls);
}
org.apache.dubbo.registry.support.dubbo.DubboRegistryFactory
Maven 項(xiàng)目結(jié)構(gòu):
src
|-main
|-java
|-com
|-xxx
|-XxxRegistryFactoryjava (實(shí)現(xiàn)RegistryFactory接口)
|-XxxRegistry.java (實(shí)現(xiàn)Registry接口)
|-resources
|-META-INF
|-dubbo
|-org.apache.dubbo.registry.RegistryFactory (純文本文件,內(nèi)容為:xxx=com.xxx.XxxRegistryFactory)
XxxRegistryFactory.java:
package com.xxx;
import org.apache.dubbo.registry.RegistryFactory;
import org.apache.dubbo.registry.Registry;
import org.apache.dubbo.common.URL;
public class XxxRegistryFactory implements RegistryFactory {
public Registry getRegistry(URL url) {
return new XxxRegistry(url);
}
}
XxxRegistry.java:
package com.xxx;
import org.apache.dubbo.registry.Registry;
import org.apache.dubbo.registry.NotifyListener;
import org.apache.dubbo.common.URL;
public class XxxRegistry implements Registry {
public void register(URL url) {
// ...
}
public void unregister(URL url) {
// ...
}
public void subscribe(URL url, NotifyListener listener) {
// ...
}
public void unsubscribe(URL url, NotifyListener listener) {
// ...
}
}
META-INF/dubbo/org.apache.dubbo.registry.RegistryFactory:
xxx=com.xxx.XxxRegistryFactory
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: