我编写了一个 IoT Edge C++ 模块,该模块使用以下函数调用发送事件输出:
bool IoTEdgeClient::sendMessageAsync(std::string message)
{
bool retVal = false;
LOGGER_TRACE(IOT_CONNECTION_LOG, className + "::sendMessageAsync(...) START");
LOGGER_DEBUG(IOT_CONNECTION_LOG, className + "::sendMessageAsync(...) message : " << message);
Poco::Mutex::ScopedLock lock(_accessMutex);
MESSAGE_INSTANCE *messageInstance = CreateMessageInstance(message);
IOTHUB_CLIENT_RESULT clientResult = IoTHubModuleClient_LL_SendEventToOutputAsync(_iotHubModuleClientHandle, messageInstance->messageHandle, "output1", SendConfirmationCallback, messageInstance);
if (clientResult != IOTHUB_CLIENT_OK)
{
LOGGER_ERROR(IOT_CONNECTION_LOG, className + "::sendMessageAsync(...) ERROR : " << message << " Message id: " << messageInstance->messageTrackingId);
retVal = false;
}
else
{
retVal = true;
}
LOGGER_TRACE(IOT_CONNECTION_LOG, className + "::sendMessageAsync(...) END");
return retVal;
}
函数调用 IoTHubModuleClient_LL_SendEventToOutputAsync
的结果始终为 IOTHUB_CLIENT_OK
。我的模块名称是MicroServer,配置的路由是:
FROM /messages/modules/MicroServer/outputs/output1 INTO $upstream
我没有看到 SendConfirmationCallback
函数被调用。此外,我没有看到 IoT 中心中出现任何设备到云消息。有什么想法为什么会发生这种情况以及如何解决它吗?
最佳答案
事实证明,我每秒至少需要调用这个函数几次
IoTHubModuleClient_LL_DoWork(_iotHubModuleClientHandle);
我没有这样做。结果,代码无法正常工作。一旦我开始这样做。代码刚刚工作。
关于c++ - Azure IoT Edge C++ 模块未将设备发送到云遥测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72035480/