@@ -12,16 +12,19 @@ namespace Camunda.Worker.Execution
12
12
public sealed class ExternalTaskSelector : IExternalTaskSelector
13
13
{
14
14
private readonly IExternalTaskClient _client ;
15
+ private readonly ITopicsProvider _topicsProvider ;
15
16
private readonly CamundaWorkerOptions _options ;
16
17
private readonly ILogger < ExternalTaskSelector > _logger ;
17
18
18
19
public ExternalTaskSelector (
19
20
IExternalTaskClient client ,
21
+ ITopicsProvider topicsProvider ,
20
22
IOptions < CamundaWorkerOptions > options ,
21
23
ILogger < ExternalTaskSelector > ? logger = null
22
24
)
23
25
{
24
26
_client = Guard . NotNull ( client , nameof ( client ) ) ;
27
+ _topicsProvider = Guard . NotNull ( topicsProvider , nameof ( topicsProvider ) ) ;
25
28
_options = Guard . NotNull ( options , nameof ( options ) ) . Value ;
26
29
_logger = logger ?? NullLogger < ExternalTaskSelector > . Instance ;
27
30
}
@@ -30,25 +33,34 @@ public async Task<IReadOnlyCollection<ExternalTask>> SelectAsync(
30
33
IReadOnlyCollection < FetchAndLockRequest . Topic > topics ,
31
34
CancellationToken cancellationToken = default
32
35
)
36
+ {
37
+ return await SelectAsync ( cancellationToken ) ;
38
+ }
39
+
40
+ public async Task < IReadOnlyCollection < ExternalTask > > SelectAsync (
41
+ CancellationToken cancellationToken = default
42
+ )
33
43
{
34
44
try
35
45
{
36
46
_logger . LogDebug ( "Waiting for external task" ) ;
37
- var fetchAndLockRequest = MakeRequestBody ( topics ) ;
47
+ var fetchAndLockRequest = MakeRequestBody ( ) ;
38
48
var externalTasks = await PerformSelection ( fetchAndLockRequest , cancellationToken ) ;
39
49
_logger . LogDebug ( "Locked {Count} external tasks" , externalTasks . Count ) ;
40
50
return externalTasks ;
41
51
}
42
52
catch ( Exception e ) when ( ! cancellationToken . IsCancellationRequested )
43
53
{
44
- _logger . LogWarning ( e , "Failed receiving of external tasks. Reason: \" {Reason}\" " , e . Message ) ;
54
+ _logger . LogWarning ( e , "Failed receiving of external tasks. Reason: \" {Reason}\" " , e . Message ) ;
45
55
await DelayOnFailure ( cancellationToken ) ;
46
56
return Array . Empty < ExternalTask > ( ) ;
47
57
}
48
58
}
49
59
50
- private FetchAndLockRequest MakeRequestBody ( IReadOnlyCollection < FetchAndLockRequest . Topic > topics )
60
+ private FetchAndLockRequest MakeRequestBody ( )
51
61
{
62
+ var topics = _topicsProvider . GetTopics ( ) ;
63
+
52
64
var fetchAndLockRequest = new FetchAndLockRequest ( _options . WorkerId )
53
65
{
54
66
UsePriority = true ,
0 commit comments