/*
* 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.server.pushing;
import net.hasor.core.Inject;
import net.hasor.core.Singleton;
import net.hasor.rsf.InterAddress;
import java.util.Collection;
import java.util.List;
/**
* 推送服务触发器
* @version : 2016年3月1日
* @author 赵永春(zyc@hasor.net)
*/
@Singleton
public class RsfPusher {
@Inject
private PushQueue pushQueue;
//
/** 推送服务路由脚本(服务级) */
public boolean updateServiceRoute(String serviceID, String scriptBody, List<InterAddress> targets) {
RsfCenterEventEnum centerEventEnum = RsfCenterEventEnum.UpdateServiceRouteEvent;
PushEvent eventData = new PushEvent(serviceID, targets, centerEventEnum);
eventData.setEventBody(scriptBody);
return this.pushQueue.doPushEvent(eventData);
}
/** 推送服务路由脚本(方法级) */
public boolean updateMethodRoute(String serviceID, String scriptBody, List<InterAddress> targets) {
RsfCenterEventEnum centerEventEnum = RsfCenterEventEnum.UpdateMethodRouteEvent;
PushEvent eventData = new PushEvent(serviceID, targets, centerEventEnum);
eventData.setEventBody(scriptBody);
return this.pushQueue.doPushEvent(eventData);
}
/** 推送服务路由脚本(参数级) */
public boolean updateArgsRoute(String serviceID, String scriptBody, List<InterAddress> targets) {
RsfCenterEventEnum centerEventEnum = RsfCenterEventEnum.UpdateArgsRouteEvent;
PushEvent eventData = new PushEvent(serviceID, targets, centerEventEnum);
eventData.setEventBody(scriptBody);
return this.pushQueue.doPushEvent(eventData);
}
/** 推送服务流控规则 */
public boolean updateFlowControl(String serviceID, String flowControl, List<InterAddress> targets) {
RsfCenterEventEnum centerEventEnum = RsfCenterEventEnum.UpdateFlowControlEvent;
PushEvent eventData = new PushEvent(serviceID, targets, centerEventEnum);
eventData.setEventBody(flowControl);
return this.pushQueue.doPushEvent(eventData);
}
//
/** 增量推送服务地址 */
public boolean appendAddress(String serviceID, Collection<InterAddress> newHostSet, List<InterAddress> targets) {
if (newHostSet == null || newHostSet.isEmpty()) {
return false;
}
RsfCenterEventEnum centerEventEnum = RsfCenterEventEnum.AppendAddressEvent;
PushEvent eventData = new PushEvent(serviceID, targets, centerEventEnum);
StringBuilder strBuilder = new StringBuilder("");
for (InterAddress addr : newHostSet) {
strBuilder.append(",");
strBuilder.append(addr.toHostSchema());
}
//
eventData.setEventBody(strBuilder.substring(1));
return this.pushQueue.doPushEvent(eventData);
}
/** 全量推送服务地址 */
public boolean refreshAddress(String serviceID, Collection<InterAddress> allHostSet, List<InterAddress> targets) {
if (allHostSet == null || allHostSet.isEmpty()) {
return false;
}
RsfCenterEventEnum centerEventEnum = RsfCenterEventEnum.RefreshAddressEvent;
PushEvent eventData = new PushEvent(serviceID, targets, centerEventEnum);
StringBuilder strBuilder = new StringBuilder("");
for (InterAddress addr : allHostSet) {
strBuilder.append(",");
strBuilder.append(addr.toHostSchema());
}
//
eventData.setEventBody(strBuilder.substring(1));
return this.pushQueue.doPushEvent(eventData);
}
/** 删除服务地址 */
public boolean removeAddress(String serviceID, Collection<InterAddress> invalidAddressSet, List<InterAddress> targets) {
if (invalidAddressSet == null || invalidAddressSet.isEmpty()) {
return false;
}
RsfCenterEventEnum centerEventEnum = RsfCenterEventEnum.RemoveAddressEvent;
PushEvent eventData = new PushEvent(serviceID, targets, centerEventEnum);
StringBuilder strBuilder = new StringBuilder("");
for (InterAddress addr : invalidAddressSet) {
strBuilder.append(",");
strBuilder.append(addr.toHostSchema());
}
//
eventData.setEventBody(strBuilder.substring(1));
return this.pushQueue.doPushEvent(eventData);
}
}