rabbitmq使用

基于rabbitmq-c的Rabbitmq C++客户端的实现 基于rabbitmq-c的Rabbitmq C++ Client 仅做记录,后续有问题再修改。 阅读详情
    #include "amqp.h"
    #include "amqp_tcp_socket.h"
    #include "amqp_framing.h"
    amqp_connection_state_t m_conn;
    amqp_socket_t *m_socket;
    amqp_basic_properties_t m_props;

一:初始化

CVideoLabelsConn::CVideoLabelsConn(void):
m_bConnSucc(false)
{
    m_props._flags = AMQP_BASIC_CONTENT_TYPE_FLAG | AMQP_BASIC_DELIVERY_MODE_FLAG;
    m_props.content_type = amqp_cstring_bytes("text/plain");
    m_props.delivery_mode = DELIVER_MODE;
}

二:连接rabbitmq


HPR_INT32 CVideoLabelsConn::Connnect()
{
    HPR_Guard cGuard(&m_cLock);
    if(m_bConnSucc)
    {
        return HPR_OK;
    }
    HPR_INT32 iRet = HPR_OK;
    do 
    {
        m_conn = amqp_new_connection();
        m_socket = amqp_tcp_socket_new(m_conn);
        if(!m_socket)
        {
            PLUGIN_LOG_ERROR("rabbitmq connect amqp_tcp_socket_new fail");
            iRet = HPR_ERROR;
            break;
        }
        std::string strHostName = CRabbitMqConfig::instance()->GetIp();
        int iPort = CRabbitMqConfig::instance()->GetPort();
        int status = amqp_socket_open(m_socket, strHostName.c_str(), iPort);
        if(AMQP_STATUS_OK != status)
        {
            PLUGIN_LOG_ERROR("rabbitmq connect amqp_socket_open fail");
            iRet = HPR_ERROR;
            break;
        }
        std::string strPwd = CRabbitMqConfig::instance()->GetPwd();
        std::string strUserName = CRabbitMqConfig::instance()->GetUserName();
        std::string strVhost = CRabbitMqConfig::instance()->GetVhost();
        if(HPR_OK != die_on_amqp_error(amqp_login(m_conn, strVhost.c_str(), 0, FRAME_MAX, 0, AMQP_SASL_METHOD_PLAIN,
            strPwd.c_str(), strUserName.c_str()),
            "Logging in"))
        {
            iRet = HPR_ERROR;
            break;
        }
        //打开通道
        amqp_channel_open(m_conn, MQ_CHANNEL_ID);
        if(HPR_OK !=die_on_amqp_error(amqp_get_rpc_reply(m_conn), "Opening channel"))
        {
            iRet = HPR_ERROR;
            break;
        }
        //声明交换机
        /*std::string strExchange = CRabbitMqConfig::instance()->GetExchange();
        amqp_exchange_declare(m_conn, MQ_CHANNEL_ID, amqp_cstring_bytes(strExchange.c_str()),amqp_cstring_bytes(MQ_EXCHANGE_TYPE),
            0, 1, amqp_empty_table);        
        if(HPR_OK != die_on_amqp_error(amqp_get_rpc_reply(m_conn), "Declaring exchange"))
        {
            break;
        }*/
        iRet = HPR_OK;
        m_bConnSucc = true;
    } while (false);

    return iRet;
}

三:发送数据

HPR_INT32 CVideoLabelsConn::Send( HPR_INT32 type, void *pData, int iLen, int nMsgCount )
{
    HPR_Guard cGuard(&m_cLock);

    if ((!m_bConnSucc)||NULL == pData  || sizeof(TDA_PLATFORM_VACALARM_INFO) != iLen)
    {
        PLUGIN_LOG_ERROR("rabbit mq send failed");      
        return HPR_ERROR;
    }

    TDA_PLATFORM_VACALARM_INFO* pVideoLabelsData = (TDA_PLATFORM_VACALARM_INFO*)pData;
    std::string strMsg = pVideoLabelsData->stVacAlarmInfo.szAlarmJsonInfo;
    //rabbitmq amqp协议
    std::string strExchange = CRabbitMqConfig::instance()->GetExchange();
    std::string strRoutingKey = CRabbitMqConfig::instance()->GetRoutingKey();
    die_on_error(amqp_basic_publish(m_conn, 1, amqp_cstring_bytes(strExchange.c_str()),
        amqp_cstring_bytes(strRoutingKey.c_str()), 0, 0,
        &m_props, amqp_cstring_bytes(strMsg.c_str())),
        "Publishing");
    return HPR_OK;
}

