Advertisement
Guest User

Untitled

a guest
Dec 5th, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.44 KB | None | 0 0
  1. // BugStatusIsUnknownAfterMaxDeliveryCountExceeded.java
  2.  
  3. import com.microsoft.azure.iot.service.sdk.*;
  4. import java.nio.charset.StandardCharsets;
  5. import java.text.DateFormat;
  6. import java.text.SimpleDateFormat;
  7. import java.time.Instant;
  8. import java.util.Date;
  9. import java.util.UUID;
  10.  
  11. public class BugStatusIsUnknownAfterMaxDeliveryCountExceeded {
  12. static String hub = System.getenv("SDK_HUB_NAME");
  13. static String serviceKey = System.getenv("SDK_SERVICE_KEY");
  14. static String device = System.getenv("SDK_DEVICE_ID");
  15. static String deviceKey = System.getenv("SDK_DEVICE_KEY");
  16.  
  17. static MessageReceiver receiver;
  18.  
  19. public static void main(String[] args) {
  20. String messageId = UUID.randomUUID().toString();
  21.  
  22. try {
  23. startReceiver();
  24. send(messageId);
  25. Thread.sleep(5000);
  26. checkFeedback(messageId);
  27. stopReceiver();
  28. } catch (Exception e) {
  29. log("Sender exception: " + e);
  30. System.exit(-1);
  31. }
  32.  
  33. log("Done");
  34. }
  35.  
  36. static void send(String messageId) throws Exception {
  37. Message msg = new Message("test".getBytes(StandardCharsets.UTF_8));
  38. msg.setTo(device);
  39. msg.setDeliveryAcknowledgement(DeliveryAcknowledgement.Full);
  40. msg.setExpiryTimeUtc(Date.from(Instant.now().plusSeconds(86400)));
  41. msg.setMessageId(messageId);
  42.  
  43. String cs = "HostName=" + hub + ".azure-devices.net;SharedAccessKeyName=service;SharedAccessKey=" + serviceKey;
  44.  
  45. log("Creating sender client");
  46. ServiceClient client = ServiceClient.createFromConnectionString(cs, IotHubServiceClientProtocol.AMQPS);
  47.  
  48. log("Open sender connection");
  49. client.open();
  50.  
  51. log("Sending message, Content: " + new String(msg.getBytes()) + ", ID: " + msg.getMessageId());
  52. client.send(device, msg);
  53. }
  54.  
  55. static void checkFeedback(String messageId) throws Exception {
  56. String cs = "HostName=" + hub + ".azure-devices.net;SharedAccessKeyName=service;SharedAccessKey=" + serviceKey;
  57.  
  58. log("Creating feedback receiver client");
  59. ServiceClient client = ServiceClient.createFromConnectionString(cs, IotHubServiceClientProtocol.AMQPS);
  60. FeedbackReceiver feedbackReceiver = client.getFeedbackReceiver(device);
  61.  
  62. log("Open feedback receiver connection");
  63. feedbackReceiver.open();
  64.  
  65. log("Checking the status of the message...");
  66. boolean found = false;
  67. while (!found) {
  68. log("Retrieving feedback batch...");
  69. FeedbackBatch batch = feedbackReceiver.receive(1000);
  70.  
  71. log("Found feedback batch, size " + batch.getRecords().size());
  72. for (FeedbackRecord record : batch.getRecords()) {
  73. log("Batch record " + record.getOriginalMessageId());
  74. if (record.getOriginalMessageId().equals(messageId)) {
  75. found = true;
  76. log("Message " + messageId + " feedback found: description = " + record.getDescription() + "; status code = " + record.getStatusCode());
  77. }
  78. }
  79. }
  80.  
  81. log("Close feedback receiver connection");
  82. feedbackReceiver.close();
  83. client.close();
  84. }
  85.  
  86. static void startReceiver() {
  87. receiver = new MessageReceiver(hub, device, deviceKey);
  88. receiver.start();
  89. }
  90.  
  91. static void stopReceiver() throws Exception {
  92. receiver.close();
  93. }
  94.  
  95. static void log(String text) {
  96. DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss.SSS");
  97. System.out.println("[" + dateFormat.format(new Date()) + "] " + text);
  98. }
  99. }
  100.  
  101.  
  102. // MessageReceiver.java
  103.  
  104. import com.microsoft.azure.iothub.DeviceClient;
  105. import com.microsoft.azure.iothub.IotHubClientProtocol;
  106. import com.microsoft.azure.iothub.IotHubMessageResult;
  107. import java.text.DateFormat;
  108. import java.text.SimpleDateFormat;
  109. import java.util.Date;
  110.  
  111. public class MessageReceiver extends Thread {
  112. private String hub;
  113. private String device;
  114. private String deviceKey;
  115. private DeviceClient client;
  116.  
  117. public MessageReceiver(String hub, String device, String deviceKey) {
  118. this.hub = hub;
  119. this.device = device;
  120. this.deviceKey = deviceKey;
  121. }
  122.  
  123. public class MessageCallback implements com.microsoft.azure.iothub.MessageCallback {
  124. public IotHubMessageResult execute(com.microsoft.azure.iothub.Message msg, Object hideBug990) {
  125. log("Message received: Content: " + new String(msg.getBytes()) + ", ID: " + msg.getProperty("messageId"));
  126. log("Replying with ABANDON");
  127. return IotHubMessageResult.ABANDON;
  128. }
  129. }
  130.  
  131. public void run() {
  132. try {
  133. String cs = "HostName=" + this.hub + ".azure-devices.net;DeviceId=" + this.device + ";SharedAccessKey=" + this.deviceKey;
  134.  
  135. log("Creating message receiver client");
  136. this.client = new DeviceClient(cs, IotHubClientProtocol.AMQPS);
  137. this.client.setMessageCallback(new MessageCallback(), null);
  138.  
  139. log("Opening message receiver connection");
  140. this.client.open();
  141. } catch (Exception e) {
  142. log("Message receiver exception: " + e);
  143. System.exit(-1);
  144. }
  145. }
  146.  
  147. public void close() throws Exception {
  148. log("Closing message receiver");
  149. this.client.close();
  150. }
  151.  
  152. static void log(String text) {
  153. DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss.SSS");
  154. System.out.println("[" + dateFormat.format(new Date()) + "] " + text);
  155. }
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement