机缘

作为一名智慧航道系统开发者,同时深耕鸿蒙应用开发领域,敲下一行行代码的日子里,总想着把踩过的坑、磨出的经验留痕,这便是我踏上技术创作之路的初心。实战项目里,鸿蒙分布式能力在智慧航道场景的落地、系统性能优化的关键节点,都藏着不少可复用的思路;日常学习中,鸿蒙新特性、航道系统技术迭代的点滴收获,也需要一个载体梳理沉淀。于是便提笔写文,既是自己的学习笔记,也希望能成为同路人的参考,在技术交流中碰撞出更多火花。

收获

创作路上的收获,藏在每一份正向的反馈里。从第一篇文章的零星阅读,到如今累计数万的阅读量,数百条点赞与评论,陌生读者的一句 “解决了我的开发难题”、同行的深度技术探讨,都让我倍感温暖。更珍贵的是,通过文字结识了一群深耕鸿蒙开发、智慧交通领域的志同道合者,线上交流技术难点,线下探讨行业趋势,原本独行的开发之路,多了许多并肩的伙伴。

日常

如今,技术创作早已融入我的工作与生活,成为不可或缺的一部分。作为职场开发者,日常工作本就围绕代码与项目展开,创作其实是对工作的二次梳理与升华 —— 把项目中的实战经验拆解成易懂的知识点,把技术攻关的过程复盘总结,这个过程不仅能帮助他人,更能让自己对技术的理解更透彻。平衡精力的秘诀,便是 “顺势而为”:将工作中遇到的典型问题、学习中梳理的技术框架,直接作为创作素材,既省去了额外找选题的时间,又能让内容更具实战性;利用碎片时间打磨文字、整理代码示例,让创作与工作相互滋养、共同成长。

成就

于我而言,取得的成就还是很多的,就最近1年来说最有成就感的一段代码,是鸿蒙环境下智慧航道船舶定位实时推送模块的核心实现。该模块基于鸿蒙的分布式数据服务(DDS)和 MQTT 协议,实现了船舶定位数据的实时采集、解析与前端推送,解决了智慧航道系统中多终端数据同步的延迟问题,同时做了轻量化优化,适配了航道现场的边缘设备。核心代码如下:

// 鸿蒙HarmonyOS 4.0+ 船舶定位实时推送核心类
import ohos.data.distributed.common.DistributedDataException;
import ohos.data.distributed.user.SingleKvStore;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

/**
 * 智慧航道船舶定位数据实时处理与推送
 */
public class VesselLocationPushManager implements MqttCallback {
    private static final String MQTT_BROKER = "tcp://xxx.xxx.xxx.xxx:1883"; // 航道边缘MQTT服务器
    private static final String MQTT_TOPIC = "smart/channel/vessel/location";
    private static final String KV_STORE_ID = "vessel_location_kvstore"; // 鸿蒙分布式KV存储
    private final SingleKvStore kvStore;
    private MqttClient mqttClient;

    public VesselLocationPushManager(SingleKvStore kvStore) {
        this.kvStore = kvStore;
        initMqttClient();
    }

    /**
     * 初始化MQTT客户端,适配鸿蒙边缘设备轻量化要求
     */
    private void initMqttClient() {
        try {
            mqttClient = new MqttClient(MQTT_BROKER, MqttClient.generateClientId(), new MemoryPersistence());
            MqttConnectOptions options = new MqttConnectOptions();
            options.setCleanSession(true);
            options.setConnectionTimeout(10);
            options.setKeepAliveInterval(20);
            // 鸿蒙设备断网重连机制
            options.setAutomaticReconnect(true);
            mqttClient.setCallback(this);
            mqttClient.connect(options);
        } catch (MqttException e) {
            e.printStackTrace();
            // 鸿蒙日志系统记录,适配设备日志采集
            HiLog.error(new HiLogLabel(HiLog.LOG_APP, 0x00201, "VesselPush"), "MQTT初始化失败: %{public}s", e.getMessage());
        }
    }

