1.使用configClient進(jìn)行服務(wù)注冊和訂閱
1.1 注冊
@Test
public void test1() throws IOException {
PublisherRegistration registration = new PublisherRegistration(
"HSFProvider-com.alibaba.edas.carshop.itemcenter.ItemService:1.0.0",
"com.alibaba.edas.carshop.itemcenter.ItemService:1.0.0", "ecu:10.0.1.44");
registration.setGroup("HSF");
Publisher<String> publisher = PublisherRegistrar.register(registration);
publisher.publish("10.0.1.44:12200?_p=hessian2&APP=unknown&
_ENV=DEFAULT&v=2.0&_TIMEOUT=3000&_ih2=y&mg=testGroup&_SERIALIZETYPE=hessian&_auth=y");
System.in.read();
}
1.2 訂閱
@Test
public void test2() throws IOException {
SubscriberRegistration cs_registration = new SubscriberRegistration(
"HSFSubscriber-com.alibaba.edas.carshop.itemcenter.ItemService:1.0.0",
"com.alibaba.edas.carshop.itemcenter.ItemService:1.0.0", "ecu:10.0.1.44");
cs_registration.setGroup("HSF");
Subscriber subscriber = SubscriberRegistrar.register(cs_registration);
subscriber.setDataObserver(new SubscriberDataObserver() {
public void handleData(String s, List<Object> list) {
}
});
System.in.read();
}
兩者編程模型是比較一致的
2.Registry
hsf中的Registry接口定義了服務(wù)注冊和訂閱方法,MTConfigServerRegistry是對Registry接口的實現(xiàn),其內(nèi)部使用了上面configClient相關(guān)方法
public interface Registry {
void register(ServiceMetadata var1, List<ServiceURL> var2);
void unregister(ServiceMetadata var1);
void subscribe(Protocol var1, ServiceMetadata var2, RawAddressListener var3);
void unsubscribe(Protocol var1, ServiceMetadata var2, RawAddressListener var3);
}
public class MTConfigServerRegistry implements Registry, ApplicationModelAware {
}
2.1 注冊服務(wù)
可以看一下下面堆棧,當(dāng)調(diào)用ServiceMetadata的export方法時,內(nèi)部會調(diào)用Protocol接口鏈的export方法,再由RegistryProtocolInterceptor調(diào)用MTConfigServerRegistry的register來注冊服務(wù)
2.2 訂閱服務(wù)
同理,當(dāng)調(diào)用ServiceMetadata的refer方法時,內(nèi)部會調(diào)用MTConfigServerRegistry的subscribe方法來訂閱服務(wù)
3. RawAddressListener
public interface RawAddressListener {
void notify(Registry var1, Protocol var2, ServiceMetadata var3, List<String> var4);
}
當(dāng)訂閱服務(wù)收到消息時,會調(diào)用RawAddressListener的notify方法