c++实现RabbitMQ简单的生产者和消费者

这篇具有很好参考价值的文章主要介绍了c++实现RabbitMQ简单的生产者和消费者。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基本思想:利用c++实现RabbitMQ简单的生产者和消费者

c++ rabbitmq,c++基础,rabbitmq,c++

CMakeList.txt

cmake_minimum_required(VERSION 3.16)
project(producer)

set(CMAKE_CXX_STANDARD 14)

add_executable(producer main.cpp)

target_link_libraries(producer rabbitmq)

  producer.cpp

#include <iostream>
#include <string>
#include <unistd.h>
#include <amqp.h>
#include <cstring>
#include <amqp_framing.h>
#include <amqp_tcp_socket.h>
using namespace std;

int main() {
    string hostName = "127.0.0.1"; // ip 默认值
    int port = 5672; // 端口号 默认值
    amqp_socket_t *socket = nullptr;
    amqp_connection_state_t conn;

    conn = amqp_new_connection();
    socket = amqp_tcp_socket_new(conn);

    if (!socket) {
        cout << "create socket failed!";
        exit(1);
    }

    if (amqp_socket_open(socket, hostName.c_str(), port)) {
        cout << "opening TCP socket failed" << endl;
        exit(1);
    }

    // 登录  ("/" 虚拟机默认值)
    if(1 != amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest").reply_type) {
        cout << "login failed" << endl;
    }

    // 创建管道(链接)
    amqp_channel_open(conn, 1);

    // 创建队列
    amqp_bytes_t queue;
    char mac[20] = "queue_test";
    queue.bytes = mac;
    queue.len = strlen(mac);
    //声明队列
    amqp_queue_declare_ok_t *declare = amqp_queue_declare(conn, 1, queue, 0, 0, 0, 1, amqp_empty_table);

    int i = 0;
    while (true) {
        string str = "Hello World " + to_string(i);
        char message[64] = {'\0'};
        strcpy(message, str.c_str());
        amqp_bytes_t  message_bytes;
        message_bytes.len = sizeof(message);
        message_bytes.bytes = message;

        // 发送消息
        amqp_basic_publish(conn, 1, amqp_cstring_bytes(""), amqp_cstring_bytes("queue_test"), 0, 0, nullptr, message_bytes);
        cout << "[已发送] " << str << endl;
        i++;
        sleep(1);
        if(i == 5)
            break;
    }
    cout << "send msg over! " << endl;

    // 释放资源
    amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS);
    amqp_connection_close(conn, AMQP_REPLY_SUCCESS);

//    getchar();
    return 0;
}

c++ rabbitmq,c++基础,rabbitmq,c++

队列中存储5条生产者消息

c++ rabbitmq,c++基础,rabbitmq,c++

 consumer.cpp

#include <iostream>
#include <string>
#include <amqp.h>
#include <ctime>
#include <unistd.h>
#include <amqp_framing.h>
#include <amqp_tcp_socket.h>
using namespace std;

void delay_msec(int msec)
{
    clock_t now = clock();
    while(clock() - now < msec);
}

int main() {

    string name = "received";
    string delayStr = "1";
    //cout << "The delayStr is : " << delayStr << endl;
    int delay = std::stoi(delayStr);
    //cout << "The delay is : " << delay << endl;
    //string name = "one";
    //int delay = 1;

    string hostName = "127.0.0.1";
    int port = 5672;
    amqp_socket_t *socket = nullptr;
    amqp_connection_state_t conn;

    conn = amqp_new_connection();
    socket = amqp_tcp_socket_new(conn);

    if(!socket){
        cout << "create socket failed!";
        exit(1);
    }

    if(amqp_socket_open(socket, hostName.c_str(), port)) {
        cout << "opening TCP socket failed" << endl;
        exit(1);
    }

    //登录
    if(1 != amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest").reply_type) {
        cout << "login failed" << endl;
        exit(1);
    }

    amqp_channel_open(conn, 1);

    while (true) {
        amqp_basic_get(conn, 1, amqp_cstring_bytes("queue_test"), 1);
        amqp_message_t *msg = new amqp_message_t;
        amqp_read_message(conn, 1, msg, 0);
        cout << "[" << name << "] The result is : " << (char *)msg->body.bytes << endl;
        amqp_destroy_message(msg);
        delete msg;
        sleep(1);
//        delay_msec(1000 * delay);
    }

    amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS);
    amqp_connection_close(conn, AMQP_REPLY_SUCCESS);
    amqp_destroy_connection(conn);

//    getchar();
    return 0;
}

