如何在MQTT中实现请求?

如何在MQTT中实现请求?,mqtt,iot,mosquitto,Mqtt,Iot,Mosquitto,IoT服务器仅支持MQTT协议,管理员共享以下代码,以便从服务器获取数据 mosquitto_sub -v -t "app/26" -h broker.example.com -p 1883 -u "dir1-mqtt" -P "5sp-1001-tech 事实上我不知道该怎么处理 我如何才能将该请求发送给目标并以最快的方式获得响应?简单的回答是,您没有。您的MQTT模型是错误的 MQTT不是一个请求/响应模型*例如,与HTTP一样,它是一个发布/订阅(pub/sub)消息传递模型。在发布/

IoT服务器仅支持MQTT协议,管理员共享以下代码,以便从服务器获取数据

mosquitto_sub -v -t "app/26" -h broker.example.com -p 1883  -u "dir1-mqtt" -P "5sp-1001-tech
事实上我不知道该怎么处理


我如何才能将该请求发送给目标并以最快的方式获得响应?

简单的回答是,您没有。您的MQTT模型是错误的

MQTT不是一个请求/响应模型*例如,与HTTP一样,它是一个发布/订阅(pub/sub)消息传递模型。在发布/订阅模型中,数据生产者向主题发布消息,该主题可能有0到N个订阅者,发布者无法知道订阅者的数量(实际上不应该关心)

这意味着您只需订阅提供的主题即可接收数据(在本例中为
app/26
),当有新数据时,它将发送给您的客户

有一些选项可以确保您在订阅时始终获得最后发布的消息。这是通过生成客户端在消息头中设置保留位来完成的,这将导致代理保留此消息,并在所有客户端订阅主题时首先将其传递给所有客户端。在该主题上设置此位的下一条消息将替换上一条消息。但这是由产生数据的客户机控制的,而不是消费者


*您可以使用单独的主题实现请求/响应,MQTT v5有一个额外的头来指定响应主题。但要求生成数据的客户端期望收到关于给定主题的请求,并且能够对提供的主题进行回复。

简而言之,您没有。您的MQTT模型是错误的

MQTT不是一个请求/响应模型*例如,与HTTP一样,它是一个发布/订阅(pub/sub)消息传递模型。在发布/订阅模型中,数据生产者向主题发布消息,该主题可能有0到N个订阅者,发布者无法知道订阅者的数量(实际上不应该关心)

这意味着您只需订阅提供的主题即可接收数据(在本例中为
app/26
),当有新数据时,它将发送给您的客户

有一些选项可以确保您在订阅时始终获得最后发布的消息。这是通过生成客户端在消息头中设置保留位来完成的,这将导致代理保留此消息,并在所有客户端订阅主题时首先将其传递给所有客户端。在该主题上设置此位的下一条消息将替换上一条消息。但这是由产生数据的客户机控制的,而不是消费者


*您可以使用单独的主题实现请求/响应,MQTT v5有一个额外的头来指定响应主题。但要求生成数据的客户端期望收到关于给定主题的请求,并能够回复提供的主题。

根据您的回答,我是消费者,应该订阅新发布的消息。如何订阅已发布的消息?我是否必须始终在线才能收到新消息?事实上,服务器仅保留数据30分钟,数据将被删除或备份到其他服务器上,因此我必须在数据丢失之前获取数据。在正常情况下,您必须始终连接到代理才能接收新消息消息,如果消息只包含最后30分钟的历史记录,那么这就是您将获得的全部信息。可以设置持久订阅,以便代理将脱机客户端的消息排队,并在重新连接时传递它们。但这是一个完全不同的问题。取决于你的回答,我是消费者,应该订阅新发布的消息。如何订阅已发布的消息?我是否必须始终在线才能收到新消息?事实上,服务器仅保留数据30分钟,数据将被删除或备份到其他服务器上,因此我必须在数据丢失之前获取数据。在正常情况下,您必须始终连接到代理才能接收新消息消息,如果消息只包含最后30分钟的历史记录,那么这就是您将获得的全部信息。可以设置持久订阅,以便代理将脱机客户端的消息排队,并在重新连接时传递它们。但这是一个完全不同的问题。