c++ MES 对接之2(MQTT、Restful、RabbitMQ)

这篇具有很好参考价值的文章主要介绍了c++ MES 对接之2(MQTT、Restful、RabbitMQ)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

以下是一个简单的C++程序,演示如何使用MQTT、Restful和RabbitMQ进行MES对接:

//c++
#include <iostream>
#include <string>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <unistd.h>
#include <mosquitto.h>
#include <curl/curl.h>
#include <amqp.h>
#include <amqp_tcp_socket.h>

using namespace std;

// MQTT回调函数
void on_message(struct mosquitto *mosq,

                             void *userdata,

                               const struct mosquitto_message *msg)
 {
    cout << "Received MQTT message: " << (char *)msg->payload << endl;
}

// Restful请求回调函数
size_t restful_callback(char *ptr, size_t size, size_t nmemb, void *userdata) 
{
    cout << "Received RESTful response: " << ptr << endl;
    return size * nmemb;
}

// RabbitMQ错误处理函数
void rabbitmq_error(amqp_rpc_reply_t reply, char const *context) 
{
    if (reply.reply_type == AMQP_RESPONSE_NORMAL) 
   {
        return;
    }

    cout << "RabbitMQ error: " << context << endl;
    exit(1);
}

int main()

{
    // MQTT连接
    mosquitto_lib_init();
    struct mosquitto *mosq = mosquitto_new(NULL, true, NULL);
    mosquitto_connect(mosq, "localhost", 1883, 60);
    mosquitto_subscribe(mosq, NULL, "test", 0);
    mosquitto_message_callback_set(mosq, on_message);
    mosquitto_loop_start(mosq);

    // Restful请求
    CURL *curl = curl_easy_init();
    if (curl) 
   {
        curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:8080/test");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, restful_callback);
        curl_easy_perform(curl);
        curl_easy_cleanup(curl);
    }

    // RabbitMQ连接
    amqp_connection_state_t conn = amqp_new_connection();
    amqp_socket_t *socket = amqp_tcp_socket_new(conn);
    amqp_socket_open(socket, "localhost", 5672);
    amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest");
    amqp_channel_open(conn, 1);
    amqp_rpc_reply_t reply = amqp_get_rpc_reply(conn);
    rabbitmq_error(reply, "Opening channel");

    // RabbitMQ发送消息
    amqp_basic_properties_t props;
    props._flags = AMQP_BASIC_CONTENT_TYPE_FLAG | AMQP_BASIC_DELIVERY_MODE_FLAG;
    props.content_type = amqp_cstring_bytes("text/plain");
    props.delivery_mode = 2;
    amqp_bytes_t message_bytes = amqp_cstring_bytes("Hello, RabbitMQ!");
    amqp_basic_publish(conn, 1, amqp_cstring_bytes(""), amqp_cstring_bytes("test"), 0, 0, &props, message_bytes);
    reply = amqp_get_rpc_reply(conn);
    rabbitmq_error(reply, "Publishing message");

    // RabbitMQ接收消息
    amqp_basic_consume(conn, 1, amqp_cstring_bytes("test"), amqp_empty_bytes, 0, 1, 0, amqp_empty_table);
    reply = amqp_get_rpc_reply(conn);
    rabbitmq_error(reply, "Consuming message");
    amqp_envelope_t envelope;
    amqp_consume_message(conn, &envelope, NULL, 0);
    cout << "Received RabbitMQ message: " << (char *)envelope.message.body.bytes << endl;
    amqp_destroy_envelope(&envelope);

    // 关闭连接
    amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS);
    amqp_connection_close(conn, AMQP_REPLY_SUCCESS);
    amqp_destroy_connection(conn);
    mosquitto_loop_stop(mosq, true);
    mosquitto_disconnect(mosq);
    mosquitto_destroy(mosq);
    mosquitto_lib_cleanup();

    return 0;
}
//

//这个程序使用了Mosquitto库来连接MQTT服务器,使用libcurl库来发送Restful请求,
//使用AMQP-CPP库来连接RabbitMQ服务器。在程序中,我们订阅了MQTT主题“test”,
//并在回调函数中打印收到的消息;发送了一个Restful请求,打印了收到的响应;
//向RabbitMQ发送了一条消息,然后从RabbitMQ接收了一条消息,并打印了它的内容。

//请注意,这个程序只是一个简单的演示,实际应用中需要根据具体情况进行修改和完善。文章来源地址https://www.toymoban.com/news/detail-493047.html

