19
19
import java .util .function .Consumer ;
20
20
import java .util .function .Supplier ;
21
21
22
+ import org .reactivestreams .Publisher ;
22
23
import org .zeromq .SocketType ;
23
24
import org .zeromq .ZContext ;
24
25
import org .zeromq .ZMQ ;
28
29
import org .springframework .boot .autoconfigure .AutoConfiguration ;
29
30
import org .springframework .boot .context .properties .EnableConfigurationProperties ;
30
31
import org .springframework .context .annotation .Bean ;
31
- import org .springframework .integration .channel . FluxMessageChannel ;
32
+ import org .springframework .integration .dsl . IntegrationFlow ;
32
33
import org .springframework .integration .zeromq .inbound .ZeroMqMessageProducer ;
33
34
import org .springframework .messaging .Message ;
34
35
import org .springframework .messaging .support .GenericMessage ;
37
38
* A supplier auto-configuration that receives data from ZeroMQ.
38
39
*
39
40
* @author Daniel Frey
40
- * @since 3.1.0
41
+ * @author Artem Bilan
41
42
*/
42
43
@ AutoConfiguration
43
44
@ EnableConfigurationProperties (ZeroMqSupplierProperties .class )
44
45
public class ZeroMqSupplierConfiguration {
45
46
46
- private FluxMessageChannel output = new FluxMessageChannel ();
47
-
48
47
@ Bean
49
48
public ZContext zContext () {
50
49
return new ZContext ();
51
50
}
52
51
53
52
@ Bean
54
- public ZeroMqMessageProducer adapter (ZeroMqSupplierProperties properties , ZContext zContext ,
53
+ public ZeroMqMessageProducer zeroMqSupplierMessageProducer (ZeroMqSupplierProperties properties , ZContext zContext ,
55
54
@ Autowired (required = false ) Consumer <ZMQ .Socket > socketConfigurer ) {
56
55
57
56
ZeroMqMessageProducer zeroMqMessageProducer = new ZeroMqMessageProducer (zContext , properties .getSocketType ());
@@ -70,15 +69,17 @@ else if (properties.getBindPort() > 0) {
70
69
if (socketConfigurer != null ) {
71
70
zeroMqMessageProducer .setSocketConfigurer (socketConfigurer );
72
71
}
73
- zeroMqMessageProducer .setOutputChannel (this .output );
74
- zeroMqMessageProducer .setAutoStartup (false );
75
-
76
72
return zeroMqMessageProducer ;
77
73
}
78
74
79
75
@ Bean
80
- public Supplier <Flux <Message <?>>> zeromqSupplier (ZeroMqMessageProducer adapter ) {
81
- return () -> Flux .from (this .output ).doOnSubscribe ((subscription ) -> adapter .start ());
76
+ Publisher <Message <Object >> zeroMqSupplierFlow (ZeroMqMessageProducer zeroMqSupplierMessageProducer ) {
77
+ return IntegrationFlow .from (zeroMqSupplierMessageProducer ).toReactivePublisher (true );
78
+ }
79
+
80
+ @ Bean
81
+ public Supplier <Flux <Message <?>>> zeromqSupplier (Publisher <Message <Object >> zeroMqSupplierFlow ) {
82
+ return () -> Flux .from (zeroMqSupplierFlow );
82
83
}
83
84
84
85
}
0 commit comments