-
Notifications
You must be signed in to change notification settings - Fork 479
/
concurrency.go
42 lines (36 loc) · 1.39 KB
/
concurrency.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*
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
}