gps数据对接G7易流平台

之前伙伴对接G7物流平台获取温度、轨迹数据,写的一塌糊涂,今天来重新对接下。

在这里插入图片描述

G7易流

G7物联和易流科技合并后正式发布的品牌,主要面向生产制造与消费物流行业的货主及货运经营者提供软硬一体、全链贯通的SaaS服务。这包括订阅服务(车队管理、安全管理)与交易服务(数字货运、数字能源、智能装备、物联保险),旨在为中小货运经营者提供智能一体化经营平台,同时为大型货主提供行业级解决方案。G7易流的品牌应用范围广泛,包括财运通、智能管车、数字货仓、数字能源、数字保险、端到端可视、运力供应链等。

截至2023年5月,G7易流在物流数字化领域服务的客户覆盖了全国超过80%的上游货主企业和4万多家货运经营者,服务超过10年的客户有821个,超过5年的有10779个。

G7易流还提供开放的物流IoT平台,共建物流数据共享生态系统。平台提供多样化的API和推送服务,致力于为用户带来稳定、安全、易用的体验。此外,G7易流还提供了数字货运服务,通过AIoT技术连接百万车辆,全国覆盖,帮助货主和卡车运力完成智能匹配。

G7易流网络货运平台贯通物流运输全流程,提供运力沉淀、智能接单、在途可视、回单上传、运费秒结、熟车信息全部线上登记等功能。平台操作简单快捷,自动识别出发到达,司机操作简单,无缝连接,无需重复录单,更方便。G7易流还连接油卡、保险、金融,确保业务数据安全。

G7易流总部位于北京,研发中心在成都,在上海、广州分别设有解决方案中心,业务覆盖全国及周边亚洲国家。G7平台上服务客户数量超过7万家,连接车辆总数超过180万辆,客户类型覆盖快递快运、电商、危化品运输、冷链物流、汽车物流、大宗运输、城市配送、货主等物流全领域。G7以智能终端为基础,用数据连接每一辆卡车、货主、运力主和司机,提升运输服务效率。

引入依赖

<!-- mqtt   -->
        <dependency>
            <groupId>org.eclipse.paho</groupId>
            <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
            <version>1.2.0</version>
        </dependency>

在这里插入图片描述

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种基于发布/订阅(publish/subscribe)模式的轻量级通讯协议,由IBM在1999年发布。MQTT的特点包括简单易实现、支持QoS(服务质量)、报文精简以及基于TCP/IP。它适用于机器与机器(M2M)通信和物联网(IoT)场景,尤其是在带宽有限或网络不稳定的环境中表现优异。
MQTT协议的核心特性包括轻量级、低功耗、高可靠性、易于实现和支持多种QoS级别。它的工作原理基于客户端、服务器(Broker)和主题(Topic)的概念。客户端可以发布消息到特定主题,也可以订阅主题以接收消息。服务器负责接收、存储和分发消息,维护客户端的连接状态。

在安全性方面,MQTT支持通过TLS/SSL加密连接,以及使用用户名和密码进行身份验证。此外,Broker可以配置访问控制列表(ACL),以限制客户端对特定主题的访问。

MQTT的应用场景非常广泛,包括物联网(IoT)、实时数据流、远程监控、智能家居、工业自动化、智慧城市、农业物联网(AIoT)、车联网、能源管理、远程医疗、物流追踪和环境监测等。

实现MQTT通常涉及选择Broker、开发客户端应用、连接和通信以及考虑安全性问题。开源的MQTT
Broker如Mosquitto,或云服务提供的Broker如AWS IoT、Azure IoT
Hub等,都是常见的选择。开发者可以使用各种编程语言提供的MQTT库来开发客户端应用。

自己去G7平台的用户信息里面查询吧

g7.mqtt.accessId = 111
# 密码
g7.mqtt.secret = 111
# 主题
g7.mqtt.topic = 111
#  mqtt服务器地址
g7.mqtt.broker = 111
g7.mqtt.clientId = 111
# 设置超时时间 单位为秒
g7.mqtt.timeout=20
# 设置会话心跳时间 单位为秒
g7.mqtt.keepAliveInterval=50