四:释放资源

HPR_INT32 CVideoLabelsConn::Close()
{
    HPR_Guard cGuard(&m_cLock);
    die_on_amqp_error(amqp_channel_close(m_conn, 1, AMQP_REPLY_SUCCESS),
        "Closing channel");
    die_on_amqp_error(amqp_connection_close(m_conn, AMQP_REPLY_SUCCESS),
        "Closing connection");
    die_on_error(amqp_destroy_connection(m_conn), "Ending connection");
    PLUGIN_LOG_INFO("rabbitmq close succ");
    return HPR_OK;
}
二、租用AutoDL服务器与连接教程 点击右上角控制台,选择【租用新的实例】;,我这里使用的是xshell和xftp工具(自行下载)。打开本地目录和服务器目录,直接拖动文件。 阅读详情

相关推荐

STM32--基于STM32F103C8T6的OV7670摄像头显示

使用 STM32F103C8T6 微控制器驱动 OV7670 摄像头模组,并将图像数据显示在屏幕上,是嵌入式系统中常见的图像采集与显示应用。OV7670 是一款 CMOS VGA 图像传感器,具有高灵敏度、低电压等特点,适用于嵌入式应用。而 STM32F103C8T6 是一款常用的 MCU 控制器,具有丰富的管脚资源和较高的工作频率。

duierrorshuobu的博客 2146

rabbitmq-c api详细说明

最近项目用到rabbit,客户端使用rabbitmq-c库,网上没有多少中文的说明,因此对使用到的函数做了总结: amqp_new_connection 函数作用:分配和初始化一个新amqp连接对象 函数原型:amqp_connection_state_t  amqp_new_connection(void); 参数:无 返回值:成功返回amqp连接对象,失败返回NULL amqp_...

我是小慧慧 1万+

蛋白质组学进阶指南 | (八)差异蛋白筛选与功能解析实战

本文是蛋白质组学差异蛋白筛选与功能解析的实战指南。详细讲解了如何利用R语言的limma包进行差异表达分析,结合FDR校正和差异倍数设定筛选关键蛋白,并通过火山图可视化结果。进一步介绍了使用clusterProfiler进行GO与KEGG功能富集分析,以及利用STRING数据库和Cytoscape构建蛋白互作网络以识别枢纽分子,最终串联分析形成可验证的生物学假说。

weixin_29208077的博客 745

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

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

暂无简介 3239

西门子1200PLC编程实战:OB、FC、FB与DB的深度解析与应用技巧

本文深度解析西门子1200PLC编程中OB、FC、FB与DB四大核心功能块的应用技巧。通过工厂化比喻,阐明OB作为程序总调度、FC作为可重用函数、FB作为带记忆的智能设备以及DB作为数据仓库的角色与关系,并提供实战技巧,帮助工程师构建结构清晰、易于维护的高效PLC程序。

weixin_29280657的博客 442

QCM6490平台DDR测试:从QDUTT配置到眼图分析的实战指南

本文详细介绍了QCM6490平台DDR测试的全流程,从QDUTT工具安装配置到眼图分析,提供了实战操作指南和常见问题解决方案。通过具体案例分享,帮助工程师掌握DDR测试技巧,确保内存稳定性,特别适用于物联网和边缘计算设备的开发调试。

weixin_33910191的博客 459

rabbitmq-c 程序实现客户端服务端

【代码】rabbitmq-c 程序实现客户端服务端。

一去二三里...的博客 796

西南交通大学车辆工程专业大四上车辆综合实训ame仿真部分

西南交通大学车辆工程专业大四上车辆综合实训ame仿真建模部分

qq_64814052的博客 1245