    /**
     * 采集并推送船舶定位数据,结合鸿蒙分布式存储做数据持久化
     * @param vesselId 船舶唯一标识
     * @param location 定位数据(经纬度、航速、航向)
     */
    public void pushVesselLocation(String vesselId, VesselLocation location) {
        if (mqttClient == null || !mqttClient.isConnected()) {
            initMqttClient(); // 重连机制
        }
        try {
            // 1. 鸿蒙分布式KV存储,实现多终端数据同步
            String locationJson = JsonUtil.objectToJson(location);
            kvStore.putString(vesselId, locationJson);
            // 2. MQTT实时推送给前端展示端
            MqttMessage message = new MqttMessage(locationJson.getBytes());
            message.setQos(1); // 至少一次送达,保证航道数据可靠性
            message.setRetained(false);
            mqttClient.publish(MQTT_TOPIC, message);
            HiLog.info(new HiLogLabel(HiLog.LOG_APP, 0x00201, "VesselPush"), "船舶%{public}s定位推送成功", vesselId);
        } catch (DistributedDataException | MqttException e) {
            HiLog.error(new HiLogLabel(HiLog.LOG_APP, 0x00201, "VesselPush"), "船舶%{public}s定位推送失败: %{public}s", vesselId, e.getMessage());
        }
    }

    @Override
    public void connectionLost(Throwable cause) {
        HiLog.warn(new HiLogLabel(HiLog.LOG_APP, 0x00201, "VesselPush"), "MQTT连接断开,即将重连...");
    }

    @Override
    public void messageArrived(String topic, MqttMessage message) {
        // 接收前端指令(如定位刷新频率调整),做后续业务处理
    }

    @Override
    public void deliveryComplete(IMqttDeliveryToken token) {
        // 推送完成回调,可做数据统计
    }

    /**
     * 释放资源,适配鸿蒙应用生命周期
     */
    public void release() {
        if (mqttClient != null && mqttClient.isConnected()) {
            try {
                mqttClient.disconnect();
                mqttClient.close();
            } catch (MqttException e) {
                e.printStackTrace();
            }
        }
    }

    // 船舶定位实体类
    static class VesselLocation {
        private String vesselId;
        private double lng; // 经度
        private double lat; // 纬度
        private float speed; // 航速(节)
        private float course; // 航向(度)
        private long time; // 采集时间戳

        // getter/setter 省略
    }
}

这段代码在实际项目中稳定运行,既发挥了鸿蒙分布式技术的优势,又兼顾了智慧航道场景的实用性,也是我多篇技术文章的核心案例,能把这段代码的设计思路、优化过程分享出来,让更多开发者了解鸿蒙在工业物联网场景的落地方式,是我觉得最有价值的事。

憧憬

关于未来,职业与创作的规划始终围绕鸿蒙开发与智慧航道两大核心展开。职业上,深耕智慧航道系统的鸿蒙化升级,探索鸿蒙分布式软总线、边缘计算在航道智能化中的更多落地场景,打造更贴合行业需求的鸿蒙应用方案;创作上,保持 “实战为先、内容为王” 的原则,一方面持续输出鸿蒙开发的实战教程、性能优化技巧,另一方面深挖智慧交通与鸿蒙结合的行业案例,把更落地的技术干货、更前沿的行业趋势分享给大家。同时,计划整合创作内容,形成鸿蒙 + 智慧航道的系列专栏,让内容更具体系化;也希望能与更多创作者、行业开发者合作,共同打造优质的技术内容,让技术创作的路走得更宽、更远。
技术创作从来不是一蹴而就的事,而是一场与技术同行、与自己对话的长期修行。从最初的随手记录,到如今的用心创作,一路收获的不仅是粉丝与认可,更是自身技术的沉淀与视野的拓宽。未来,仍会以代码为笔,以文字为媒,在鸿蒙开发与智慧航道的领域里,继续分享、继续成长,愿与所有技术创作者一起,以微光聚星河,以点滴汇江海,在技术交流的路上,步履不停,星光不负。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