1.使用configClient进行服务注册和订阅
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接口定义了服务注册和订阅方法,MTConfigServerRegistry是对Registry接口的实现,其内部使用了上面configClient相关方法
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 注册服务
可以看一下下面堆栈,当调用ServiceMetadata的export方法时,内部会调用Protocol接口链的export方法,再由RegistryProtocolInterceptor调用MTConfigServerRegistry的register来注册服务
2.2 订阅服务
同理,当调用ServiceMetadata的refer方法时,内部会调用MTConfigServerRegistry的subscribe方法来订阅服务
3. RawAddressListener
public interface RawAddressListener {
void notify(Registry var1, Protocol var2, ServiceMetadata var3, List<String> var4);
}
当订阅服务收到消息时,会调用RawAddressListener的notify方法
网友评论