g7,MQTT客户端

/**
 * g7,MQTT客户端
 * 包含固定式冷链数据、便携式冷链数据
 * <p>
 * 开发完提交代码,如果不上生产的话可以注释,防止本地环境启动的时候把服务器上停止
 * <p>
 * author py.sun
 */
@Component
@Slf4j
public class G7ClientMQTTConfig {

    @Value("${g7.mqtt.accessId}")
    private String user;

    @Value("${g7.mqtt.secret}")
    private String passWord;

    @Value("${g7.mqtt.topic}")
    private String topic;

    @Value("${g7.mqtt.broker}")
    public String broker;

    @Value("${g7.mqtt.clientId}")
    private String clientId;

    @Value("${g7.mqtt.timeout}")
    private int timeout;

    @Value("${g7.mqtt.keepAliveInterval}")
    private int keepAliveInterval;

    @Resource
    private G7VehicleDataCallBack g7VehicleDataCallBack;

    //qos为1或2时,mqttClient使用
    MemoryPersistence persistence = new MemoryPersistence();

    //  qos2消耗较大,请使用1或0
    int qos = 1;

    @Bean
    @Async
    public MqttClient mqttClient() throws MqttException {
        // 客户端同步请求
        MqttClient client = new MqttClient(broker, clientId, persistence);
        try {
            //创建连接
            MqttConnectOptions connOpts = new MqttConnectOptions();
            connOpts.setUserName(user);
            connOpts.setPassword(passWord.toCharArray());
            //cleanSession为false时,下次以相同clientId登录将可以获取存储的所有消息   如果为true,将获取到retained标记的最后一条消息
            //cleanSession调试测试阶段设置为true,生产设置为false
            connOpts.setCleanSession(false);
            // 设置会话心跳时间 单位为秒    服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制
            connOpts.setKeepAliveInterval(keepAliveInterval);
            // 设置超时时间 单位为秒
            connOpts.setConnectionTimeout(timeout);
            //  设置自动重连
            connOpts.setAutomaticReconnect(true);
            // 设置回调 获取订阅消息
            client.setCallback(g7VehicleDataCallBack);
            client.connect(connOpts);
            // 订阅topic,可以订阅不同的主题
            client.subscribe(topic, qos);
        } catch (MqttException e) {
            log.error("MQTT连接异常=", e);
        }
        return client;
    }
}

接收G7的回传数据类

@Component
@Slf4j
public class G7VehicleDataCallBack implements MqttCallback {

@Value("${g7.mqtt.broker}")
    public String broker;

    @Value("${g7.mqtt.clientId}")
    public String clientId;

    @Value("${g7.mqtt.topic}")
    public String clientTopic;


/**
     * 连接断开重试
     * param throwable
     */
    @SneakyThrows
    @Override
    @Async
    public void connectionLost(Throwable throwable) {
        log.error("mqtt connectionLost 连接断开,5S之后尝试重连=", throwable);
        try {
            MqttClient client = SpringUtils.getBean("mqttClient");
            if (!client.isConnected()) {
                client.reconnect();
            }
            // 重连之后重新订阅
            client.subscribe(clientTopic, 1);
            TimeUnit.SECONDS.sleep(5);
        } catch (MqttException e) {
            MessageWarningUtils.sendMessage("重新连接mqtt异常=" + e.getMessage(), config.getToken(), config.getSecretKey());
            log.error("重新连接mqtt异常=", e);
        }
    }

/**
     * message的处理请放入其他线程中,在该方法中消耗时间过多将影响qos为1或2的响应,使服务器认为未成功投递消息
     * subscribe后会执行到这里
     *
     * @param topic
     * @param mqttMessage
     */
    @Override
    @LogTraceId
    public void messageArrived(String topic, MqttMessage mqttMessage) {

/**
     * message的处理请放入其他线程中,在该方法中消耗时间过多将影响qos为1或2的响应,使服务器认为未成功投递消息
     * subscribe后会执行到这里
     *
     * @param topic
     * @param mqttMessage
     */
    @Override
    @LogTraceId
    public void messageArrived(String topic, MqttMessage mqttMessage) {
        log.info("温度轨迹数据topic={},原始消息Id={}", topic, mqttMessage.getId());
        try {
            if (mqttMessage.getPayload() != null && mqttMessage.getPayload().length > 0) {
                // 发布消息主题(这个就是你想要的数据,自己去解析吧)
                JSONObject baseRequestVo = JSON.parseObject(new String(mqttMessage.getPayload()));
            }
        } catch (CustomException e2) {
            log.error("推送温度轨迹数据业务异常=", e2);
        }
    }


}

