MQTT长链接的配置类


import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import org.springframework.stereotype.Component;

import java.util.Random;

@Slf4j
@Component
public class MqttPushClient {

    private MqttClient client;

    private static volatile MqttPushClient mqttPushClient = null;

    public static MqttPushClient getInstance() {

        if (null == mqttPushClient) {
            synchronized (MqttPushClient.class) {
                if (null == mqttPushClient) {
                    mqttPushClient = new MqttPushClient();
                }
            }

        }
        return mqttPushClient;

    }

    private MqttPushClient() {
        connect();
    }

    private void connect() {
        try {
            String clientId ="";//这边注意一个mqtt服务 不可有相同的clientId
            client = new MqttClient("tcp://IP:PORT", clientId, new MemoryPersistence());
            MqttConnectOptions options = new MqttConnectOptions();
            options.setCleanSession(false);
            options.setUserName("账号");
            options.setPassword("密码".toCharArray());
            options.setConnectionTimeout(10);
            options.setKeepAliveInterval(20);
            try {
                client.setCallback(new PushCallback());
                client.connect(options);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 发布,默认qos为0,非持久化
     */
    public void publish(String topic, String message1) throws MqttException {
        publish(0, false, topic, message1);
    }

    /**
     * 发布
     */
    public void publish(int qos, boolean retained, String topic, String message1) throws MqttException {
        MqttMessage message = new MqttMessage();
        message.setQos(qos);
        message.setRetained(retained);
        message.setPayload(message1.getBytes());
        MqttTopic mTopic = client.getTopic(topic);
        if (null == mTopic) {
            log.error("topic not exist");
        }
        MqttDeliveryToken token;
        token = mTopic.publish(message);
        token.waitForCompletion();
    }

    /**
     * 订阅某个主题,qos默认为0
     */
    public void subscribe(String topic) {
        subscribe(topic, 0);
    }

    /**
     * 订阅某个主题
     */
    public void subscribe(String topic, int qos) {
        try {
            client.subscribe(topic, qos);
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }


}
@Slf4j
public class PushCallback implements MqttCallback {

    public void connectionLost(Throwable cause) {
        // 连接丢失后,一般在这里面进行重连
        log.info("连接断开,可以做重连");
        MqttPushClient.getInstance();
    }

    public void deliveryComplete(IMqttDeliveryToken token) {
        log.info("消息发送结果 ---------" + token.isComplete());
    }

    public void messageArrived(String topic, MqttMessage message) {
        // subscribe后得到的消息会执行到这里面
        log.info("接收消息主题 : " + topic);
        log.info("接收消息Qos : " + message.getQos());
        log.info("接收消息内容 : " + new String(message.getPayload()));
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 VFP 中创建 MQTT 连接,您需要使用一个 MQTT 客户端库。以下是使用 Eclipse Paho 客户端库创建 MQTT 连接的步骤: 1. 下载并安装 Eclipse Paho VFP 版本的客户端库。您可以从 Eclipse Paho 网站下载 VFP 版本的客户端库。 2. 在 VFP 中创建一个新的表单或。在需要连接 MQTT 的方法中创建一个 MQTT 客户端对象。您可以使用以下代码: ```foxpro LOCAL mqtt_client, mqtt_opts * 创建 MQTT 客户端对象 mqtt_client = CREATEOBJECT("MqttClient") ``` 3. 配置 MQTT 客户端选项。您需要指定 MQTT 代理的 IP 地址和端口号,以及您的 MQTT 订阅和发布的主题。您还需要提供 MQTT 认证凭据(如果需要的话)。您可以使用以下代码: ```foxpro * 配置 MQTT 选项 mqtt_opts = CREATEOBJECT("MqttClientOptions") mqtt_opts.SetBroker("tcp://mqtt.example.com:1883") mqtt_opts.SetUserName("myusername") mqtt_opts.SetPassword("mypassword") ``` 4. 连接 MQTT 代理。如果连接成功,您可以开始订阅和发布 MQTT 消息。您可以使用以下代码: ```foxpro * 连接 MQTT 代理 mqtt_client.Connect(mqtt_opts) ``` 5. 订阅 MQTT 主题。您可以使用以下代码: ```foxpro * 订阅 MQTT 主题 mqtt_client.Subscribe("my/topic") ``` 6. 发布 MQTT 消息。您可以使用以下代码: ```foxpro * 发布 MQTT 消息 mqtt_client.Publish("my/topic", "Hello, MQTT!") ``` 7. 断开 MQTT 连接。您可以使用以下代码: ```foxpro * 断开 MQTT 连接 mqtt_client.Disconnect() ``` 请注意,以上代码仅供参考,具体实现可能会因使用的 MQTT 客户端库而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值