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

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

//c++
#include
#include
#include
#include
#include
#include
#include <mosquitto.h>
#include <curl/curl.h>
#include <amqp.h>
#include

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接收了一条消息,并打印了它的内容。

//请注意,这个程序只是一个简单的演示,实际应用中需要根据具体情况进行修改和完善。

你可能感兴趣的:(c++语言,MES,开发语言,MES)