 @Override
    public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
        //publish可以执行到这里
        log.info("==========deliveryComplete={}==========", iMqttDeliveryToken.isComplete());
    }

}

以上就是一些获取G7数据的代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/908955.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【网络】传输层协议TCP(下)

目录 四次挥手状态变化 流量控制 PSH标记位 URG标记位 滑动窗口 快重传 拥塞控制 延迟应答 mtu TCP异常情况 四次挥手状态变化 之前我们讲了四次挥手的具体过程以及为什么要进行四次挥手&#xff0c;下面是四次挥手的状态变化 那么我们下面可以来验证一下CLOSE_WAIT这…

高效新闻管理:SpringBoot框架应用

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理新闻稿件管理系统的相关信息成为必然。开发…

【已解决】C# NPOI如何设置单元格格式

前言 设置单元格格式我们做表格必须要的一步&#xff0c;那么如何对单元格进行设置呢&#xff1f;直接上图看看效果图先&#xff0c;我做的是一个居中然后字体变化的操作&#xff0c;其他的查他的手册即可。 解决方法 直接上代码 IWorkbook excelDoc new XSSFWorkbook();…

通过微调 Embedding 优化 RAG

大型语言模型 (LLM) 向用户和组织展示了巨大的潜力&#xff1b;它们的强大功能和生成能力使它们最近广受欢迎并被广泛接受。LLM 面临的一些缺点是无法以上下文感知的方式生成或响应用户给出的提示&#xff0c;听起来非常通用和开放&#xff0c;或者有时响应的信息已经过时。如果…

微信小程序生成二维码

目前是在开发小程序端 --> 微信小程序。然后接到需求&#xff1a;根据 form 表单填写内容生成二维码&#xff08;第一版&#xff1a;表单目前需要客户进行自己输入&#xff0c;然后点击生成按钮实时生成二维码&#xff0c;不需要向后端请求&#xff0c;不存如数据库&#xf…

用接地气的例子趣谈 WWDC 24 全新的 Swift Testing 入门(二)

概述 从 WWDC 24 开始&#xff0c;苹果推出了全新的测试机制&#xff1a;Swift Testing。利用它我们可以大幅度简化之前“老态龙钟”的 XCTest 编码范式&#xff0c;并且使得单元测试更加灵动自由&#xff0c;更符合 Swift 语言的优雅品味。 在这里我们会和大家一起初涉并领略…

Python的自然语言生成与对话系统介绍

