1、需要用到的参数:

  主机名:hostname、端口号:port、交换器:exchange、路由key:routingkey 、绑定路由:bindingkey、用户名:user、密码:psw,默认用户名和密码为guest。

2、步骤:

1)、建立TCP连接:

  conn = amqp_new_connection();

  socket = amqp_tcp_socket_new(conn);

2)、打开建立的TCP连接,使用socket,主机名和端口号:

  status = amqp_socket_open(socket, hostname, port);

3)、登录

  amqp_login(conn,"/",0,131072,0,AMQP_SASL_METHOD_PLAIN,"guest","guest");

4)、打开信道:

  amqp_channel_open(conn, 1);

  amqp_get_rpc_reply(conn);

5)、开始发送或者监听消息

6)、关闭信道、关闭连接、销毁连接:

  amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS);

  amqp_connection_close(conn, AMQP_REPLY_SUCCESS);

  amqp_destroy_connection(conn);

3、发送端

  pro文件

  HEADERS += \

  include\amqp.h \

  include\amqp_framing.h \

  include\amqp_tcp_socket.h

  SOURCE += \

    main.cpp \

  LIBS += $$PWD\lib\librabbitmq.4.dll.a

main.cpp文件

  #include <QtCore/QCoreApplication>

  #include <QDebug>

  #include "amqp.h"

  #include "amqp_framing.h"

  #include "amqp_tcp_socket.h"

  int main(int argc, char *argv[])
  {
    QCoreApplication a(argc, argv);

    const char* hostname = "localhost";

    int port = 5672;

    const char* exchange = "amq.direct";

    const char* routingkey = "test";

    const char* messagebody = "Hello World!";发送"Hello World!”

    amqp_connection_state_t  conn = amqp_new_connection();

    amqp_socket_t* socket = amqp_tcp_socket_new(conn);

    if (!socket)

    {
      qDebug() << "creating TCP socket";
    }

    int status = amqp_socket_open(socket, hostname, port);
    if (status)

    {
      qDebug() << "opening TCP socket";
    }

    amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest");
    amqp_channel_open(conn, 1);
    amqp_get_rpc_reply(conn);

    {
      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; /* persistent delivery mode */
      amqp_basic_publish(conn,1,amqp_cstring_bytes(exchange),amqp_cstring_bytes(routingkey),0,0,&props,amqp_cstring_bytes(messagebody));
    }

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

    return a.exec();
  }

4、接收端

  pro文件

  HEADERS += \

  include\amqp.h \

  include\amqp_framing.h \

  include\amqp_tcp_socket.h

  SOURCE += \

    main.cpp \

  LIBS += $$PWD\lib\librabbitmq.4.dll.a

main.cpp文件

  int main(int argc, char *argv[])

  {

    QApplication a(argc, argv);
int port = 5672;
const char* hostname = "192.168.250.223";
const char* exchange = "amq.direct";
const char* bindingkey = "test";

    amqp_connection_state_t conn = amqp_new_connection();
amqp_socket_t* socket = amqp_tcp_socket_new(conn);
    if(!socket)
{
qDebug()<<"creating TCP socket";
}

    int status = amqp_socket_open(socket,hostname,port);
if(status)
{
qDebug() << "opening TCP socket";
}
    amqp_login(conn,"/",0,131072,0,AMQP_SASL_METHOD_PLAIN,"guest","guest");
amqp_channel_open(conn,1);
amqp_get_rpc_reply(conn);
    amqp_queue_declare_ok_t *r = amqp_queue_declare(conn,1,amqp_empty_bytes,0,0,0,1,amqp_empty_table);
amqp_get_rpc_reply(conn);
    amqp_bytes_t queuename = amqp_bytes_malloc_dup(r->queue);
if(queuename.bytes == nullptr)
{
fprintf(stderr,"Out of memory while copying queue name");
return 1;
}
    amqp_queue_bind(conn,1,queuename,amqp_cstring_bytes(exchange),amqp_cstring_bytes(bindingkey),amqp_empty_table);
amqp_get_rpc_reply(conn);
amqp_basic_consume(conn,1,queuename,amqp_empty_bytes,0,1,0,amqp_empty_table);
amqp_get_rpc_reply(conn); while(1)
{
    amqp_maybe_release_buffers(conn);
    amqp_envelope_t envelope;
    amqp_rpc_reply_t res = amqp_consume_message(conn,&envelope,nullptr,0);
    if(AMQP_RESPONSE_NORMAL != res.reply_type)
    {
      break;
    }
    printf("Delivery %u, exchange %.*s routingkey %.*s\n",
          static_cast<uint>(envelope.delivery_tag),
          static_cast<int>(envelope.exchange.len),
          static_cast<char*>(envelope.exchange.bytes),
          static_cast<int>(envelope.routing_key.len),
          static_cast<char*>(envelope.routing_key.bytes));
    if(envelope.message.properties._flags & AMQP_BASIC_CONTENT_TYPE_FLAG)
    {
      printf("Content-type: %.*s\n",
            static_cast<int>(envelope.message.properties.content_type.len),
static_cast<char*>(envelope.message.properties.content_type.bytes));
    }
    amqp_dump(envelope.message.body.bytes,envelope.message.body.len);
    amqp_destroy_envelope(&envelope);
}
    amqp_channel_close(conn,1,AMQP_REPLY_SUCCESS);
amqp_connection_close(conn,AMQP_REPLY_SUCCESS);
amqp_destroy_connection(conn);
Widget w;
w.show();
return a.exec();
}