到了这里,关于c++ MES 对接之2(MQTT、Restful、RabbitMQ)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用友U8与MES系统API接口对接案例分析

    领导层对企业资源规划(ERP)的深刻理解促使了数字化转型的启动。 采用精确的“N+5”滚动计划,为供应商提供充分的预期信息,确保准时化生产。 精细管理刀具采购和车间设备,优化生产计划和过程。 通过轻易云数据集成平台实现MES与ERP的无缝对接。 引入无线条码技术,

    2024年02月09日
    浏览(36)
  • PLC通过HTTP协议JSON文件格式对接MES等系统平台

            智能网关IGT-DSER集成了多种PLC、智能仪表的原厂协议,方便实现各种PLC与MES等系统平台之间的HTTP协议通讯,通过网关的参数配置软件绑定JSON文件的字段与PLC寄存器地址,配置URL,即可通过POST/GET命令,将JSON文件提交给HTTP的服务端; 如果服务端有返回的JSON,网关进行

    2024年02月09日
    浏览(46)
  • 35 | RESTful & Socket:行情数据对接和抓取

    上一节,我们介绍了交易所的交易模式,数字货币交易所 RESTful 接口的常见概念,以及如何调用 RESTful 接口进行订单操作。众所周知,买卖操作的前提,是你需要已知市场的最新情况。这节课里,将介绍交易系统底层另一个最重要的部分,行情数据的对接和抓取。 行情数据,

    2024年02月05日
    浏览(37)
  • 工业4.0时代生产系统对接集成优势,MES和ERP专业一体化管理-亿发

    在现代制造业中,市场变化都在不断加速。企业面临着不断加强生产效率、生产质量和快速适应市场需求的挑战。在制造行业,日常管理中的ERP系统、MES系统就显得尤为重要。越来越多的企业正在采用MES系统和ERP管理系统的融合,以实现智能化生产管理。 MES系统的关键作用:

    2024年02月09日
    浏览(59)
  • Android - 对接MQTT

    首先你得知道这是什么吧,稀里糊涂抄一大堆完事就忘了可不行。 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输),MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。 MQTT有 三个角色 : 服务端 客户端(简单理解为手机端) 主题(是接收呢,还是发送)

    2024年02月15日
    浏览(37)
  • Qt + mqtt对接阿里云平台(一)

    官网:点击跳转 根据之前的操作,我们可以下载得到一个压缩包,将其解压,然后修改 mqtt_basic_demo.c 里面的相应代码: 1)修改product_key、device_name、device_secret 2)修改mqtt_host 由于我是21年之前注册的,并且地址为 华东2(上海),所以修改该值为: const char  *mqtt_host = “${

    2024年03月08日
    浏览(41)
  • c++实现RabbitMQ简单的生产者和消费者

    基本思想:利用c++实现RabbitMQ简单的生产者和消费者 CMakeList.txt   producer.cpp 队列中存储5条生产者消息  consumer.cpp

    2024年02月16日
    浏览(45)
  • PLC通过智能网关 MQTT对接阿里云(带CA证书加密),实现物模型数据显示

            IGT-SER系列智能网关支持各种PLC的以太网和串口协议,以及DL/T645、Modbus通讯,通过网关所带的参数配置工具软件,不用编程,即可打包和解析JSON格式的设备数据,通过MQTT、HTTP等协议发布和订阅。         网关安装在设备侧,与设备同时起停,不担心数据丢失;可选

    2023年04月08日
    浏览(48)
  • MQTT的奇妙之旅:探索RabbitMQ Web MQTT插件的威力【RabbitMQ 十一】

    欢迎来到我的博客,代码的世界里,每一行都是一个故事 在网络通信的大舞台上,每一次的消息传递都是一场无声的盛宴。而今,我们将揭开这场盛宴的一部分面纱,进入 RabbitMQ Web MQTT 插件的世界。想象一下,在 Web 端如何借助 MQTT 协议和 WebSockets,实现即时、高效的消息通

    2024年02月03日
    浏览(45)
  • Modbus、PLC、OPC数据采集与MQTT云端转发工具(直接对接Thingsboard开源平台)

    ​ 1. IoT Hub软件功能概览 IoT Hub是一款专门应用Modbus、DLT645、PLC、OPC DA、OPC UA等协议进行工业数据采集与MQTT云端转发的工具软件( 可直接对接开源Thinsboard平台 )。如下图所示: ​ 图 1 软件概览 (1)功能架构 图 2 数据采集转发示意 如上图,IoT Hub内置Modbus-RTU、Modbus-TCP、DLT

    2024年02月04日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包