1. 背景介绍 自然语言生成(Natural Language Generation&#xff0c;NLG)和对话系统是人工智能领域的重要研究方向。NLG 涉及将计算机理解的信息转换为自然语言文本&#xff0c;而对话系统则涉及计算机与用户之间的自然语言交互。Python 作为一种易于学习、易于使用的编程语言…

HarmonyOS NEXT 应用开发实战(十、从零设计一款个人中心页面详细示例)

随着HarmonyOS的不断发展&#xff0c;越来越多的开发者开始关注这个平台上的应用开发。本篇文章将详细讲解如何从零开始设计一款个人中心页&#xff0c;并在代码中实现其相关功能。 1. 项目结构设计 首先&#xff0c;我们需要设计一个合理的项目结构。我们将个人中心页面分为几…

Node.js 入门指南:从零开始构建全栈应用

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;node.js篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来node.js篇专栏内容:node.js-入门指南&#xff1a;从零开始构建全栈应用 前言 大家好&#xff0c;我是青山。作…

我们来学mysql -- 连接(原理版)

我们来学mysql -- 连接 题记两张表驱动表 题记 回到初学者的视角&#xff0c;navicat或命令窗口&#xff0c;呈现一行行数据&#xff0c;类比为excel工作薄更是深入人心通过join将多表的记录关联起来&#xff0c;这似乎也没啥问题只是好像是那么回事&#xff0c;又…似乎有想说…

ssm校园二手交易管理系统+vue

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码看文章最下面 需要定制看文章最下面 目 录 1 绪论 1 1.1 选题背景 1 1.2 选题意义 1 1.3 研究内容 2 2 系统开发技术 3 2.1 MySQL数…

2024年前三季度币安、OKX等五大交易所上币表现分析

随着加密市场竞争的加剧&#xff0c;头部交易所逐渐在上币策略、代币选择、交易活跃度等方面采取了不同的应对策略。Animoca Digital Research近期发布的一份报告&#xff0c;通过对币安、OKX、Bitget、KuCoin和Bybit五大交易所2024年前三季度的上币情况进行了详细分析。本文将…

Nature文章《deep learning》文章翻译

这篇文章是对Nature上《deep learning》文章的翻译。原作者 Yann LeCun, Yoshua Bengio& Geoffrey Hinton。 这篇文章的中心思想是深入探讨深度学习在机器学习中的革命性贡献&#xff0c;重点介绍其在特征学习、监督学习、无监督学习等方面的突破&#xff0c;并阐述其在图…

使用 RabbitMQ 有什么好处?

大家好&#xff0c;我是锋哥。今天分享关于【使用 RabbitMQ 有什么好处&#xff1f;】面试题。希望对大家有帮助&#xff1b; 使用 RabbitMQ 有什么好处&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RabbitMQ 是一种流行的开源消息代理&#xff0c;广…

Scrapy链接MongoDB数据库

本文章是在Scrapy入门-CSDN博客的基础上改写的代码。 1.声明采集目标 打开mySpider/mySpider1/items.py文件&#xff0c;修改MyspiderItem类为AIspiderItem&#xff1a; class AIspiderItem(scrapy.Item): title scrapy.Field() url scrapy.Field() date scrapy.Field() 2…

Qt项目实战:红绿灯小程序

目录 一.初始化对象 二.捕获并处理特定的事件 三.自定义绘制方法 四.绘制外部边框 五.绘制内部边框 六.绘制按钮的背景色 七.绘制覆盖层&#xff08;高光效果&#xff09; 八.效果 九.代码 1.h 2.cpp 一.初始化对象 1.设置文本、颜色、边框和背景色等默认值。 2.安…

ReactPress 是什么?

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎Star。 ReactPress 是什么&#xff1f; ReactPress 是使用React开发的开源发布平台&#xff0c;用户可以在支持React和MySQL数据库的服务器上架设属于自己的博客、网站。也可以把 ReactP…

萤石私有化设备视频平台EasyCVR视频融合平台如何构建农业综合监控监管系统?

现代农业的迅速发展中&#xff0c;集成监控管理系统已成为提高农业生产效率和优化管理的关键工具。萤石私有化设备视频平台EasyCVR&#xff0c;作为一个具有高度可扩展性、灵活的视频处理能力和便捷的部署方式的视频监控解决方案&#xff0c;为农业监控系统的建设提供了坚实的技…

PG数据库 jsonb字段 模糊查询

背景&#xff1a; 项目由于多语言的设计&#xff0c;将字段设置成json字段类型&#xff0c;同时存储中文和英文 页面上通过输入框实现模糊的查询 一、表结构&#xff1a;name字段设置jsonb类型 二、表数据 3、Mybatis编写sql select pp.name ->>zh-CN as pmsProductNam…

Chrome 插件怎么安装与下载?超详细

原文链接&#xff1a; https://www.chajianxw.com/tutorial/how-to-install-chrome-plugin.html 前言 国内因为无法访问 Chrome 应用商店的缘故&#xff0c;导致很多优秀的扩展程序无法正常下载与安装。本文将手把手教你如何通过离线安装Chrome 插件&#xff0c;全文图文讲解…