Sending messages to an MQTT server via gRPC
Written by
Updated at February 27, 2023
You can send messages to an MQTT server on behalf of a device or registry using gRPC
You can similarly send messages to broker clients.
Data structure
To send messages to the MQTT server from your software, set the structure of serialized data.
Data structure for sending messages on behalf of a device
syntax = "proto3";
package yandex.cloud.iot.devices.v1;
import "google/api/annotations.proto";
import "yandex/cloud/validation.proto";
option go_package = "devices";
option java_package = "yandex.cloud.api.iot.devices.v1";
// A set of methods to work with IoT Core messages on behalf of device
service DeviceDataService {
// Publishes message on behalf of specified device
rpc Publish (PublishDeviceDataRequest) returns (PublishDeviceDataResponse) {
option (google.api.http) = { post: "/iot-devices/v1/devices/{device_id}/publish" body: "*" };
}
}
message PublishDeviceDataRequest {
// ID of device publishing message
string device_id = 1 [(required) = true, (length) = "<=50"];
// Topic where message should be published
string topic = 2 [(required) = true, (length) = "<=1024"];
// Content of the message
bytes data = 3 [(length) = "<=262144"];
}
Data structure for sending messages on behalf of a registry
syntax = "proto3";
package yandex.cloud.iot.devices.v1;
import "google/api/annotations.proto";
import "yandex/cloud/validation.proto";
option go_package = "devices";
option java_package = "yandex.cloud.api.iot.devices.v1";
// A set of methods to work with IoT Core messages on behalf of registry
service RegistryDataService {
// Publishes message on behalf of specified registry
rpc Publish (PublishRegistryDataRequest) returns (PublishRegistryDataResponse) {
option (google.api.http) = { post: "/iot-devices/v1/registries/{registry_id}/publish" body: "*" };
}
}
message PublishRegistryDataRequest {
// ID of registry publishing message
string registry_id = 1 [(required) = true, (length) = "<=50"];
// Topic where message should be published
string topic = 2 [(required) = true, (length) = "<=1024"];
// Content of the message
bytes data = 3 [(length) = "<=262144"];
}
message PublishRegistryDataResponse {
}
Data structure for sending messages to broker clients
syntax = "proto3";
package yandex.cloud.iot.broker.v1;
import "google/api/annotations.proto";
import "yandex/cloud/validation.proto";
option go_package = "devices";
option java_package = "yandex.cloud.api.iot.broker.v1";
// A set of methods to work with IoT Core broker messages
service BrokerDataService {
// Publishes message to broker clients
rpc Publish (PublishBrokerDataRequest) returns (PublishBrokerDataResponse) {
option (google.api.http) = { post: "/iot-broker/v1/brokers/{broker_id}/publish" body: "*" };
}
}
message PublishBrokerDataRequest {
// ID of broker to publish message
string broker_id = 1 [(required) = true, (length) = "<=50"];
// Topic where message should be published
string topic = 2 [(required) = true, (length) = "<=1024"];
// Content of the message
bytes data = 3 [(length) = "<=262144"];
}
message PublishBrokerDataResponse {
}
Use case
An example of how to work with the MQTT server using gRPC for JavaScript is given in the code