/* * Copyright 2008-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.hasor.registry.client; import net.hasor.core.EventContext; import net.hasor.core.Hasor; import net.hasor.core.context.ContextStartListener; import net.hasor.registry.RsfCenterListener; import net.hasor.registry.RsfCenterRegister; import net.hasor.registry.RsfCenterSettings; import net.hasor.rsf.InterAddress; import net.hasor.rsf.RsfApiBinder; import net.hasor.rsf.RsfEnvironment; import net.hasor.rsf.RsfModule; import net.hasor.rsf.domain.RsfEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Client模式 * @version : 2016年2月18日 * @author 赵永春(zyc@hasor.net) */ public class RegistryClientModule extends RsfModule { protected static Logger logger = LoggerFactory.getLogger(RegistryClientModule.class); private RsfCenterSettings centerSettings; // public RegistryClientModule(RsfCenterSettings centerSettings) { this.centerSettings = Hasor.assertIsNotNull(centerSettings); } // @Override public void loadModule(RsfApiBinder apiBinder) throws Throwable { RsfEnvironment environment = apiBinder.getEnvironment(); EventContext eventContext = environment.getEventContext(); // // 1.监听RSF中所有服务的相关的消息 RsfEventTransport transport = new RsfEventTransport(); eventContext.addListener(RsfEvent.Rsf_ProviderService, transport); eventContext.addListener(RsfEvent.Rsf_ConsumerService, transport); eventContext.addListener(RsfEvent.Rsf_DeleteService, transport); eventContext.addListener(RsfEvent.Rsf_Online, transport); eventContext.addListener(RsfEvent.Rsf_Offline, transport); apiBinder.bindType(ContextStartListener.class).toInstance(transport); // // 2.接受来自注册中心的消息 apiBinder.bindType(ContextStartListener.class).toInstance(transport); apiBinder.rsfService(RsfCenterListener.class)//服务类型 .toInfo(apiBinder.bindType(RegistryClientReceiver.class).uniqueName().asEagerSingleton().toInfo())//服务实现 .bindFilter("AuthFilter", RegistryClientVerifyFilter.class)//服务安全过滤器 .asShadow().register(); // // 3.向注册中心上报服务信息的服务 InterAddress[] centerList = this.centerSettings.getCenterServerSet(); StringBuilder strBuilder = buildLog(centerList); logger.info("rsf center-client hostSet = {} -> center enable.", strBuilder.toString()); apiBinder.rsfService(RsfCenterRegister.class)//服务类型 .timeout(this.centerSettings.getCenterRsfTimeout())//服务接口超时时间 .bindFilter("AuthFilter", RegistryClientVerifyFilter.class)//服务安全过滤器 .bindAddress(null, centerList)//静态地址,用不失效 .asShadow().register();//注册服务 logger.info("rsf center-client started."); } // private static StringBuilder buildLog(InterAddress[] centerList) { StringBuilder strBuilder = new StringBuilder(""); for (InterAddress address : centerList) { strBuilder.append(address.getHostPort()); strBuilder.append(" ,"); } if (centerList.length != 0) { strBuilder.deleteCharAt(strBuilder.length() - 1); } return strBuilder; } }