![[AIX, Linux, Windows]](ngalw.gif)
Como enviar uma mensagem para um cliente MQTT
IBM® MQ aplicativos podem enviar mensagens de clientes MQTT v3 publicando em assinaturas criadas por clientes ou enviando mensagens diretamente. MQTT clientes podem enviar mensagens para um outro publicando em tópicos inscritos por outros clientes.
Um cliente MQTT assina uma publicação, que recebe de IBM MQ
Execute a tarefa Publicar uma mensagem para o utilitário de cliente MQTT do IBM MQ Explorer para enviar uma publicação do IBM MQ para um MQTT cliente.
A maneira padrão para um cliente MQTT v3 receber mensagens é para que ele crie uma assinatura de um tópico, ou conjunto de tópicos. No trecho de código de exemplo, Figura 1, o cliente MQTT assina usando a sequência de tópicos . Um aplicativo IBM MQ C, Figura 2, publica para o tópico usando a sequência de tópicos MQTT Examples
. No snippet de código Figura 3, o cliente MQTT recebe a publicação no método callback, messageArrived.MQTT
Examples
Para obter mais informações sobre como configurar IBM MQ para enviar publicações em resposta a assinaturas de MQTT clientes, consulte Publicando uma mensagem em resposta a uma assinatura de cliente MQTT.
Um aplicativo IBM MQ envia uma mensagem diretamente para um cliente MQTT
Execute a tarefa Enviar uma mensagem para um cliente MQTT usando o IBM MQ Explorer para enviar uma mensagem diretamente do IBM MQ para um MQTT cliente.
Uma mensagem enviada desta forma a um cliente MQTT é chamada de mensagem não solicitada. MQTT v3 recebem mensagens não solicitadas como publicações com um nome de tópico configurado. O serviço de telemetria (MQXR) configura o nome do tópico para o nome da fila remota.
Para obter mais informações sobre como configurar IBM MQ para enviar mensagens diretamente para os clientes MQTT , consulte Sendando uma mensagem para um cliente diretamente.
Um cliente MQTT publica uma mensagem
Um cliente MQTT v3 pode publicar uma mensagem que é recebida por outro cliente MQTT v3 , mas não pode enviar uma mensagem não solicitada. O snippet de código Figura 4 mostra como um cliente MQTT v3 , escrito em Java, publica uma mensagem.
O padrão típico para o envio de uma mensagem para um cliente específico MQTT v3 , é para cada cliente criar uma assinatura para o seu próprio ClientIdentifier. Execute a tarefa Publicar uma mensagem para um cliente MQTT v3 específico para publicar uma mensagem de um cliente MQTT para outro cliente MQTT usando ClientIdentifier como uma cadeia de tópicos.
Fragmentos de Código de Exemplo
O trecho de código na Figura 1 mostra como um cliente MQTT escrito em Java cria uma assinatura. Ele também precisa de um método de retorno de chamada, messageArrived, para receber publicações para a assinatura.
String clientId = String.format("%-23.23s",
System.getProperty("user.name") + "_" +
(UUID.randomUUID().toString())).trim()).replace('-', '_');
MqttClient client = new MqttClient("localhost", clientId);
String topicString = "MQTT Examples";
int QoS = 1;
client.subscribe(topicString, QoS);
O trecho de código na Figura 2 mostra como um aplicativo IBM MQ escrito em C envia uma publicação. O trecho de código é extraído da tarefa, Criar uma editora para um tópico variável
/* Define and set variables to.defaults */
/* Omitted lines declaring variables */
char * topicName = ""
char * topicString = "MQTT Examples"
char * publication = "Hello world!";
do {
MQCONN(qMgrName, &Hconn, &CompCode, &Reason);
if (CompCode != MQCC_OK) break;
td.ObjectType = MQOT_TOPIC; /* Object is a topic */
td.Version = MQOD_VERSION_4; /* Descriptor needs to be V4 */
strncpy(td.ObjectName, topicName, MQ_TOPIC_NAME_LENGTH);
td.ObjectString.VSPtr = topicString;
td.ObjectString.VSLength = (MQLONG)strlen(topicString);
MQOPEN(Hconn, &td, MQOO_OUTPUT | MQOO_FAIL_IF_QUIESCING, &Hobj, &CompCode, &Reason);
if (CompCode != MQCC_OK) break;
pmo.Options = MQPMO_FAIL_IF_QUIESCING | MQPMO_RETAIN;
MQPUT(Hconn, Hobj, &md, &pmo, (MQLONG)strlen(publication)+1, publication, &CompCode, &Reason);
if (CompCode != MQCC_OK) break;
MQCLOSE(Hconn, &Hobj, MQCO_NONE, &CompCode, &Reason);
if (CompCode != MQCC_OK) break;
MQDISC(&Hconn, &CompCode, &Reason);
} while (0);
Quando a publicação chega, o cliente MQTT chama o método messageArrived da classe MQTT do cliente do aplicativo MqttCallback .
public class CallBack implements MqttCallback {
public void messageArrived(MqttTopic topic, MqttMessage message) {
try {
System.out.println("Message arrived: \"" + message.toString()
+ "\" on topic \"" + topic.toString() + "\"");
} catch (Exception e) {
e.printStackTrace();
}
}
// ... Other callback methods
}
Figura 4 mostra um MQTT v3 publicando uma mensagem para a assinatura criada na Figura 1.
String address = "localhost";
String clientId = String.format("%-23.23s",
System.getProperty("user.name") + "_" +
(UUID.randomUUID().toString())).trim()).replace('-', '_');
MqttClient client = new MqttClient(address, clientId);
String topicString = "MQTT Examples";
MqttTopic topic = client.getTopic(Example.topicString);
String publication = "Hello world";
MqttMessage message = new MqttMessage(publication.getBytes());
MqttDeliveryToken token = topic.publish(message);