Rabbitmq C++客户端(基于rabbitmq-c)

    最近项目使用了rabbitmq消息队列,需要基于rabbitmq-c(https://github.com/alanxz/rabbitmq-c)进行一层封装,然后根据官方自带示例以及网上代码整理了一下。    发送者需要声明exchange,并指定routekey进行数据发送;消费者需要声明一个Queue并绑定exchange和routekey,进行数据接收。RabbitmqClient头...

LT_lover的专栏 2万+

【全开源】旅行吧旅游门票预订系统源码(FastAdmin+ThinkPHP+Uniapp)

此外,系统还会根据我的旅行计划和喜好,为我推荐合适的景点和门票,让我的旅行更加丰富多彩。旅游门票预订系统的出现,不仅简化了门票预订的流程,还提高了旅行的便捷性和效率。一款基于FastAdmin+ThinkPHP+Uniapp开发的旅游门票预订系统,支持景点门票、导游产品便捷预订、美食打卡、景点分享、旅游笔记分享等综合系统,提供前后台无加密源码,支持私有化部署。如今,有了旅游门票预订系统,这些问题都能迎刃而解。智能推荐:系统还会根据你的旅行计划和喜好,为你推荐合适的景点和门票,让你的旅行更加丰富多彩。

2401_84413757的博客 1302

阿里九宫格验证码 (Baxia SecCaptcha) 逆向工程与自动化求解

实现对阿里巴夏 (Baxia) 九宫格点击验证码的全自动求解模式说明依赖浏览器模式通过 Puppeteer/Playwright 控制真实浏览器,享有完整 DOM/Canvas/WASM 环境需要 Chrome/Chromium纯算模式脱离浏览器,通过 HTTP API + Node.js WASM 解密完成求解无需浏览器。

猫敷雪 400

ubuntu中安装rabbitmq服务并成功启动

在我们使用rabbitmq时,首先要对其进行安装,而后才能对其进行使用 安装 Erlang 由于 RabbitMQ 是采用 Erlang 编写的,所以需要安装 Erlang 语言库。就像 java 需要安装 jvm 一样。 首先在系统中加入 erlang apt 仓库。 $ wget https://packages.erlang-solutions.com/erlang-s...

a9794666的博客 1208

使用 MATLAB/Simulink 构建一个电机-液压联合控制系统的仿真模型

本文详细介绍了基于Simulink的电机与液压执行机构联合控制系统建模方法。通过7个步骤,系统讲解了从创建项目、搭建PMSM电机模型、建立逆变器与矢量控制模块,到构建液压泵和执行机构模型的完整过程。重点展示了如何设置关键参数、添加测量反馈模块,并提供了实用的代码片段。教程还包含仿真运行流程、结果分析指标及进阶建议,帮助读者掌握多物理场耦合系统建模的核心技术。该方法适用于机电液一体化系统设计,为工程实践提供有效参考。

amy_mhd的博客 613

RabbitMQ 之 使用Web管理界面认识RabbitMQ

一、RabbitMQ简介: RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现 核心概念: Message 消息 消息是不具名的,它由消息头和消息体组成,消息体式不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mo...

qq_41097820的博客 4万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

rabbitmq系列1——安装并使用rabbitmq

🔥本篇概览:详细讲解了安装并使用rabbitmq,并讲解了数据隔离而生的的virtualhost。🌈⭕🔥

做一个善良的人,做好自己的事,如果愿意,再发一份光。 2148

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

RabbitMQ的基本使用

RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。 一、消息队列 1、MQ:Message Queue释义 服务之间最常见的通信方式是直接调用彼此来通信,消息从一端发出后立即就可以达到另一端,称为即时消息通讯(同步通信) 消息从某一端发出后,首先进入一个容器进行临时存储,当达到某种条件后,再由这个容器发送给另一端,称为延迟消息通讯(异步通信) 2、消息队列特点.

qq_54936371的博客 3160

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【RabbitMQ】Windows下RabbitMQ的安装和部署

RabbitMQ在windows下安装部署

Hanson的博客 4105

使用RabbitMQ

【代码】使用RabbitMQ。

make_progress的博客 2288

前端使用 rabbitmq

安装rabbitmq 自行百度 安装rabbitmq stomq stomq 的作用 Stomp是一个简单的消息文本协议(不重点介绍,没仔细研究过)。RabbitMQ中STOMP plugin的集成,实现了由浏览器通过WebSocket协议访问消息队列,SockJS作为后备(旧版的浏览器不支持WebSocket协议) stomq 安装 windows 与 linux 自行百度 安装成功界面 前端...

qq_35207917的博客 4768

RabbitMQ学习笔记:节点名称详解、rabbitmq-server、及rabbitmq-env.conf

rabbitmq-server rabbitmq-server 启动一个RabbitMQ节点 1.rabbitmq-server在前端启动一个RabbitMQ节点,示例如下: [root@rabbit3 rabbitmq]# rabbitmq-server ## ## RabbitMQ 3.8.1 ## ## ########## Copyright (c) 20...

OceanSky的专栏 1万+

什么是RabbitMQ

同步通讯:就像打电话,需要实时响应。异步通信:就像发微信,不需要马上回复。两种方式各有优劣,打电话可以立即得到响应,但是你却不能跟多个人同时通话。发微信可以同时与多个人收发信息,但是往往响应会有延迟。学SpringCloud的时候,我们的Feign 其实就是同步通讯的,他其实有以下这几个缺点耦合度高:(每次有新的需求,都需要更改代码)性能下降:(消费者需要等待提供者响应,如果调用链过长,那么响应的时间等于每次调用的时间之和)资源浪费。

越努力越幸运的博客 2945

RabbitMQ系列 使用Docker一键部署RabbitMQ集群

概述 本文重点介绍的Docker的使用,以及如何部署RabbitMQ集群,最基础的Docker安装,本文不做过多的描述,读者可以自行度娘。 Windows10上Docker的安装 因为本人用的是Windows系统,所有推荐一个不错的安装文章,详见:https://blog.youkuaiyun.com/xiaoping0915/article/details/75094857 注意:设置阿里云Docker Hub加速,配置Registry mirrors地址“https://j0andt2p.mirror.al

monkey的专栏 1715

【RabbitMQ实战】06 RabbitMQ配置

一般情况下,可以使用默认的内建配置来有效地运行RabbitMQ,并且大多数情况下也并不需要修改任何 RabbitMQ的配置。当然,为了更加有效地操控 RabbitMQ,也可以利用调节系统范围内的参数来达到定制化的需求。RabbitMQ提供了三种方式来定制化服务:(1)环境变量(Enviroment Variables )。RabbitMQ服务端参数可以通过环境变量进行配置,例如,节点名称、RabbitMQ配置文件的地址、节点内部通信端口等。(2)配置文件(Configuration File )

程序员笔记 2914

RabbitMQ的使用

RabbitMQ是一个开源的消息代理(Message Broker),基于AMQP(Advanced Message Queuing Protocol)协议实现,用于在分布式系统中实现异步通信、应用解耦和流量削峰。

m0_71548988的博客 3395

RabbitMQ

二、RabbitMQ用户管理 2.1 逻辑结构 用户 虚拟主机 队列 2.2 用户管理 2.2.1 命令行用户管理 在linux中使用命令行创建用户 ## 进入到rabbit_mq的sbin目录 cd /usr/local/rabbitmq_server-3.7.0/sbin ## 新增用户 ./rabbitmqctl add_user ytao admin123 设置用户级别 ## 用户级别: ## 1.administrator 可以登录控制台、查看所有信息、可以对RabbitMQ进行管

qq_43587076的博客 3704

RabbitMq使用

RabbitMQ 实战教程 1.MQ引言 1.1 什么是MQ MQ(Message Quene) : 翻译为 消息队列,通过典型的 生产者和消费者模型,生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,轻松的实现系统间解耦。别名为 消息中间件 通过利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。 1.2 MQ有哪些 当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、

上山打卤面的博客 1201
上一篇: ftp服务器的建立(windows&linux)
下一篇: 【过拟合与正则化】
ppwangGS
博客等级 码龄11年 58粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值