Cmakelist.txt之Liunx-rabbitmq

news2024/11/23 5:22:54

1.cmakelist.txt

cmake_minimum_required(VERSION 3.16)
​
project(rabbitmq_linux_test LANGUAGES C)
​
add_library(examples-common OBJECT)
target_sources(examples-common PRIVATE
  utils.h
  utils.c)
if(WIN32)
  target_sources(examples-common PRIVATE win32/platform_utils.c)
else()
  target_sources(examples-common PRIVATE unix/platform_utils.c)
endif()
target_link_libraries(examples-common PRIVATE rabbitmq)
​
add_executable(rabbitmq_linux_test main.c)
​
​
target_link_libraries(rabbitmq_linux_test examples-common rabbitmq)
​
​
include(GNUInstallDirs)
install(TARGETS rabbitmq_linux_test
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

2.测试代码

// Copyright 2007 - 2021, Alan Antonuk and the rabbitmq-c contributors.
// SPDX-License-Identifier: mit

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <rabbitmq-c/amqp.h>
#include <rabbitmq-c/tcp_socket.h>

#include "utils.h"

#define SUMMARY_EVERY_US 1000000

static void send_batch(amqp_connection_state_t conn, char const *queue_name,
                       int rate_limit, int message_count) {
    uint64_t start_time = now_microseconds();
    int i;
    int sent = 0;
    int previous_sent = 0;
    uint64_t previous_report_time = start_time;
    uint64_t next_summary_time = start_time + SUMMARY_EVERY_US;

    char message[256];
    amqp_bytes_t message_bytes;

    for (i = 0; i < (int)sizeof(message); i++) {
        message[i] = i & 0xff;
    }

    message_bytes.len = sizeof(message);
    message_bytes.bytes = message;

    for (i = 0; i < message_count; i++) {
        uint64_t now = now_microseconds();

        die_on_error(amqp_basic_publish(conn, 1, amqp_cstring_bytes("amq.direct"),
                                        amqp_cstring_bytes(queue_name), 0, 0, NULL,
                                        message_bytes),
                     "Publishing");
        sent++;
        if (now > next_summary_time) {
            int countOverInterval = sent - previous_sent;
            double intervalRate =
                countOverInterval / ((now - previous_report_time) / 1000000.0);
            printf("%d ms: Sent %d - %d since last report (%d Hz)\n",
                   (int)(now - start_time) / 1000, sent, countOverInterval,
                   (int)intervalRate);

            previous_sent = sent;
            previous_report_time = now;
            next_summary_time += SUMMARY_EVERY_US;
        }

        while (((i * 1000000.0) / (now - start_time)) > rate_limit) {
            microsleep(2000);
            now = now_microseconds();
        }
    }

    {
        uint64_t stop_time = now_microseconds();
        int total_delta = (int)(stop_time - start_time);

        printf("PRODUCER - Message count: %d\n", message_count);
        printf("Total time, milliseconds: %d\n", total_delta / 1000);
        printf("Overall messages-per-second: %g\n",
               (message_count / (total_delta / 1000000.0)));
    }
}

int main(int argc, char const *const *argv) {
    // char const *hostname;
    // int port, status;
    // int rate_limit;
    // int message_count;
    amqp_socket_t *socket = NULL;
    amqp_connection_state_t conn;

    // if (argc < 5) {
    //     fprintf(stderr,
    //             "Usage: amqp_producer host port rate_limit message_count\n");
    //     return 1;
    // }

    // hostname = argv[1];
    // port = atoi(argv[2]);
    // rate_limit = atoi(argv[3]);
    // message_count = atoi(argv[4]);

    char const *hostname = "localhost";// 直接定义主机名,这里假设为localhost
    int port = 5672; // 直接定义端口号,RabbitMQ默认端口是5672
    int rate_limit = 100; // 直接定义速率限制,这里假设为100
    int message_count = 1000; // 直接定义消息数量,这里假设为1000
    int status;

    conn = amqp_new_connection();

    socket = amqp_tcp_socket_new(conn);
    if (!socket) {
        die("creating TCP socket");
    }

    status = amqp_socket_open(socket, hostname, port);
    if (status) {
        die("opening TCP socket");
    }

    die_on_amqp_error(amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN,
                                 "guest", "guest"),
                      "Logging in");
    amqp_channel_open(conn, 1);
    die_on_amqp_error(amqp_get_rpc_reply(conn), "Opening channel");

    send_batch(conn, "test queue", rate_limit, message_count);

    die_on_amqp_error(amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS),
                      "Closing channel");
    die_on_amqp_error(amqp_connection_close(conn, AMQP_REPLY_SUCCESS),
                      "Closing connection");
    die_on_error(amqp_destroy_connection(conn), "Ending connection");
    return 0;
}