RabbitMq学习笔记——RabbitMQ C的使用的更多相关文章

  1. RabbitMQ学习笔记(五) Topic

    更多的问题 Direct Exchange帮助我们解决了分类发布与订阅消息的问题,但是Direct Exchange的问题是,它所使用的routingKey是一个简单字符串,这决定了它只能按照一个条件 ...

  2. RabbitMQ学习笔记1-hello world

    安装过程略过,一搜一大把. rabbitmq管理控制台:http://localhost:15672/   默认账户:guest/guest RabbitMQ默认监听端口:5672 JAVA API地 ...

  3. (转) Rabbitmq学习笔记

    详见原文: http://blog.csdn.net/shatty/article/details/9529463 Rabbitmq学习笔记

  4. 官网英文版学习——RabbitMQ学习笔记(十)RabbitMQ集群

    在第二节我们进行了RabbitMQ的安装,现在我们就RabbitMQ进行集群的搭建进行学习,参考官网地址是:http://www.rabbitmq.com/clustering.html 首先我们来看 ...

  5. 官网英文版学习——RabbitMQ学习笔记(一)认识RabbitMQ

    鉴于目前中文的RabbitMQ教程很缺,本博主虽然买了一本rabbitMQ的书,遗憾的是该书的代码用的不是java语言,看起来也有些不爽,且网友们不同人学习所写不同,本博主看的有些地方不太理想,为此本 ...

  6. RabbitMQ学习笔记五:RabbitMQ之优先级消息队列

    RabbitMQ优先级队列注意点: 1.只有当消费者不足,不能及时进行消费的情况下,优先级队列才会生效 2.RabbitMQ3.5以后才支持优先级队列 代码在博客:RabbitMQ学习笔记三:Java ...

  7. RabbitMQ学习笔记(六) RPC

    什么RPC? 这一段是从度娘摘抄的. RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的 ...

  8. 官网英文版学习——RabbitMQ学习笔记(八)Remote procedure call (RPC)

    在第四篇学习笔记中,我们学习了如何使用工作队列在多个工作者之间分配耗时的任务.   但是,如果我们需要在远程计算机上运行一个函数并等待结果呢?这是另一回事.这种模式通常称为远程过程调用或RPC.   ...

  9. RabbitMQ学习笔记一

    前 言 -解决问题  一.RabbitMQ安装  1.安装erlang 环境 a.下载erlang 版本,注意这里需要和安装的rabbitMq版本相配对,rabbitMQ官方网站上可以查到:https ...

随机推荐

  1. 【Go语言系列】第三方框架和库——GIN:快速入门

    要求要安装Gin软件包,需要:1.安装Go(需要1.11+版本)2.设置Go工作区 安装1.下载并安装 gin: $ go get -u github.com/gin-gonic/gin 2.将 gi ...

  2. python开发基础作业01:模拟登陆系统

    随老男孩学习python mark 作业要求及提示:编写登录接口 ''' 练习程序:编写登录接口 1. 输入用户名和密码 2. 认证成功后显示欢迎信息 3. 输错三次后锁定 输入三次后退出,下次同样用 ...

  3. 在工业派上使用opencv库的记录

    1.在工业派linux操作系统环境下,调用OpenCV库,用python写了第一个查看图片的程序 注意:要进入工业派的terminal 参考:https://www.cnblogs.com/magic ...

  4. 开源沙箱CuckooSandbox 介绍与部署

    1. 介绍 1.1应用  在工作中很多时候需要自己对一些可以程序,可执行文件进行检测,当然我们可以通过VT,微步,等一些开源的平台进行检测.现在我们通过自己搭建的开源的沙箱进行检测.所谓沙箱,是分离运 ...

  5. [蓝桥杯2017初赛]k倍区间 前缀和

    题目描述 给定一个长度为N的数列,A1, A2, ... AN. 如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间. ...

  6. Linux中常用命令的使用(一)

    这次只讲常用命令 先说命令的组成:命令一般由 (选项.命令.参数) 组成 下面就从开启一个Ubuntu开始说起 1.用户登录:在putty环境下,输完用户名在输入密码 别人想知道你用的linux系统 ...

  7. 关于java程序在运行时出现a java exception has occured时解决方法

    错误截图: 出现情况原因分析: 1.环境没有配置好,配置java环境变量: 参考 检查是否正确,java javac,可以尝试重新 2.查看使用的jdk版本是否存在版本问题: 例如jdk1.7对中文的 ...

  8. leetcode 390. 消除游戏

    {20-01-29 19:22} class Solution { public int lastRemaining(int n) { return help(n); } public static ...

  9. [理解] Linux 作为一个服务器是怎样的存在 (一)

    长期以来我就一直有一个疑问, 为什么当我们选择使用服务器的时候都会选择 Linux 作为操作系统, 以至于只要说到服务器就会不由自主的想到Linux, 那么Linux到底是什么呢? 当然我也不会妄谈天 ...

  10. 事件类型-UI事件、焦点事件

    DOM3级事件包括以下几类事件: UI事件:当用户与页面上的元素交互时触发 焦点事件:当元素获得或失去焦点时触发 鼠标事件:当用户通过鼠标在页面上执行操作时触发 滚轮事件:当使用鼠标滚轮时触发 文本事 ...