diff --git a/filter/impl/tps_limit_filter.go b/filter/impl/tps_limit_filter.go new file mode 100644 index 0000000000000000000000000000000000000000..6ada1aa61a1de2f14687b5dc478e557f09193879 --- /dev/null +++ b/filter/impl/tps_limit_filter.go @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 impl + +import ( + "github.com/apache/dubbo-go/common/extension" + "github.com/apache/dubbo-go/filter" + "github.com/apache/dubbo-go/protocol" +) + +const ( + TpsLimitFilterKey = "tps" +) + +func init() { + extension.SetFilter(TpsLimitFilterKey, GetAccessLogFilter) +} + +/** + * + */ +type TpsLimitFilter struct { + +} + +func (t TpsLimitFilter) Invoke(invoker protocol.Invoker,invocation protocol.Invocation) protocol.Result { + invoker.GetUrl() + invoker.IsAvailable() + return invoker.Invoke(invocation) +} + +func (t TpsLimitFilter) OnResponse(result protocol.Result, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result { + return result +} + +func GetTpsLimitFilter() filter.Filter { + var tpsLimitFilter = TpsLimitFilter{} + return tpsLimitFilter +} diff --git a/filter/impl/tps_limit_filter_test.go b/filter/impl/tps_limit_filter_test.go new file mode 100644 index 0000000000000000000000000000000000000000..2ac8beceba9a76b27ddef677f63288b709073730 --- /dev/null +++ b/filter/impl/tps_limit_filter_test.go @@ -0,0 +1,18 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 impl diff --git a/filter/impl/tps_limiter.go b/filter/impl/tps_limiter.go new file mode 100644 index 0000000000000000000000000000000000000000..ee24c8c1b28825e6270dc5f5bce043838691af0b --- /dev/null +++ b/filter/impl/tps_limiter.go @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 impl + +import ( + "github.com/apache/dubbo-go/common" + "github.com/apache/dubbo-go/protocol" +) + +type TpsLimiter interface { + IsAllowable(common.URL, protocol.Invocation) +} \ No newline at end of file diff --git a/filter/impl/tps_limiter_fixed_window_impl.go b/filter/impl/tps_limiter_fixed_window_impl.go new file mode 100644 index 0000000000000000000000000000000000000000..6f4a3360f9e23271295d1b4a885b756fe3ded561 --- /dev/null +++ b/filter/impl/tps_limiter_fixed_window_impl.go @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 impl + +import ( + "github.com/apache/dubbo-go/common" + "github.com/apache/dubbo-go/protocol" +) + +type FixedWindowTpsLimiterImpl struct { + +} + +func (limiter FixedWindowTpsLimiterImpl) IsAllowable(common.URL, protocol.Invocation) { + panic("implement me") +} + +func NewInstance() TpsLimiter { + return FixedWindowTpsLimiterImpl{} +}