3.结果

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AIGC】ChatGPT提示词Prompt解析:拒绝的艺术:如何优雅地说“不“

引言 在人际交往的复杂网络中,学会优雅地拒绝是一种至关重要的社交智慧。很多人往往因为害怕伤害他人的感受,而选择敷衍、拖延或不置可否。 然而,真正的智慧在于如何用尊重和同理心传达"不"的信息。 本文将深入探讨优雅拒绝的艺术,帮助你在维护自身边界的同时,…

《OpenCV 图像缩放、翻转与变换全攻略:从基础操作到高级应用实战》

简介&#xff1a;本文详细阐述了 OpenCV 在图像操作中的关键技术&#xff0c;包括缩放&#xff08;确定尺寸缩放与按比例缩放&#xff09;、翻转&#xff08;沿不同轴的翻转方式&#xff09;以及变换&#xff08;平移、旋转、三点确定变换和四点确定变换即透视变换&#xff09;…

蓝桥杯每日真题 - 第21天

题目&#xff1a;(空间) 题目描述&#xff08;12届 C&C B组A题&#xff09; 解题思路&#xff1a; 转换单位&#xff1a; 内存总大小为 256MB&#xff0c;换算为字节&#xff1a; 25610241024268,435,456字节 计算每个整数占用空间&#xff1a; 每个 32 位整数占用…

24小时自动监控,自动录制直播蓝光视频!支持抖音等热门直播软件

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 工具特点📒📝 使用🎈 获取方式 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 对于许多直播爱好者和内容创作者而言,错过心爱的直播或难以搜集视频素材始终是一个难题。今天,给大家分享的这款工具可以轻松解决这个问题,它拥有…

HCIA考试内容多吗?HCIA数通学什么?

HCIA(Huawei Certified ICT Associate)考试的具体内容因华为公司技术发展与考试更新而有所调整。 一般而言&#xff0c;HCIA考试内容涵盖了计算机网络基础知识、设备配置技巧、网络协议理解、安全与管理实践等方面。 HCIA考试内容有什么 具体而言&#xff0c;HCIA考试内容包…

【MySQL实战45讲笔记】基础篇——深入浅出索引(上)

系列文章 基础篇——MySQL 的基础架构 基础篇——redo log 和 binlog 基础篇——事务隔离 目录 系列文章深入浅出索引&#xff08;上&#xff09;4.1 索引的常见模型4.2 InnoDB 的索引模型4.3 索引维护4.4 思考&#xff1a;为什么要重建索引以及如何做&#xff1f; 深入浅出索…

技术美术百人计划 | 《2.1 色彩空间介绍》笔记

总览 一、色彩发送器 色彩认知&#xff1a; 光源是出生点&#xff0c;光源发射出光线&#xff0c;光线通过直射反射折射等路径最终进入人眼。 但人眼接收到光线后&#xff0c;人眼的细胞产生了一系列化学反应。 由此把产生的信号传入大脑&#xff0c;最终大脑对颜色产生了认…

无插件H5播放器EasyPlayer.js视频流媒体播放器如何开启electron硬解码Hevc(H265)

在数字化时代&#xff0c;流媒体播放器技术正经历着前所未有的变革。随着人工智能、大数据、云计算等技术的融合&#xff0c;流媒体播放器的核心技术不断演进&#xff0c;为用户提供了更加丰富和个性化的观看体验。 EasyPlayer.js H5播放器&#xff0c;是一款能够同时支持HTTP、…

Cannal实现MySQL主从同步环境搭建

大家好&#xff0c;我是袁庭新。 在多数情况下&#xff0c;客户端往往会优先获取缓存中的数据。然而&#xff0c;当缓存数据与数据库中的实际数据存在显著不一致时&#xff0c;可能会导致严重的后果。因此&#xff0c;确保数据库与缓存数据之间的一致性变得至关重要&#xff0c…

机器学习基础06

