提交 36a78cc6 编写于 作者: K kimi

DUBBO-122 Provider的线程池监控支持

上级 5e9b9dc3
......@@ -15,6 +15,7 @@
*/
package com.alibaba.dubbo.common;
import java.util.concurrent.ExecutorService;
import java.util.regex.Pattern;
/**
......@@ -569,6 +570,10 @@ public class Constants {
public static final String OUTPUT_KEY = "output";
public static final String EXECUTOR_SERVICE_COMPONENT_KEY = ExecutorService.class.getName();
public static final String DEFAULT_EXECUTOR_SERVICE_KEY = "threadnotsafe";
/*
* private Constants(){ }
*/
......
/*
* Copyright 1999-2011 Alibaba Group.
*
* 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 com.alibaba.dubbo.common.store;
import com.alibaba.dubbo.common.extension.SPI;
/**
* @author <a href="mailto:gang.lvg@alibaba-inc.com">kimi</a>
*/
@SPI("threadnotsafe")
public interface DataStore {
Object get(String componentName, String key);
void put(String componentName, String key, Object value);
void remove(String componentName, String key);
}
/*
* Copyright 1999-2011 Alibaba Group.
*
* 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 com.alibaba.dubbo.common.store.support;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.dubbo.common.store.DataStore;
/**
* @author <a href="mailto:gang.lvg@alibaba-inc.com">kimi</a>
*/
public class ThreadNotSafeDataStore implements DataStore {
// <组件类名或标识, <数据名, 数据值>>
private Map<String, Map<String, Object>> datas =
new HashMap<String, Map<String, Object>>();
@SuppressWarnings("unchecked")
public Object get(String componentName, String key) {
if (!datas.containsKey(componentName)) {
return null;
}
return datas.get(componentName).get(key);
}
public void put(String componentName, String key, Object value) {
Map<String, Object> componentDatas = null;
if (!datas.containsKey(componentName)) {
componentDatas = new HashMap<String, Object>();
} else {
componentDatas = datas.get(componentName);
}
componentDatas.put(key, value);
datas.put(componentName, componentDatas);
}
public void remove(String componentName, String key) {
if (!datas.containsKey(componentName)) {
return;
}
datas.get(componentName).remove(key);
}
}
threadnotsafe=com.alibaba.dubbo.common.store.support.ThreadNotSafeDataStore
\ No newline at end of file
......@@ -18,18 +18,17 @@ package com.alibaba.dubbo.remoting.transport.dispather;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.extension.ExtensionLoader;
import com.alibaba.dubbo.common.logger.Logger;
import com.alibaba.dubbo.common.logger.LoggerFactory;
import com.alibaba.dubbo.common.store.DataStore;
import com.alibaba.dubbo.common.threadpool.ThreadPool;
import com.alibaba.dubbo.common.utils.NamedThreadFactory;
import com.alibaba.dubbo.remoting.Channel;
import com.alibaba.dubbo.remoting.ChannelHandler;
import com.alibaba.dubbo.remoting.RemotingException;
import com.alibaba.dubbo.remoting.exchange.Request;
import com.alibaba.dubbo.remoting.exchange.Response;
import com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler;
import com.alibaba.dubbo.remoting.transport.ChannelHandlerDelegate;
public class WrappedChannelHandler implements ChannelHandlerDelegate {
......@@ -48,6 +47,8 @@ public class WrappedChannelHandler implements ChannelHandlerDelegate {
this.handler = handler;
this.url = url;
executor = (ExecutorService) ExtensionLoader.getExtensionLoader(ThreadPool.class).getAdaptiveExtension().getExecutor(url);
ExtensionLoader.getExtensionLoader(DataStore.class).getDefaultExtension().put(
Constants.EXECUTOR_SERVICE_COMPONENT_KEY, Constants.DEFAULT_EXECUTOR_SERVICE_KEY, executor);
}
public void close() {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册