centos

CentOS C++如何配置消息队列

小樊
46
2025-05-17 01:13:37
栏目: 编程语言

在CentOS上配置C++消息队列,你可以选择多种消息队列系统,如RabbitMQ、ZeroMQ、ActiveMQ等。以下是使用RabbitMQ作为消息队列系统的一个基本指南:

安装RabbitMQ服务器

  1. 更新系统包

    sudo yum update -y
    
  2. 安装Erlang(RabbitMQ的依赖)

    sudo yum install -y erlang
    
  3. 添加RabbitMQ仓库

    sudo tee /etc/yum.repos.d/rabbitmq.repo <<EOF
    

[rabbitmq-server] name=RabbitMQ Repository baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearch repo_gpgcheck=1 enabled=1 gpgcheck=1 gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey EOF


4. **安装RabbitMQ服务器**
```bash
sudo yum install -y rabbitmq-server
  1. 启动并启用RabbitMQ服务

    sudo systemctl start rabbitmq-server
    sudo systemctl enable rabbitmq-server
    
  2. 配置RabbitMQ(可选)

    • 启用管理插件以便通过Web界面管理RabbitMQ:
      sudo rabbitmq-plugins enable rabbitmq_management
      
    • 创建用户和设置权限(可选):
      sudo rabbitmqctl add_user your_username your_password
      sudo rabbitmqctl set_permissions -p / your_username ".*" ".*" ".*"
      sudo rabbitmqctl set_user_tags your_username administrator
      

在C++项目中使用RabbitMQ

  1. 安装RabbitMQ C++客户端库 你可以使用rabbitmq-c库,这是一个轻量级的C语言客户端库。

    sudo yum install -y epel-release
    sudo yum install -y rabbitmq-c
    
  2. 编写C++代码 下面是一个简单的示例,展示如何使用rabbitmq-c库发送和接收消息。

    #include <amqp.h>
    #include <amqp_tcp_socket.h>
    #include <iostream>
    #include <string>
    
    void fail_on_error(amqp_rpc_reply_t x, const char *msg) {
        if (x.reply_type == AMQP_RESPONSE_NORMAL) {
            return;
        }
        std::cerr << msg << ": " << amqp_error_string2(x.library_error) << std::endl;
        exit(1);
    }
    
    int main() {
        amqp_connection_state_t conn = amqp_new_connection();
        amqp_socket_t *socket = amqp_tcp_socket_new(conn);
        fail_on_error(amqp_socket_open(socket, "localhost"), "Opening socket");
    
        fail_on_error(amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "your_username", "your_password"), "Logging in");
    
        amqp_channel_open(conn, 1);
        fail_on_error(amqp_get_rpc_reply(conn), "Opening channel");
    
        std::string queue_name = "hello";
        amqp_queue_declare_ok_t *queue_declare_ok = nullptr;
        fail_on_error(amqp_queue_declare(conn, 1, amqp_cstring_bytes(queue_name.c_str()), 0, 1, 0, 0, amqp_empty_table), "Declaring a queue");
    
        queue_declare_ok = amqp_get_rpc_reply(conn);
        if (queue_declare_ok->message.queue == AMQP_NULL_BUFFER) {
            std::cerr << "Could not declare a queue!" << std::endl;
            exit(1);
        }
    
        std::string message = "Hello World!";
        amqp_basic_publish(conn, 1, amqp_cstring_bytes(""), amqp_cstring_bytes(queue_name.c_str()), 0, 0, nullptr, amqp_cstring_bytes(message.c_str()));
    
        amqp_rpc_reply_t reply = amqp_basic_consume(conn, 1, amqp_cstring_bytes(queue_name.c_str()), amqp_cstring_bytes(""), 0, 1, 0, amqp_empty_table);
        fail_on_error(reply, "Registering a consumer");
    
        while (true) {
            amqp_envelope_t envelope;
            amqp_maybe_release_buffers(conn);
            reply = amqp_consume_message(conn, &envelope, nullptr, 0);
            fail_on_error(reply, "Waiting for messages");
    
            std::cout << "Received message: " << std::string((char *)envelope.message.body.bytes, envelope.message.body.len) << std::endl;
    
            amqp_destroy_envelope(&envelope);
            amqp_basic_ack(conn, 1, envelope.delivery_tag, 0);
        }
    
        amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS);
        amqp_connection_close(conn, AMQP_REPLY_SUCCESS);
        amqp_destroy_connection(conn);
    
        return 0;
    }
    
  3. 编译C++代码

    g++ -o rabbitmq_example rabbitmq_example.cpp -lrabbitmq
    
  4. 运行程序

    ./rabbitmq_example
    

这个示例展示了如何连接到RabbitMQ服务器,声明一个队列,发送一条消息,并接收消息。你可以根据需要扩展这个示例,添加更多的功能和错误处理。

0
看了该问题的人还看了