目录 1.梯度下降 1.1梯度下降概念 1.2梯度下降公式 1.3学习率 1.4实现梯度下降 1.5API 1.5.1随机梯度下降SGD 1.5.2小批量梯度下降MBGD 1.6梯度下降优化 2.欠拟合过拟合 2.1欠拟合 2.2过拟合 2.3正则化 2.3.1L1正则项&#xff08;曼哈顿距离&#xff09; 2.3.2…

探索ASP.NET Core 6 MVC与SqlServer的完美结合:一个开源示例项目

探索ASP.NET Core 6 MVC与SqlServer的完美结合&#xff1a;一个开源示例项目 【下载地址】ASP.NETCore6MVCSqlServer示例项目 ASP.NET Core 6 MVC SqlServer 示例项目本仓库提供了一个基于 ASP.NET Core 6 的 MVC 应用程序示例&#xff0c;使用 SqlServer 数据库 项目地址: …

LLM | 论文精读 | CVPR | Alpha-CLIP —— 一个聚焦目标区域的CLIP模型

论文标题&#xff1a;Alpha-CLIP: A CLIP Model Focusing on Wherever You Want 作者&#xff1a;Zeyi Sun, Ye Fang, Tong Wu, Pan Zhang, Yuhang Zang等 期刊&#xff1a;CVPR 2024 DOI&#xff1a;http://arxiv.org/pdf/2312.03818v2 email&#xff1a;yuhan.huangwhu.ed…

MySQL 的 Change Buffer 是什么?它有什么作用?

MySQL 的 Change Buffer 是什么&#xff1f;它有什么作用&#xff1f; MySQL 是目前广泛使用的开源数据库管理系统&#xff0c;其中的 InnoDB 存储引擎凭借其高性能、高可靠性以及强大的事务支持&#xff0c;成为了默认的存储引擎。在 InnoDB 的众多优化机制中&#xff0c;Cha…

axios 请求跨域问题

文章目录 1. 使用场景2. 解决办法 1. 使用场景 ① 编写后端测试接口&#xff0c;Vue-CLI 的默认端口为 8080&#xff0c;所以为避免端口冲突&#xff0c;我们后端的端口号换成 8081。 ② 前端通过 axios 向后端服务发起请求。 <script> import axios from axios export…

VConsole——(H5调试工具)前端开发使用于手机端查看控制台和请求发送

因为开发钉钉H5微应用在手机上一直查看不到日志等&#xff0c;出现安卓和苹果上传图片一边是成功的&#xff0c;一边是失败的&#xff0c;所以找了这个&#xff0c;之前在开发微信小程序进行调试的时候能看到&#xff0c;之前没想到过&#xff0c;这次被人提点发现可以单独使用…

集合卡尔曼滤波(Ensemble Kalman Filter),用于二维滤波(模拟平面上的目标跟踪),MATLAB代码

集合卡尔曼滤波&#xff08;Ensemble Kalman Filter&#xff09; 文章目录 引言理论基础卡尔曼滤波集合卡尔曼滤波初始化预测步骤更新步骤卡尔曼增益更新集合 MATLAB 实现运行结果3. 应用领域结论 引言 集合卡尔曼滤波&#xff08;Ensemble Kalman Filter, EnKF&#xff09;是…

写给Vue2使用者的Vue3学习笔记

&#x1f64b;‍请注意&#xff0c;由于本人项目中引入了unplugin-auto-import的依赖&#xff0c;所以所有的代码示例中均未手动引入各种依赖库&#xff08;ref、reactive、useRouter等等&#xff09; 初始环境搭建 npm init vuelatest模板语法 插值 同 Vue2 <span>…

golang调用webview,webview2,go-webview2

go version go1.20 windows/amd64 先要了解一些第三方库 1、webview/webview 它是一个跨平台的轻量级的webview库&#xff0c;面向的是C/C&#xff0c;使用它可以构建跨平台的GUI。webview就是浏览器内核&#xff0c;在不同操作系统上是不同的库&#xff0c;比如在windows上…

【初阶数据结构篇】双向链表的实现(赋源码)

文章目录 须知 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助吗&#xff1…

结合第三方模块requests,文件IO、正则表达式,通过函数封装爬虫应用采集数据

#引用BeautifulSoup更方便提取html信息&#xff1b;requests模块&#xff0c;发生http请求&#xff1b;os模块&#xff0c;文件写入import requests from bs4 import BeautifulSoup import os#当使用requests库发送请求时&#xff0c;如果不设置User - Agent&#xff0c;默认的…