在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:mqtt-client开源软件地址:https://gitee.com/iots/mqtt-client开源软件介绍:OverviewMQTT is a machine-to-machine (M2M)/"Internet of Things" connectivityprotocol. It was designed as an extremely lightweight publish/subscribemessaging transport. It is useful for connections with remote locations wherea small code footprint is required and/or network bandwidth is at a premium. mqtt-client provides an ASL 2.0 licensed API to MQTT. It takes care ofautomatically reconnecting to your MQTT server and restoring your clientsession if any network failures occur. Applications can use a blocking APIstyle, a futures based API, or a callback/continuations passing API style. Using from MavenAdd the following to your maven <dependency> <groupId>org.fusesource.mqtt-client</groupId> <artifactId>mqtt-client</artifactId> <version>1.12</version></dependency> Using from GradleAdd the following to your gradle file. compile 'org.fusesource.mqtt-client:mqtt-client:1.12' Using from any Other Build SystemDownload theuber jar fileand add it to your build. The uber contains all the stripped down dependencieswhich the mqtt-client depends on from other projects. Using on Java 1.4We also provide anjava 1.4 uber jar filewhich is compatible with Java 1.4 JVMs. This version of the jardoes not support SSL connections since the SSLEngine class used to implement SSL on NIOwas not introduced until Java 1.5. Configuring the MQTT ConnectionThe blocking, future, and callback APIs all share the same connection setup.You create a new instance of the MQTT mqtt = new MQTT();mqtt.setHost("localhost", 1883);// or mqtt.setHost("tcp://localhost:1883"); Controlling MQTT Options
Controlling Connection ReconnectsConnection will automatically reconnect and re-establish messaging sessionif any network error occurs. You can control how often the reconnectis attempted and define maximum number of attempts of reconnects usingthe following methods:
Configuring Socket OptionsYou can adjust some socket options by using the following methods:
Throttling ConnectionsIf you want slow down the read or write rate of your connections, usethe following methods:
Using SSL connectionsIf you want to connect over SSL/TLS instead of TCP, use an "ssl://" or"tls://" URI prefix instead of "tcp://" for the
The client will use the default JVM SSL connections perform blocking operations against internal thread poolunless you call the Selecting the Dispatch QueueA HawtDispatch dispatch queue is usedto synchronize access to the connection. If an explicit queue is notconfigured via the Using the Blocking APIThe BlockingConnection connection = mqtt.blockingConnection();connection.connect(); Publish messages to a topic using the connection.publish("foo", "Hello".getBytes(), QoS.AT_LEAST_ONCE, false); You can subscribe to multiple topics using the the Topic[] topics = {new Topic("foo", QoS.AT_LEAST_ONCE)};byte[] qoses = connection.subscribe(topics); Then receive and acknowledge consumption of messages using the Message message = connection.receive();System.out.println(message.getTopic());byte[] payload = message.getPayload();// process the message then:message.ack(); Finally to disconnect: connection.disconnect(); Using the Future based APIThe FutureConnection connection = mqtt.futureConnection();Future<Void> f1 = connection.connect();f1.await();Future<byte[]> f2 = connection.subscribe(new Topic[]{new Topic(utf8("foo"), QoS.AT_LEAST_ONCE)});byte[] qoses = f2.await();// We can start future receive..Future<Message> receive = connection.receive();// send the message..Future<Void> f3 = connection.publish("foo", "Hello".getBytes(), QoS.AT_LEAST_ONCE, false);// Then the receive will get the message.Message message = receive.await();message.ack();Future<Void> f4 = connection.disconnect();f4.await(); Using the Callback/Continuation Passing based APIThe Example: final CallbackConnection connection = mqtt.callbackConnection();connection.listener(new Listener() { public void onDisconnected() { } public void onConnected() { } public void onPublish(UTF8Buffer topic, Buffer payload, Runnable ack) { // You can now process a received message from a topic. // Once process execute the ack runnable. ack.run(); } public void onFailure(Throwable value) { connection.close(null); // a connection failure occured. }})connection.connect(new Callback<Void>() { public void onFailure(Throwable value) { result.failure(value); // If we could not connect to the server. } // Once we connect.. public void onSuccess(Void v) { // Subscribe to a topic Topic[] topics = {new Topic("foo", QoS.AT_LEAST_ONCE)}; connection.subscribe(topics, new Callback<byte[]>() { public void onSuccess(byte[] qoses) { // The result of the subcribe request. } public void onFailure(Throwable value) { connection.close(null); // subscribe failed. } }); // Send a message to a topic connection.publish("foo", "Hello".getBytes(), QoS.AT_LEAST_ONCE, false, new Callback<Void>() { public void onSuccess(Void v) { // the pubish operation completed successfully. } public void onFailure(Throwable value) { connection.close(null); // publish failed. } }); // To disconnect.. connection.disconnect(new Callback<Void>() { public void onSuccess(Void v) { // called once the connection is disconnected. } public void onFailure(Throwable value) { // Disconnects never fail. } }); }}); Every connection has a HawtDispatch dispatch queuewhich it uses to process IO events for the socket. The dispatch queue is an Executor thatprovides serial execution of IO and processing events and is used to ensure synchronizedaccess of connection. The callbacks will be executing the dispatch queue associated with the connection soit safe to use the connection from the callback but you MUST NOT perform any blockingoperations within the callback. If you need to perform some processing which MAY block, youmust send it to another thread pool for processing. Furthermore, if another thread needs tointeract with the connection it can only do it by using a Runnable submitted to theconnection's dispatch queue. Example of executing a Runnable on the connection's dispatch queue: connection.getDispatchQueue().execute(new Runnable(){ public void run() { connection.publish( ..... ); }}); |
请发表评论