-
Notifications
You must be signed in to change notification settings - Fork 469
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
ac9e3fc
commit f7b8308
Showing
8 changed files
with
93 additions
and
97 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,64 +1,68 @@ | ||
package qpslimiter | ||
|
||
import ( | ||
"github.com/go-chassis/go-chassis/core/common" | ||
"strings" | ||
|
||
"github.com/go-chassis/go-chassis/core/invocation" | ||
) | ||
|
||
// OperationMeta operation meta struct | ||
type OperationMeta struct { | ||
// ConsumerKeys contain consumer keys | ||
type ConsumerKeys struct { | ||
MicroServiceName string | ||
SchemaQualifiedName string | ||
OperationQualifiedName string | ||
} | ||
|
||
// GetSpecificKey get specific key | ||
func GetSpecificKey(sourceName, serviceType, serviceName, schemaID, OperationID string) string { | ||
var cmd = "cse.flowcontrol" | ||
// ProviderKeys contain provider keys | ||
type ProviderKeys struct { | ||
Global string | ||
ServiceOriented string | ||
} | ||
|
||
//Prefix is const | ||
const Prefix = "cse.flowcontrol" | ||
|
||
// GetConsumerKey get specific key for consumer | ||
func GetConsumerKey(sourceName, serviceName, schemaID, OperationID string) *ConsumerKeys { | ||
keys := new(ConsumerKeys) | ||
//for mesher to govern | ||
if sourceName != "" { | ||
cmd = strings.Join([]string{cmd, sourceName, serviceType, "qps.limit"}, ".") | ||
keys.MicroServiceName = strings.Join([]string{Prefix, sourceName, common.Consumer, "qps.limit", serviceName}, ".") | ||
} else { | ||
cmd = strings.Join([]string{cmd, serviceType, "qps.limit"}, ".") | ||
} | ||
if serviceName != "" { | ||
cmd = strings.Join([]string{cmd, serviceName}, ".") | ||
if serviceName != "" { | ||
keys.MicroServiceName = strings.Join([]string{Prefix, common.Consumer, "qps.limit", serviceName}, ".") | ||
} | ||
} | ||
if schemaID != "" { | ||
cmd = strings.Join([]string{cmd, schemaID}, ".") | ||
keys.SchemaQualifiedName = strings.Join([]string{keys.MicroServiceName, schemaID}, ".") | ||
} | ||
if OperationID != "" { | ||
cmd = strings.Join([]string{cmd, OperationID}, ".") | ||
keys.OperationQualifiedName = strings.Join([]string{keys.SchemaQualifiedName, OperationID}, ".") | ||
} | ||
return cmd | ||
|
||
return keys | ||
} | ||
|
||
// InitSchemaOperations initialize schema operations | ||
func InitSchemaOperations(i *invocation.Invocation) *OperationMeta { | ||
opMeta := new(OperationMeta) | ||
|
||
opMeta.MicroServiceName = GetSpecificKey(i.SourceMicroService, "Consumer", i.MicroServiceName, "", "") | ||
opMeta.SchemaQualifiedName = GetSpecificKey(i.SourceMicroService, "Consumer", i.MicroServiceName, i.SchemaID, "") | ||
opMeta.OperationQualifiedName = GetSpecificKey(i.SourceMicroService, "Consumer", i.MicroServiceName, i.SchemaID, i.OperationID) | ||
// GetProviderKey get specific key for provider | ||
func GetProviderKey(sourceServiceName string) *ProviderKeys { | ||
keys := &ProviderKeys{} | ||
if sourceServiceName != "" { | ||
keys.ServiceOriented = strings.Join([]string{Prefix, common.Provider, "qps.limit", sourceServiceName}, ".") | ||
} | ||
|
||
//for mesher server side rate limit | ||
//as a proxy,mesher handler request from instances that belong to different ms | ||
return opMeta | ||
keys.Global = strings.Join([]string{Prefix, common.Provider, "qps.global.limit"}, ".") | ||
return keys | ||
} | ||
|
||
// GetSchemaQualifiedName get schema qualified name | ||
func (op *OperationMeta) GetSchemaQualifiedName() string { | ||
func (op *ConsumerKeys) GetSchemaQualifiedName() string { | ||
return op.SchemaQualifiedName | ||
} | ||
|
||
// GetMicroServiceSchemaOpQualifiedName get micro-service schema operation qualified name | ||
func (op *OperationMeta) GetMicroServiceSchemaOpQualifiedName() string { | ||
func (op *ConsumerKeys) GetMicroServiceSchemaOpQualifiedName() string { | ||
return op.OperationQualifiedName | ||
} | ||
|
||
// GetMicroServiceName get micro-service name | ||
func (op *OperationMeta) GetMicroServiceName() string { | ||
func (op *ConsumerKeys) GetMicroServiceName() string { | ||
return op.MicroServiceName | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters