@@ -52,70 +52,70 @@ void afterEach() {
52
52
53
53
@ Test
54
54
void testExecuteOnClass () {
55
- final var executeOnClass = new HelloServiceV1 ();
55
+ final var serviceV1 = new HelloServiceV1 ();
56
56
try (final var microservices =
57
57
Microservices .start (
58
58
new Context ()
59
59
.scheduler (SCHEDULER1_NAME , () -> schedulers .get (SCHEDULER1_NAME ))
60
60
.scheduler (SCHEDULER2_NAME , () -> schedulers .get (SCHEDULER2_NAME ))
61
- .services (executeOnClass ))) {
61
+ .services (serviceV1 ))) {
62
62
63
63
final var api = microservices .call ().api (HelloService .class );
64
64
65
65
api .hello ().block ();
66
- assertEquals (SCHEDULER1_NAME , executeOnClass .threadName .get (), "threadName" );
66
+ assertEquals (SCHEDULER1_NAME , serviceV1 .threadName .get (), "threadName" );
67
67
68
68
api .hola ().block ();
69
- assertEquals (SCHEDULER1_NAME , executeOnClass .threadName .get (), "threadName" );
69
+ assertEquals (SCHEDULER1_NAME , serviceV1 .threadName .get (), "threadName" );
70
70
71
71
api .arigato ().block ();
72
- assertEquals (SCHEDULER1_NAME , executeOnClass .threadName .get (), "threadName" );
72
+ assertEquals (SCHEDULER1_NAME , serviceV1 .threadName .get (), "threadName" );
73
73
}
74
74
}
75
75
76
76
@ Test
77
77
void testExecuteOnMethod () {
78
- final var executeOnClass = new HelloServiceV2 ();
78
+ final var serviceV2 = new HelloServiceV2 ();
79
79
try (final var microservices =
80
80
Microservices .start (
81
81
new Context ()
82
82
.scheduler (SCHEDULER1_NAME , () -> schedulers .get (SCHEDULER1_NAME ))
83
83
.scheduler (SCHEDULER2_NAME , () -> schedulers .get (SCHEDULER2_NAME ))
84
- .services (executeOnClass ))) {
84
+ .services (serviceV2 ))) {
85
85
86
86
final var api = microservices .call ().api (HelloService .class );
87
87
88
88
api .hello ().block ();
89
- assertEquals (SCHEDULER1_NAME , executeOnClass .threadName .get (), "threadName" );
89
+ assertEquals (SCHEDULER1_NAME , serviceV2 .threadName .get (), "threadName" );
90
90
91
91
api .hola ().block ();
92
- assertEquals (SCHEDULER2_NAME , executeOnClass .threadName .get (), "threadName" );
92
+ assertEquals (SCHEDULER2_NAME , serviceV2 .threadName .get (), "threadName" );
93
93
94
94
api .arigato ().block ();
95
- assertEquals ("main" , executeOnClass .threadName .get (), "threadName" );
95
+ assertEquals ("main" , serviceV2 .threadName .get (), "threadName" );
96
96
}
97
97
}
98
98
99
99
@ Test
100
100
void testExecuteOnMixedDefinition () {
101
- final var executeOnClass = new HelloServiceV3 ();
101
+ final var serviceV3 = new HelloServiceV3 ();
102
102
try (final var microservices =
103
103
Microservices .start (
104
104
new Context ()
105
105
.scheduler (SCHEDULER1_NAME , () -> schedulers .get (SCHEDULER1_NAME ))
106
106
.scheduler (SCHEDULER2_NAME , () -> schedulers .get (SCHEDULER2_NAME ))
107
- .services (executeOnClass ))) {
107
+ .services (serviceV3 ))) {
108
108
109
109
final var api = microservices .call ().api (HelloService .class );
110
110
111
111
api .hello ().block ();
112
- assertEquals (SCHEDULER1_NAME , executeOnClass .threadName .get (), "threadName" );
112
+ assertEquals (SCHEDULER1_NAME , serviceV3 .threadName .get (), "threadName" );
113
113
114
114
api .hola ().block ();
115
- assertEquals (SCHEDULER1_NAME , executeOnClass .threadName .get (), "threadName" );
115
+ assertEquals (SCHEDULER1_NAME , serviceV3 .threadName .get (), "threadName" );
116
116
117
117
api .arigato ().block ();
118
- assertEquals (SCHEDULER2_NAME , executeOnClass .threadName .get (), "threadName" );
118
+ assertEquals (SCHEDULER2_NAME , serviceV3 .threadName .get (), "threadName" );
119
119
}
120
120
}
121
121
@@ -153,6 +153,39 @@ void testExecuteOnSchedulerMustBeDisposed() {
153
153
assertTrue (s3 .isDisposed (), "s3.isDisposed" );
154
154
}
155
155
156
+ @ Test
157
+ void testDefaultSchedulersOnMethods () {
158
+ final var service = new DefaultSchedulerOnServiceMethodImpl ();
159
+ try (final var microservices = Microservices .start (new Context ().services (service ))) {
160
+
161
+ final var api = microservices .call ().api (DefaultSchedulerOnServiceMethod .class );
162
+
163
+ api .parallel ().block ();
164
+ assertEquals ("parallel-1" , service .threadName .get (), "threadName" );
165
+
166
+ api .single ().block ();
167
+ assertEquals ("single-1" , service .threadName .get (), "threadName" );
168
+
169
+ api .boundedElastic ().block ();
170
+ assertEquals ("boundedElastic-1" , service .threadName .get (), "threadName" );
171
+
172
+ api .immediate ().block ();
173
+ assertEquals ("main" , service .threadName .get (), "threadName" );
174
+ }
175
+ }
176
+
177
+ @ Test
178
+ void testDefaultSchedulersOnService () {
179
+ final var service = new DefaultSchedulerOnServiceImpl ();
180
+ try (final var microservices = Microservices .start (new Context ().services (service ))) {
181
+
182
+ final var api = microservices .call ().api (DefaultSchedulerOnService .class );
183
+
184
+ api .hello ().block ();
185
+ assertEquals ("single-1" , service .threadName .get (), "threadName" );
186
+ }
187
+ }
188
+
156
189
@ Service ("v1/greeting" )
157
190
public interface HelloService {
158
191
@@ -166,6 +199,29 @@ public interface HelloService {
166
199
Mono <String > arigato ();
167
200
}
168
201
202
+ @ Service ("v1/defaultSchedulerOnServiceMethod" )
203
+ public interface DefaultSchedulerOnServiceMethod {
204
+
205
+ @ ServiceMethod
206
+ Mono <String > parallel ();
207
+
208
+ @ ServiceMethod
209
+ Mono <String > single ();
210
+
211
+ @ ServiceMethod
212
+ Mono <String > boundedElastic ();
213
+
214
+ @ ServiceMethod
215
+ Mono <String > immediate ();
216
+ }
217
+
218
+ @ Service ("v1/defaultSchedulerOnService" )
219
+ public interface DefaultSchedulerOnService {
220
+
221
+ @ ServiceMethod
222
+ Mono <String > hello ();
223
+ }
224
+
169
225
// All methods must be executed in scheduler@1
170
226
@ ExecuteOn (SCHEDULER1_NAME )
171
227
public static class HelloServiceV1 implements HelloService {
@@ -246,7 +302,7 @@ public Mono<String> arigato() {
246
302
}
247
303
}
248
304
249
- // All methods must be executed in scheduler@3@that-was-not-declared
305
+ // This service will not be registered due to scheduler@3@that-was-not-declared
250
306
@ ExecuteOn (SCHEDULER3_NAME )
251
307
public static class HelloServiceV4 implements HelloService {
252
308
@@ -270,4 +326,51 @@ public Mono<String> arigato() {
270
326
return Mono .just ("Arigato | " + System .currentTimeMillis ());
271
327
}
272
328
}
329
+
330
+ // Service that executes method calls in the system default schedulers
331
+ public static class DefaultSchedulerOnServiceMethodImpl
332
+ implements DefaultSchedulerOnServiceMethod {
333
+
334
+ final AtomicReference <String > threadName = new AtomicReference <>();
335
+
336
+ @ ExecuteOn ("parallel" )
337
+ @ Override
338
+ public Mono <String > parallel () {
339
+ threadName .set (Thread .currentThread ().getName ());
340
+ return Mono .just ("parallel | " + System .currentTimeMillis ());
341
+ }
342
+
343
+ @ ExecuteOn ("single" )
344
+ @ Override
345
+ public Mono <String > single () {
346
+ threadName .set (Thread .currentThread ().getName ());
347
+ return Mono .just ("single | " + System .currentTimeMillis ());
348
+ }
349
+
350
+ @ ExecuteOn ("boundedElastic" )
351
+ @ Override
352
+ public Mono <String > boundedElastic () {
353
+ threadName .set (Thread .currentThread ().getName ());
354
+ return Mono .just ("boundedElastic | " + System .currentTimeMillis ());
355
+ }
356
+
357
+ @ ExecuteOn ("immediate" )
358
+ @ Override
359
+ public Mono <String > immediate () {
360
+ threadName .set (Thread .currentThread ().getName ());
361
+ return Mono .just ("immediate | " + System .currentTimeMillis ());
362
+ }
363
+ }
364
+
365
+ @ ExecuteOn ("single" )
366
+ public static class DefaultSchedulerOnServiceImpl implements DefaultSchedulerOnService {
367
+
368
+ final AtomicReference <String > threadName = new AtomicReference <>();
369
+
370
+ @ Override
371
+ public Mono <String > hello () {
372
+ threadName .set (Thread .currentThread ().getName ());
373
+ return Mono .just ("hello | " + System .currentTimeMillis ());
374
+ }
375
+ }
273
376
}
0 commit comments