/* * 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.AppContext; import net.hasor.core.EventListener; import net.hasor.core.context.ContextStartListener; import net.hasor.rsf.RsfBindInfo; import net.hasor.rsf.RsfContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import static net.hasor.rsf.domain.RsfEvent.*; /** * 负责侦听RSF框架发出的事件,并将事件转发到RsfCenter。 * @version : 2016年2月18日 * @author 赵永春(zyc@hasor.net) */ class RsfEventTransport implements EventListener<Object>, ContextStartListener { protected Logger logger = LoggerFactory.getLogger(getClass()); private RegistryClientManager centerManager = null; // @Override public void doStart(AppContext appContext) { // } @Override public void doStartCompleted(AppContext appContext) { // . RsfContext rsfContext = appContext.getInstance(RsfContext.class); this.centerManager = new RegistryClientManager(rsfContext); this.centerManager.run(null); this.logger.info("start the registration service processed."); } @Override public void onEvent(String event, Object eventData) throws Throwable { if (eventData == null || centerManager == null) { return;/* 在没有正式启动之前,所有消息都丢弃。然后在 doStartCompleted 时候统一做一次收集 */ } this.logger.info("rsfEventTransport -> eventType = {}.", event); if (Rsf_Online.equals(event)) { this.centerManager.online(); return; } if (Rsf_Offline.equals(event)) { this.centerManager.offline(); return; } // RsfBindInfo<?> domain = (RsfBindInfo<?>) eventData; try { if (Rsf_ProviderService.equals(event)) { this.centerManager.onlineService(domain); } else if (Rsf_ConsumerService.equals(event)) { this.centerManager.onlineService(domain); } else if (Rsf_DeleteService.equals(event)) { this.centerManager.offlineService(domain); } // this.logger.info("eventType = {} ,serviceID ={} , events have been processed.", event, domain.getBindID()); } catch (Throwable e) { this.logger.error("eventType = {} ,serviceID ={} , process error -> {}", event, domain.getBindID(), e.getMessage(), e); } } }