c++ rabbitmq,c++基础,rabbitmq,c++文章来源地址https://www.toymoban.com/news/detail-570291.html

到了这里,关于c++实现RabbitMQ简单的生产者和消费者的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【Linux | C++ 】生产者消费者模型(Linux系统下C++ 代码模拟实现)

    多线程编程中的同步问题是一个普遍存在的难点,为了解决这些问题,开发者们设计出了各种同步机制,如条件变量、信号量、互斥锁等。生产者消费者模型是一个经典案例, 它涉及到两类线程:生产者和消费者 。本文将介绍如何使用条件变量来实现生产者消费者模型,帮

    2024年02月04日
    浏览(34)
  • 【RabbitMQ实战】 03 SpringBoot RabbitMQ生产者和消费者示例

    上一节我们写了一段原生API来进行生产和消费的例子。实际上SpringBoot对原生RabbitMQ客户端做了二次封装,让我们使用API的代价更低。 依赖引入 RabbitMQ的配置如下 每个配置的具体含义,详见配置 代码说明 使用RabbitTemplate可以发送消息 这个Controller定义了一个发送的接口,调用

    2024年02月07日
    浏览(39)
  • Java编写简易rabbitmq生产者与消费者

    开发时经常与其它系统用rabbitmq对接,当需要自测时,还是自己写rabbitmq生产者、消费者自测方便些。 下面总结下不用框架、使用java编写简易rabbitmq的方法。 (1)如果是maven,那就用 (2)如果没用maven,那就找一个 amqp-client-3.3.4.jar 文件,然后引入项目 说明: (1)其中的配置,按照

    2024年01月16日
    浏览(46)
  • 【RabbitMQ】RabbitMQ 消息的可靠性 —— 生产者和消费者消息的确认,消息的持久化以及消费失败的重试机制_rabbitmq 生产者消息确认

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新大数据全套学习资料》,

    2024年04月26日
    浏览(89)
  • C++实现经典同步问题(生产者消费者、读者写者、哲学家进餐、吸烟者问题)

    环境:windows 问题描述: 一组生产者进程和一组消费者进程共享一个初始为空、大小为〃的缓冲区,只有缓冲区没满时,生产者才能把消息放入缓冲区,否则必须等待;只有缓冲区不空时,消费者才能从中取出消息,否则必须等待。由于缓冲区是临界资源,它只允许一个生产

    2023年04月23日
    浏览(35)
  • Kafka官方生产者和消费者脚本简单使用

    怎样使用Kafka官方生产者和消费者脚本进行消费生产和消费?这里假设已经下载了kafka官方文件,并已经解压. 这就可以见到测试kafka对应topic了.

    2024年02月04日
    浏览(49)
  • 生产者消费者模型 C++ 版

    网上一般教程是使用std::queue,定义消费者 Consumer ,定义Producter类,在main函数里面加锁保证线程安全。 本片文章,实现一个线程安全的队列 threadsafe_queue,只在队列内部加锁。如此可适配,多生产者多消费者的场景 Consumer 头文件 cpp文件 运行结果如下: 优先队列做缓存 头文件

    2024年02月13日
    浏览(38)
  • 【ELK解决方案】ELK集群+RabbitMQ部署方案以及快速开发RabbitMQ生产者与消费者基础服务...

    前言: 大概一年多前写过一个部署ELK系列的博客文章,前不久刚好在部署一个ELK的解决方案,我顺便就把一些基础的部分拎出来,再整合成一期文章。大概内容包括:搭建ELK集群,以及写一个简单的MQ服务。 如果需要看一年多之前写的文章,可以详见下列文章链接(例如部署

    2023年04月08日
    浏览(45)
  • RabbitMQ学习笔记(消息发布确认,死信队列,集群,交换机,持久化,生产者、消费者)

    MQ(message queue):本质上是个队列,遵循FIFO原则,队列中存放的是message,是一种跨进程的通信机制,用于上下游传递消息。MQ提供“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后消息发送上游只需要依赖MQ,不需要依赖其它服务。 功能1:流量消峰 功能2:应用解耦 功

    2024年02月07日
    浏览(54)
  • 如何在rabbitmq中实现一个生产者,多个消费者,多个消费者都能收到同一条消息

    场景:用户登录,邀请其它用户进行视频会议,收到邀请的用户进入会议 rabbitmq实现思路: 选型:发布订阅模式(Publish/Subscribe) 一个生产者,多个消费者,每一个消费者都有自己的一个队列,生产者没有将消息直接发送到队列,而是发送到了交换机,每个队列绑定交换机,

    2023年04月25日
    浏览(54)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包