如何使用Azure Java SDK发送和接收消息

时间:2019-03-04 13:38:34

标签: java azure azure-iot-edge azure-sdk

我正在使用Azure Java SDK学习开发Java IoT Edge模块。我正在关注本教程https://docs.microsoft.com/en-us/azure/iot-edge/tutorial-java-module

所以他们解释了如何通过回调来发送消息和接收消息,就像这里:

// Send message:
client.sendEventAsync(msg, eventCallback, msg, App.OUTPUT_NAME);

// Receive message:
private static MessageCallbackMqtt msgCallback = new MessageCallbackMqtt();

client.setMessageCallback(App.INPUT_NAME, msgCallback, client);

protected static class MessageCallbackMqtt implements MessageCallback {
    private int counter = 0;

    @Override
    public IotHubMessageResult execute(Message msg, Object context) {
            System.out.println(String.format("Received message %d: %s", this.counter, new String(msg.getBytes(), Message.DEFAULT_IOTHUB_MESSAGE_CHARSET))); 
    }
}

如您所见,已发送和已接收消息的类型为Message

例如,如何发送Integer?我看到我可以使用

将其转换为String
String msgString = new String(msg.getBytes(), Message.DEFAULT_IOTHUB_MESSAGE_CHARSET);

但是Integer呢?

此外,在sendEventAsync方法中,第三个参数msg是什么?他们在documentation中说它是Object callbackContext,但我不明白它是什么,为什么我们将msg用作此参数。

谢谢您的回答

1 个答案:

答案 0 :(得分:2)

将整数发送为二进制消息非常简单:

(FUNC1(PROP1) OP FUNC2(PROP2) and FUNC1(PROP1) OP FUNC2(PROP2)) or (FUNC1(PROP1) OP FUNC2(PROP2))

sendEventAsync方法中的第三个参数是第二个参数中具有以下方法签名的回调方法的上下文对象

Message msg = new Message(ByteBuffer.allocate(4).putInt(1695609641).array());

因此,在第三个参数中传递消息使您可以通过回调方法访问消息