use of com.pamirs.pradar.pressurement.agent.listener.model.ShadowConsumerDisableInfo in project LinkAgent by shulieTech.
the class ShadowConsumerDisableListenerImpl method onEvent.
@Override
public EventResult onEvent(IEvent event) {
// any event flush LAST_MQ_WHITELIST
LastMqWhiteListHolder.LAST_MQ_WHITELIST.set(Collections.<String>emptySet());
try {
if (event instanceof ShadowConsumerDisableEvent) {
ShadowConsumerDisableEvent shadowConsumerDisableEvent = (ShadowConsumerDisableEvent) event;
List<ShadowConsumerDisableInfo> list = shadowConsumerDisableEvent.getTarget();
disableBatch(list);
} else if (event instanceof ClusterTestSwitchOffEvent) {
disableAll();
} else if (event instanceof SilenceSwitchOnEvent) {
disableAll();
}
} catch (Throwable e) {
EventResult.error(event.getTarget(), e.getMessage());
}
return EventResult.success(event.getTarget());
}
use of com.pamirs.pradar.pressurement.agent.listener.model.ShadowConsumerDisableInfo in project LinkAgent by shulieTech.
the class ConsumerRegistry method addListener.
private static void addListener(final DefaultMQPushConsumer businessConsumer) {
final RebalanceImpl rebalance = businessConsumer.getDefaultMQPushConsumerImpl().getRebalanceImpl();
final PradarEventListener listener = new PradarEventListener() {
@Override
public EventResult onEvent(IEvent event) {
if (event instanceof ClusterTestSwitchOnEvent) {
try {
// 取出配置创建影子消费者
DefaultMQPushConsumer defaultMQPushConsumer = buildMQPushConsumer(businessConsumer);
if (defaultMQPushConsumer != null) {
defaultMQPushConsumer.start();
}
} catch (MQClientException e) {
logger.error(e.getMessage());
return EventResult.error("apache-rocketmq-plugin-open", "Apache-RocketMQ PT Consumer start failed: " + e.getMessage());
}
return EventResult.success("apache-rocketmq-plugin-open");
} else if (event instanceof ClusterTestSwitchOffEvent || event instanceof SilenceSwitchOnEvent) {
return shutdownShadowConsumer(businessConsumer);
} else if (event instanceof ShadowConsumerDisableEvent) {
String group = businessConsumer.getConsumerGroup();
Set<String> topics = rebalance.getSubscriptionInner().keySet();
for (String topic : topics) {
List<ShadowConsumerDisableInfo> disableInfos = ((ShadowConsumerDisableEvent) event).getTarget();
for (ShadowConsumerDisableInfo disableInfo : disableInfos) {
if (topic.equals(disableInfo.getTopic()) && group.equals(disableInfo.getConsumerGroup())) {
return shutdownShadowConsumer(businessConsumer);
}
}
}
}
return EventResult.IGNORE;
}
@Override
public int order() {
return 4;
}
};
PradarEventListener old = listeners.putIfAbsent(businessConsumer, listener);
if (old == null) {
EventRouter.router().addListener(listener);
}
}
use of com.pamirs.pradar.pressurement.agent.listener.model.ShadowConsumerDisableInfo in project LinkAgent by shulieTech.
the class MQWhiteList method compareIsChangeAndSet.
@Override
public Boolean compareIsChangeAndSet(ApplicationConfig currentValue, Set<String> newValue) {
final MqWhiteListConfigEvent mqWhiteListConfigEvent = new MqWhiteListConfigEvent(newValue);
EventRouter.router().publish(mqWhiteListConfigEvent);
Set<String> mqWhiteList = GlobalConfig.getInstance().getMqWhiteList();
if (ObjectUtils.equals(mqWhiteList.size(), newValue.size()) && mqWhiteList.containsAll(newValue)) {
return Boolean.FALSE;
}
// 仅对影子消费者禁用事件处理
for (String s : mqWhiteList) {
List<ShadowConsumerDisableInfo> disableInfos = new ArrayList<ShadowConsumerDisableInfo>();
if (!newValue.contains(s)) {
ShadowConsumerDisableInfo disableInfo = new ShadowConsumerDisableInfo();
if (s.contains("@")) {
// rabbitmq routing使用方式,配置为direct-exchange#queue1@queue1
disableInfo.setTopic(s.split("@")[1]);
} else if (s.contains("#")) {
String[] topicGroup = s.split("#", 2);
if (StringUtils.isBlank(topicGroup[0])) {
disableInfo.setTopic(topicGroup[1]);
} else {
disableInfo.setTopic(topicGroup[0]);
disableInfo.setConsumerGroup(topicGroup[1]);
}
}
disableInfos.add(disableInfo);
}
if (!disableInfos.isEmpty()) {
EventRouter.router().publish(new ShadowConsumerDisableEvent(disableInfos));
}
}
currentValue.setMqList(newValue);
PradarSwitcher.turnConfigSwitcherOn(ConfigNames.MQ_WHITE_LIST);
GlobalConfig.getInstance().setMqWhiteList(newValue);
if (LOGGER.isInfoEnabled()) {
LOGGER.info("publish mq whitelist config successful. config={}", newValue);
}
return Boolean.TRUE;
}
use of com.pamirs.pradar.pressurement.agent.listener.model.ShadowConsumerDisableInfo in project LinkAgent by shulieTech.
the class ShadowConsumerDisableListenerImpl method onEvent.
@Override
public EventResult onEvent(IEvent event) {
try {
if (event instanceof ShadowConsumerDisableEvent) {
ShadowConsumerDisableEvent shadowConsumerDisableEvent = (ShadowConsumerDisableEvent) event;
List<ShadowConsumerDisableInfo> list = shadowConsumerDisableEvent.getTarget();
disableBatch(list);
} else if (event instanceof ClusterTestSwitchOffEvent) {
disableAll();
} else if (event instanceof SilenceSwitchOnEvent) {
disableAll();
}
} catch (Throwable e) {
EventResult.error(event.getTarget(), e.getMessage());
}
return EventResult.success(event.getTarget());
}
use of com.pamirs.pradar.pressurement.agent.listener.model.ShadowConsumerDisableInfo in project LinkAgent by shulieTech.
the class ShadowConsumerDisableListenerImpl method disableBatch.
@Override
public boolean disableBatch(List<ShadowConsumerDisableInfo> list) {
boolean result = true;
for (ShadowConsumerDisableInfo shadowConsumerDisableInfo : list) {
String springKey = Pradar.addClusterTestPrefix(shadowConsumerDisableInfo.getTopic()) + "#" + shadowConsumerDisableInfo.getConsumerGroup();
String originKey = shadowConsumerDisableInfo.getTopic() + "#" + shadowConsumerDisableInfo.getConsumerGroup();
if (ShadowConsumerHolder.topicGroupBeanNameMap.containsKey(springKey)) {
disableBatchSpringKafka(springKey);
break;
} else if (ConsumerHolder.getShadowProxyMapping().containsKey(originKey)) {
disableBatchOriginKafka(originKey, shadowConsumerDisableInfo.getTopic(), shadowConsumerDisableInfo.getConsumerGroup());
break;
}
}
return result;
}
Aggregations