43 lines
1.4 KiB
Go
43 lines
1.4 KiB
Go
/*
|
|
Copyright 2021 The Dapr 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 pubsub
|
|
|
|
import "fmt"
|
|
|
|
// ConcurrencyMode is a pub/sub metadata setting that allows to specify whether messages are delivered in a serial or parallel execution.
|
|
type ConcurrencyMode string
|
|
|
|
const (
|
|
// ConcurrencyKey is the metadata key name for ConcurrencyMode.
|
|
ConcurrencyKey = "concurrencyMode"
|
|
Single ConcurrencyMode = "single"
|
|
Parallel ConcurrencyMode = "parallel"
|
|
)
|
|
|
|
// Concurrency takes a metadata object and returns the ConcurrencyMode configured. Default is Parallel.
|
|
func Concurrency(metadata map[string]string) (ConcurrencyMode, error) {
|
|
if val, ok := metadata[ConcurrencyKey]; ok && val != "" {
|
|
switch val {
|
|
case string(Single):
|
|
return Single, nil
|
|
case string(Parallel):
|
|
return Parallel, nil
|
|
default:
|
|
return "", fmt.Errorf("invalid %s %s", ConcurrencyKey, val)
|
|
}
|
|
}
|
|
|
|
return Parallel, nil
|
|
}
|