1 /*
2 * hunt-amqp-client: AMQP Client Library for D Programming Language. Support for RabbitMQ and other AMQP Server.
3 *
4 * Copyright (C) 2018-2019 HuntLabs
5 *
6 * Website: https://www.huntlabs.net
7 *
8 * Licensed under the Apache-2.0 License.
9 *
10 */11 12 modulehunt.amqp.client.AmqpClient;
13 14 importhunt.amqp.client.impl.AmqpClientImpl;
15 importhunt.amqp.client.AmqpClientOptions;
16 importhunt.amqp.client.AmqpSender;
17 importhunt.amqp.Handler;
18 importhunt.amqp.client.AmqpConnection;
19 importhunt.amqp.client.AmqpReceiver;
20 importhunt.amqp.client.AmqpReceiverOptions;
21 importhunt.amqp.client.AmqpSenderOptions;
22 23 importhunt.concurrency.Future;
24 importhunt.Object;
25 // import hunt.Functions;26 27 // alias AmqpHandler = Action1;28 29 30 /**
31 * AMQP Client entry point.
32 * Use this interface to create an instance of {@link AmqpClient} and connect to a broker and server.
33 */34 interfaceAmqpClient {
35 36 /**
37 * Creates a new instance of {@link AmqpClient} using an internal Vert.x instance (with default configuration) and
38 * the given AMQP client configuration. Note that the created Vert.x instance will be closed when the client is
39 * closed.
40 *
41 * @param options the AMQP client options, may be {@code null} falling back to the default configuration
42 * @return the created instances.
43 */44 staticAmqpClientcreate(AmqpClientOptionsoptions) {
45 returnnewAmqpClientImpl(options, true);
46 }
47 48 /**
49 * Creates a new instance of {@link AmqpClient} with the given Vert.x instance and the given options.
50 *
51 * @param vertx the vert.x instance, must not be {@code null}
52 * @param options the AMQP options, may be @{code null} falling back to the default configuration
53 * @return the AMQP client instance
54 */55 //static AmqpClient create(Vertx vertx, AmqpClientOptions options) {56 // return new AmqpClientImpl(Objects.requireNonNull(vertx), options, false);57 //}58 59 /**
60 * Connects to the AMQP broker or router. The location is specified in the {@link AmqpClientOptions} as well as the
61 * potential credential required.
62 *
63 * @param connectionHandler handler that will process the result, giving either the connection or failure cause. Must
64 * not be {@code null}.
65 */66 AmqpClientconnect(AsyncResultHandler!AmqpConnectionconnectionHandler);
67 68 /**
69 * Like {@link #connect(Handler)} but returns a {@code Future} of the asynchronous result
70 */71 Future!AmqpConnectionconnectAsync();
72 73 // ditto74 AmqpConnectionconnect();
75 76 /**
77 * Closes the client.
78 * The client must always be closed once not needed anymore.
79 *
80 * @param closeHandler the close handler notified when the operation completes. It can be {@code null}.
81 */82 voidclose(AsyncResultHandler!VoidcloseHandler);
83 84 /**
85 * Like {@link #close(Handler)} but returns a {@code Future} of the asynchronous result
86 */87 // Future<Void> close();88 89 /**
90 * Creates a receiver used to consume messages from the given address. The receiver has no handler and won't
91 * start receiving messages until a handler is explicitly configured. This method avoids having to connect explicitly.
92 * You can retrieve the connection using {@link AmqpReceiver#connection()}.
93 *
94 * @param address The source address to attach the consumer to, must not be {@code null}
95 * @param completionHandler the handler called with the receiver. The receiver has been opened.
96 * @return the client.
97 */98 AmqpClientcreateReceiver(stringaddress, Handler!AmqpReceivercompletionHandler);
99 100 /**
101 * Like {@link #createReceiver(String, Handler)} but returns a {@code Future} of the asynchronous result
102 */103 // Future<AmqpReceiver> createReceiver(String address);104 105 /**
106 * Creates a receiver used to consumer messages from the given address. This method avoids having to connect
107 * explicitly. You can retrieve the connection using {@link AmqpReceiver#connection()}.
108 *
109 * @param address The source address to attach the consumer to.
110 * @param receiverOptions The options for this receiver.
111 * @param completionHandler The handler called with the receiver, once opened. Note that the {@code messageHandler}
112 * can be called before the {@code completionHandler} if messages are awaiting delivery.
113 * @return the connection.
114 */115 AmqpClientcreateReceiver(stringaddress, AmqpReceiverOptionsreceiverOptions,
116 Handler!AmqpReceivercompletionHandler);
117 118 /**
119 * Like {@link #createReceiver(String, AmqpReceiverOptions, Handler)} but returns a {@code Future} of the asynchronous result
120 */121 // Future<AmqpReceiver> createReceiver(String address, AmqpReceiverOptions receiverOptions);122 123 /**
124 * Creates a sender used to send messages to the given address. The address must be set.
125 *
126 * @param address The target address to attach to, must not be {@code null}
127 * @param completionHandler The handler called with the sender, once opened
128 * @return the client.
129 */130 AmqpClientcreateSender(stringaddress, Handler!AmqpSendercompletionHandler);
131 132 /**
133 * Like {@link #createSender(String, Handler)} but returns a {@code Future} of the asynchronous result
134 */135 //Future<AmqpSender> createSender(String address);136 137 /**
138 * Creates a sender used to send messages to the given address. The address must be set.
139 *
140 * @param address The target address to attach to, must not be {@code null}
141 * @param options The options for this sender.
142 * @param completionHandler The handler called with the sender, once opened
143 * @return the client.
144 */145 AmqpClientcreateSender(stringaddress, AmqpSenderOptionsoptions,
146 Handler!AmqpSendercompletionHandler);
147 148 /**
149 * Like {@link #createSender(String, AmqpSenderOptions, Handler)} but returns a {@code Future} of the asynchronous result
150 */151 //Future<AmqpSender> createSender(String address, AmqpSenderOptions options);152 153 }